From 6ae9edf51dbaf8fc23661dd156b7b59c316b75e2 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 03 2016 06:05:11 +0000 Subject: import libvirt-2.0.0-10.el7 --- diff --git a/.gitignore b/.gitignore index 22bdbc4..228728d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libvirt-1.2.17.tar.gz +SOURCES/libvirt-2.0.0.tar.xz diff --git a/.libvirt.metadata b/.libvirt.metadata index 7bf5703..8f70851 100644 --- a/.libvirt.metadata +++ b/.libvirt.metadata @@ -1 +1 @@ -504d1393852aaf2acdd75cadf2edf5ecf9845c5a SOURCES/libvirt-1.2.17.tar.gz +9a923b06df23f7a5526e4ec679cdadf4eb35a38f SOURCES/libvirt-2.0.0.tar.xz diff --git a/SOURCES/libvirt-Add-QEMU_CAPS_DEVICE_INTEL_IOMMU.patch b/SOURCES/libvirt-Add-QEMU_CAPS_DEVICE_INTEL_IOMMU.patch new file mode 100644 index 0000000..51ec460 --- /dev/null +++ b/SOURCES/libvirt-Add-QEMU_CAPS_DEVICE_INTEL_IOMMU.patch @@ -0,0 +1,105 @@ +From d9e2deb0b6928f213d11f5c6e82ac17c3cad0b3b Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 25 Jul 2016 10:24:57 +0200 +Subject: [PATCH] Add QEMU_CAPS_DEVICE_INTEL_IOMMU +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Check whether QEMU supports -device intel-iommu + +Note that the presence of this option does not mean that it's +usable because of a bug in earlier QEMU versions, but it's +better than nothing. + +https://bugzilla.redhat.com/show_bug.cgi?id=1235581 +(cherry picked from commit 8e7e79738d47d7881eb6ccc61ddcb0cfba418d94) +Signed-off-by: Ján Tomko + + Conflicts: + src/qemu/qemu_capabilities.c + src/qemu/qemu_capabilities.h + tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml + tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml + tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml + Downstream is missing QEMU_CAPS_DISPLAY +--- + src/qemu/qemu_capabilities.c | 2 ++ + src/qemu/qemu_capabilities.h | 1 + + tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml | 1 + + tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 1 + + tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 1 + + 5 files changed, 6 insertions(+) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 9f1c0e1..b35948d 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -337,6 +337,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, + "drive-detect-zeroes", + + "tls-creds-x509", /* 230 */ ++ "intel-iommu", + ); + + +@@ -1566,6 +1567,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { + { "pxb", QEMU_CAPS_DEVICE_PXB }, + { "pxb-pcie", QEMU_CAPS_DEVICE_PXB_PCIE }, + { "tls-creds-x509", QEMU_CAPS_OBJECT_TLS_CREDS_X509 }, ++ { "intel-iommu", QEMU_CAPS_DEVICE_INTEL_IOMMU }, + }; + + static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBalloon[] = { +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index 9d891c8..379aff0 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -370,6 +370,7 @@ typedef enum { + + /* 230 */ + QEMU_CAPS_OBJECT_TLS_CREDS_X509, /* -object tls-creds-x509 */ ++ QEMU_CAPS_DEVICE_INTEL_IOMMU, /* -device intel-iommu */ + + QEMU_CAPS_LAST /* this must always be the last item */ + } virQEMUCapsFlags; +diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +index 112ac95..98c260c 100644 +--- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +@@ -182,6 +182,7 @@ + + + ++ + 2004000 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +index 8157985..590c8c1 100644 +--- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +@@ -187,6 +187,7 @@ + + + ++ + 2005000 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +index 1d503dd..128ac11 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +@@ -193,6 +193,7 @@ + + + ++ + 2006000 + 0 + +-- +2.9.2 + diff --git a/SOURCES/libvirt-Add-USB-addresses-to-qemuhotplug-test-cases.patch b/SOURCES/libvirt-Add-USB-addresses-to-qemuhotplug-test-cases.patch new file mode 100644 index 0000000..aeb6ca8 --- /dev/null +++ b/SOURCES/libvirt-Add-USB-addresses-to-qemuhotplug-test-cases.patch @@ -0,0 +1,64 @@ +From 44efa3d179e355827796930f8d17862029fb9747 Mon Sep 17 00:00:00 2001 +Message-Id: <44efa3d179e355827796930f8d17862029fb9747@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:46 +0200 +Subject: [PATCH] Add USB addresses to qemuhotplug test cases +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This test assumes the XML will be the same after formatting. +Add USB addresses to it to keep it working when we autoassign them. + +(cherry picked from commit 3681e0a9feb50b54a4097eb11b5c6cfd48522994) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + .../qemuhotplug-console-compat-2-live+console-virtio.xml | 1 + + tests/qemuxml2argvdata/qemuxml2argv-console-compat-2-live.xml | 1 + + tests/qemuxml2argvdata/qemuxml2argv-console-compat-2.xml | 4 +++- + 3 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/tests/qemuhotplugtestdata/qemuhotplug-console-compat-2-live+console-virtio.xml b/tests/qemuhotplugtestdata/qemuhotplug-console-compat-2-live+console-virtio.xml +index 3495ee6..7ca36d5 100644 +--- a/tests/qemuhotplugtestdata/qemuhotplug-console-compat-2-live+console-virtio.xml ++++ b/tests/qemuhotplugtestdata/qemuhotplug-console-compat-2-live+console-virtio.xml +@@ -100,6 +100,7 @@ + + + ++
+ + + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2-live.xml b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2-live.xml +index b36af27..f300940 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2-live.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2-live.xml +@@ -95,6 +95,7 @@ + + + ++
+ + + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2.xml b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2.xml +index 2ae104e..7b35709 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-2.xml +@@ -78,7 +78,9 @@ + +
+ +- ++ ++
++ + + + +-- +2.9.2 + diff --git a/SOURCES/libvirt-Add-functions-for-adding-USB-controllers-to-addrs.patch b/SOURCES/libvirt-Add-functions-for-adding-USB-controllers-to-addrs.patch new file mode 100644 index 0000000..1197d15 --- /dev/null +++ b/SOURCES/libvirt-Add-functions-for-adding-USB-controllers-to-addrs.patch @@ -0,0 +1,181 @@ +From 10bbdca5f7957403ea9baa4e007c8d5a18f23148 Mon Sep 17 00:00:00 2001 +Message-Id: <10bbdca5f7957403ea9baa4e007c8d5a18f23148@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:51 +0200 +Subject: [PATCH] Add functions for adding USB controllers to addrs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Walk through all the usb controllers in the domain definition +and create the corresponding structures in the virDomainUSBAddressSet. + +(cherry picked from commit 6b3e4e2bea91b1247485da0987f98ccbe30e0629) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/domain_addr.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++ + src/conf/domain_addr.h | 4 ++ + src/libvirt_private.syms | 1 + + 3 files changed, 126 insertions(+) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 658aad5..ea37a42 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1326,3 +1326,124 @@ virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs) + VIR_FREE(addrs->buses); + VIR_FREE(addrs); + } ++ ++ ++static size_t ++virDomainUSBAddressControllerModelToPorts(virDomainControllerDefPtr cont) ++{ ++ int model = cont->model; ++ ++ if (model == -1) ++ model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; ++ ++ switch ((virDomainControllerModelUSB) model) { ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI: ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX4_UHCI: ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_VT82C686B_UHCI: ++ return 2; ++ ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_EHCI: ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1: ++ return 6; ++ ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1: ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2: ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3: ++ /* These have two ports each and are used to provide USB1.1 ++ * ports while ICH9_EHCI1 provides 6 USB2.0 ports. ++ * Ignore these since we will add the EHCI1 too. */ ++ return 0; ++ ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI: ++ return 3; ++ ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI: ++ if (cont->opts.usbopts.ports != -1) ++ return cont->opts.usbopts.ports; ++ return 4; ++ ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE: ++ case VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST: ++ break; ++ } ++ return 0; ++} ++ ++ ++static virDomainUSBAddressHubPtr ++virDomainUSBAddressHubNew(size_t nports) ++{ ++ virDomainUSBAddressHubPtr hub = NULL, ret = NULL; ++ ++ if (VIR_ALLOC(hub) < 0) ++ goto cleanup; ++ ++ if (!(hub->portmap = virBitmapNew(nports))) ++ goto cleanup; ++ ++ if (VIR_ALLOC_N(hub->ports, nports) < 0) ++ goto cleanup; ++ hub->nports = nports; ++ ++ ret = hub; ++ hub = NULL; ++ cleanup: ++ virDomainUSBAddressHubFree(hub); ++ return ret; ++} ++ ++ ++static int ++virDomainUSBAddressSetAddController(virDomainUSBAddressSetPtr addrs, ++ virDomainControllerDefPtr cont) ++{ ++ size_t nports = virDomainUSBAddressControllerModelToPorts(cont); ++ virDomainUSBAddressHubPtr hub = NULL; ++ int ret = -1; ++ ++ VIR_DEBUG("Adding a USB controller model=%s with %zu ports", ++ virDomainControllerModelUSBTypeToString(cont->model), ++ nports); ++ ++ /* Skip UHCI{1,2,3} companions; only add the EHCI1 */ ++ if (nports == 0) ++ return 0; ++ ++ if (addrs->nbuses <= cont->idx) { ++ if (VIR_EXPAND_N(addrs->buses, addrs->nbuses, cont->idx - addrs->nbuses + 1) < 0) ++ goto cleanup; ++ } else if (addrs->buses[cont->idx]) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("Duplicate USB controllers with index %u"), ++ cont->idx); ++ goto cleanup; ++ } ++ ++ if (!(hub = virDomainUSBAddressHubNew(nports))) ++ goto cleanup; ++ ++ addrs->buses[cont->idx] = hub; ++ hub = NULL; ++ ++ ret = 0; ++ cleanup: ++ virDomainUSBAddressHubFree(hub); ++ return ret; ++} ++ ++ ++int ++virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, ++ virDomainDefPtr def) ++{ ++ size_t i; ++ ++ for (i = 0; i < def->ncontrollers; i++) { ++ virDomainControllerDefPtr cont = def->controllers[i]; ++ if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB) { ++ if (virDomainUSBAddressSetAddController(addrs, cont) < 0) ++ return -1; ++ } ++ } ++ return 0; ++} +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index 168d3ed..2bd4a0d 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -269,6 +269,10 @@ typedef struct _virDomainUSBAddressSet virDomainUSBAddressSet; + typedef virDomainUSBAddressSet *virDomainUSBAddressSetPtr; + + virDomainUSBAddressSetPtr virDomainUSBAddressSetCreate(void); ++ ++int virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, ++ virDomainDefPtr def) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + void virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs); + + #endif /* __DOMAIN_ADDR_H__ */ +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 49f8d6c..f0fed8e 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -110,6 +110,7 @@ virDomainPCIControllerModelToConnectType; + virDomainUSBAddressPortFormat; + virDomainUSBAddressPortFormatBuf; + virDomainUSBAddressPortIsValid; ++virDomainUSBAddressSetAddControllers; + virDomainUSBAddressSetCreate; + virDomainUSBAddressSetFree; + virDomainVirtioSerialAddrAssign; +-- +2.9.2 + diff --git a/SOURCES/libvirt-Add-functions-for-adding-USB-hubs-to-addrs.patch b/SOURCES/libvirt-Add-functions-for-adding-USB-hubs-to-addrs.patch new file mode 100644 index 0000000..8b163fa --- /dev/null +++ b/SOURCES/libvirt-Add-functions-for-adding-USB-hubs-to-addrs.patch @@ -0,0 +1,157 @@ +From 9798935b4b81d153f59116707e7708e7a8988b05 Mon Sep 17 00:00:00 2001 +Message-Id: <9798935b4b81d153f59116707e7708e7a8988b05@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:52 +0200 +Subject: [PATCH] Add functions for adding USB hubs to addrs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Walk through all the usb hubs in the domain definition +that have a USB address specified, create the +corresponding structures in the virDomainUSBAddressSet +and mark the port it occupies as used. + +(cherry picked from commit 2f0813515e8a573a74c37850c4a90924cecebb90) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/domain_addr.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 115 insertions(+) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index ea37a42..ad20fef 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1432,6 +1432,109 @@ virDomainUSBAddressSetAddController(virDomainUSBAddressSetPtr addrs, + } + + ++static ssize_t ++virDomainUSBAddressGetLastIdx(virDomainDeviceInfoPtr info) ++{ ++ ssize_t i; ++ for (i = VIR_DOMAIN_DEVICE_USB_MAX_PORT_DEPTH - 1; i > 0; i--) { ++ if (info->addr.usb.port[i] != 0) ++ break; ++ } ++ return i; ++} ++ ++ ++/* Find the USBAddressHub structure representing the hub/controller ++ * that corresponds to the bus/port path specified by info. ++ * Returns the index of the requested port in targetIdx. ++ */ ++static virDomainUSBAddressHubPtr ++virDomainUSBAddressFindPort(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info, ++ int *targetIdx, ++ const char *portStr) ++{ ++ virDomainUSBAddressHubPtr hub = NULL; ++ ssize_t i, lastIdx; ++ ++ if (info->addr.usb.bus >= addrs->nbuses || ++ !addrs->buses[info->addr.usb.bus]) { ++ virReportError(VIR_ERR_XML_ERROR, _("Missing USB bus %u"), ++ info->addr.usb.bus); ++ return NULL; ++ } ++ hub = addrs->buses[info->addr.usb.bus]; ++ ++ lastIdx = virDomainUSBAddressGetLastIdx(info); ++ ++ for (i = 0; i < lastIdx; i++) { ++ /* ports are numbered from 1 */ ++ int portIdx = info->addr.usb.port[i] - 1; ++ ++ if (hub->nports <= portIdx) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("port %u out of range in USB address bus: %u port: %s"), ++ info->addr.usb.port[i], ++ info->addr.usb.bus, ++ portStr); ++ return NULL; ++ } ++ hub = hub->ports[portIdx]; ++ } ++ ++ *targetIdx = info->addr.usb.port[lastIdx] - 1; ++ return hub; ++} ++ ++ ++#define VIR_DOMAIN_USB_HUB_PORTS 8 ++ ++static int ++virDomainUSBAddressSetAddHub(virDomainUSBAddressSetPtr addrs, ++ virDomainHubDefPtr hub) ++{ ++ virDomainUSBAddressHubPtr targetHub = NULL, newHub = NULL; ++ int ret = -1; ++ int targetPort; ++ char *portStr = NULL; ++ ++ if (hub->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("Wrong address type for USB hub")); ++ goto cleanup; ++ } ++ ++ if (!(portStr = virDomainUSBAddressPortFormat(hub->info.addr.usb.port))) ++ goto cleanup; ++ ++ VIR_DEBUG("Adding a USB hub with 8 ports on bus=%u port=%s", ++ hub->info.addr.usb.bus, portStr); ++ ++ if (!(newHub = virDomainUSBAddressHubNew(VIR_DOMAIN_USB_HUB_PORTS))) ++ goto cleanup; ++ ++ if (!(targetHub = virDomainUSBAddressFindPort(addrs, &(hub->info), &targetPort, ++ portStr))) ++ goto cleanup; ++ ++ if (targetHub->ports[targetPort]) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("Duplicate USB hub on bus %u port %s"), ++ hub->info.addr.usb.bus, portStr); ++ goto cleanup; ++ } ++ ignore_value(virBitmapSetBit(targetHub->portmap, targetPort)); ++ targetHub->ports[targetPort] = newHub; ++ newHub = NULL; ++ ++ ret = 0; ++ cleanup: ++ virDomainUSBAddressHubFree(newHub); ++ VIR_FREE(portStr); ++ return ret; ++} ++ ++ + int + virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, + virDomainDefPtr def) +@@ -1445,5 +1548,17 @@ virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, + return -1; + } + } ++ ++ for (i = 0; i < def->nhubs; i++) { ++ virDomainHubDefPtr hub = def->hubs[i]; ++ if (hub->type == VIR_DOMAIN_HUB_TYPE_USB && ++ hub->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB && ++ virDomainUSBAddressPortIsValid(hub->info.addr.usb.port)) { ++ /* USB hubs that do not yet have an USB address have to be ++ * dealt with later */ ++ if (virDomainUSBAddressSetAddHub(addrs, hub) < 0) ++ return -1; ++ } ++ } + return 0; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-Add-helper-for-removing-transient-definition.patch b/SOURCES/libvirt-Add-helper-for-removing-transient-definition.patch new file mode 100644 index 0000000..4a24b0b --- /dev/null +++ b/SOURCES/libvirt-Add-helper-for-removing-transient-definition.patch @@ -0,0 +1,195 @@ +From 3cd00003acb680159d7825c6ff1745319a6f5f1a Mon Sep 17 00:00:00 2001 +Message-Id: <3cd00003acb680159d7825c6ff1745319a6f5f1a@dist-git> +From: Jiri Denemark +Date: Thu, 8 Sep 2016 15:16:58 +0200 +Subject: [PATCH] Add helper for removing transient definition + +The code for replacing domain's transient definition with the persistent +one is repeated in several places and we'll need to add one more. Let's +make a nice helper for it. + +Signed-off-by: Jiri Denemark +(cherry picked from commit 97a87333a0ac8b6b33bf4c45a7b1a526caa554cb) + +https://bugzilla.redhat.com/show_bug.cgi?id=1368774 + +Conflicts: + src/libxl/libxl_domain.c -- context + +Signed-off-by: Jiri Denemark +--- + src/conf/domain_conf.c | 19 +++++++++++++++++++ + src/conf/domain_conf.h | 1 + + src/libvirt_private.syms | 1 + + src/libxl/libxl_domain.c | 8 +------- + src/lxc/lxc_process.c | 7 +------ + src/qemu/qemu_process.c | 7 +------ + src/test/test_driver.c | 9 ++------- + src/uml/uml_driver.c | 14 ++------------ + 8 files changed, 28 insertions(+), 38 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 67c7971..edf5de2 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -2958,6 +2958,25 @@ virDomainObjSetDefTransient(virCapsPtr caps, + return ret; + } + ++ ++/* ++ * Remove the running configuration and replace it with the persistent one. ++ * ++ * @param domain domain object pointer ++ */ ++void ++virDomainObjRemoveTransientDef(virDomainObjPtr domain) ++{ ++ if (!domain->newDef) ++ return; ++ ++ virDomainDefFree(domain->def); ++ domain->def = domain->newDef; ++ domain->def->id = -1; ++ domain->newDef = NULL; ++} ++ ++ + /* + * Return the persistent domain configuration. If domain is transient, + * return the running config. +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 61ca8bd..305ae96 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2573,6 +2573,7 @@ void virDomainObjAssignDef(virDomainObjPtr domain, + int virDomainObjSetDefTransient(virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, + virDomainObjPtr domain); ++void virDomainObjRemoveTransientDef(virDomainObjPtr domain); + virDomainDefPtr + virDomainObjGetPersistentDef(virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 7535064..92475a2 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -422,6 +422,7 @@ virDomainObjGetShortName; + virDomainObjGetState; + virDomainObjNew; + virDomainObjParseNode; ++virDomainObjRemoveTransientDef; + virDomainObjSetDefTransient; + virDomainObjSetMetadata; + virDomainObjSetState; +diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c +index 0e26b91..ca37a33 100644 +--- a/src/libxl/libxl_domain.c ++++ b/src/libxl/libxl_domain.c +@@ -788,13 +788,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver, + VIR_FREE(file); + } + +- if (vm->newDef) { +- virDomainDefFree(vm->def); +- vm->def = vm->newDef; +- vm->def->id = -1; +- vm->newDef = NULL; +- } +- ++ virDomainObjRemoveTransientDef(vm); + virObjectUnref(cfg); + } + +diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c +index 07eb22a..5d124ff 100644 +--- a/src/lxc/lxc_process.c ++++ b/src/lxc/lxc_process.c +@@ -246,12 +246,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, + VIR_FREE(xml); + } + +- if (vm->newDef) { +- virDomainDefFree(vm->def); +- vm->def = vm->newDef; +- vm->def->id = -1; +- vm->newDef = NULL; +- } ++ virDomainObjRemoveTransientDef(vm); + virObjectUnref(cfg); + } + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 0777c0c..e13db38 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -5999,12 +5999,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, + VIR_FREE(xml); + } + +- if (vm->newDef) { +- virDomainDefFree(vm->def); +- vm->def = vm->newDef; +- vm->def->id = -1; +- vm->newDef = NULL; +- } ++ virDomainObjRemoveTransientDef(vm); + + endjob: + if (asyncJob != QEMU_ASYNC_JOB_NONE) +diff --git a/src/test/test_driver.c b/src/test/test_driver.c +index 36bbd7f..5ec27c3 100644 +--- a/src/test/test_driver.c ++++ b/src/test/test_driver.c +@@ -577,14 +577,9 @@ testDomainShutdownState(virDomainPtr domain, + virDomainObjPtr privdom, + virDomainShutoffReason reason) + { +- if (privdom->newDef) { +- virDomainDefFree(privdom->def); +- privdom->def = privdom->newDef; +- privdom->newDef = NULL; +- } +- ++ virDomainObjRemoveTransientDef(privdom); + virDomainObjSetState(privdom, VIR_DOMAIN_SHUTOFF, reason); +- privdom->def->id = -1; ++ + if (domain) + domain->id = -1; + } +diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c +index b978453..4f25f76 100644 +--- a/src/uml/uml_driver.c ++++ b/src/uml/uml_driver.c +@@ -1135,12 +1135,7 @@ static int umlStartVMDaemon(virConnectPtr conn, + if (ret < 0) { + virDomainConfVMNWFilterTeardown(vm); + umlCleanupTapDevices(vm); +- if (vm->newDef) { +- virDomainDefFree(vm->def); +- vm->def = vm->newDef; +- vm->def->id = -1; +- vm->newDef = NULL; +- } ++ virDomainObjRemoveTransientDef(vm); + } + + /* NB we don't mark it running here - we do that async +@@ -1182,12 +1177,7 @@ static void umlShutdownVMDaemon(struct uml_driver *driver, + /* Stop autodestroy in case guest is restarted */ + umlProcessAutoDestroyRemove(driver, vm); + +- if (vm->newDef) { +- virDomainDefFree(vm->def); +- vm->def = vm->newDef; +- vm->def->id = -1; +- vm->newDef = NULL; +- } ++ virDomainObjRemoveTransientDef(vm); + + driver->nactive--; + if (!driver->nactive && driver->inhibitCallback) +-- +2.10.0 + diff --git a/SOURCES/libvirt-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch b/SOURCES/libvirt-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch deleted file mode 100644 index dad40a6..0000000 --- a/SOURCES/libvirt-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 6d44afeba685e5c38fb81d256b0625b758f8f19e Mon Sep 17 00:00:00 2001 -Message-Id: <6d44afeba685e5c38fb81d256b0625b758f8f19e@dist-git> -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -Date: Wed, 8 Jul 2015 15:56:48 +0200 -Subject: [PATCH] Add rhel machine types to qemuDomainMachineNeedsFDC - -RHEL-only. - -https://bugzilla.redhat.com/show_bug.cgi?id=1227880 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 6590cf0..e3793bd 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3257,6 +3257,9 @@ qemuDomainMachineNeedsFDC(const virDomainDef *def) - STRPREFIX(p, "2.2") || - STRPREFIX(p, "2.3")) - return false; -+ if (STRPREFIX(p, "rhel-7.0.0") || -+ STRPREFIX(p, "rhel-7.1.0")) -+ return false; - return true; - } - return false; --- -2.4.5 - diff --git a/SOURCES/libvirt-Add-tests-for-USB-address-assignment.patch b/SOURCES/libvirt-Add-tests-for-USB-address-assignment.patch new file mode 100644 index 0000000..ebaef1b --- /dev/null +++ b/SOURCES/libvirt-Add-tests-for-USB-address-assignment.patch @@ -0,0 +1,288 @@ +From c468652ff43b6aa83d8549a9b581da9ecee7563c Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:54 +0200 +Subject: [PATCH] Add tests for USB address assignment +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Introduce tests with the ich9, xhci and the default (piix3) usb +controller to demonstrate the effect of the next patch. + +(cherry picked from commit 69f5ce45abd587509d4b5df2428ead79737b6b77) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 + +Conflicts: + downstream does not assume QEMU_CAPS_SMP_TOPOLOGY in tests +--- + .../qemuxml2argv-usb-ich9-autoassign.args | 32 ++++++++++++++++++ + .../qemuxml2argv-usb-ich9-autoassign.xml | 39 ++++++++++++++++++++++ + .../qemuxml2argv-usb-port-autoassign.args | 28 ++++++++++++++++ + .../qemuxml2argv-usb-port-autoassign.xml | 27 +++++++++++++++ + .../qemuxml2argv-usb-xhci-autoassign.args | 27 +++++++++++++++ + .../qemuxml2argv-usb-xhci-autoassign.xml | 25 ++++++++++++++ + tests/qemuxml2argvtest.c | 11 ++++++ + 7 files changed, 189 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.xml + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.xml + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.xml + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args +new file mode 100644 +index 0000000..faaff95 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args +@@ -0,0 +1,32 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefconfig \ ++-nodefaults \ ++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ ++server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=readline \ ++-no-acpi \ ++-boot c \ ++-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \ ++-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,\ ++addr=0x4 \ ++-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ ++-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ ++-device usb-hub,id=hub0 \ ++-device usb-hub,id=hub1 \ ++-device usb-mouse,id=input0 \ ++-device usb-mouse,id=input1 \ ++-device usb-mouse,id=input2 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.xml +new file mode 100644 +index 0000000..6425c50 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.xml +@@ -0,0 +1,39 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++
++ ++ ++ ++
++ ++ ++ ++
++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args +new file mode 100644 +index 0000000..aa80919 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args +@@ -0,0 +1,28 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefconfig \ ++-nodefaults \ ++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ ++server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=readline \ ++-no-acpi \ ++-boot c \ ++-usb \ ++-device usb-hub,id=hub0,bus=usb.0,port=1 \ ++-device usb-hub,id=hub1 \ ++-device usb-mouse,id=input0 \ ++-device usb-mouse,id=input1 \ ++-device usb-mouse,id=input2 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.xml +new file mode 100644 +index 0000000..a2fe34e +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.xml +@@ -0,0 +1,27 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args +new file mode 100644 +index 0000000..7c5e6a5 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args +@@ -0,0 +1,27 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefconfig \ ++-nodefaults \ ++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ ++server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=readline \ ++-no-acpi \ ++-boot c \ ++-device nec-usb-xhci,p2=8,p3=8,id=usb,bus=pci.0,addr=0x3 \ ++-device usb-hub,id=hub0 \ ++-device usb-hub,id=hub1 \ ++-device usb-mouse,id=input0 \ ++-device usb-mouse,id=input1 \ ++-device usb-mouse,id=input2 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.xml +new file mode 100644 +index 0000000..9c87b5f +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.xml +@@ -0,0 +1,25 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 9c18989..e434470 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1156,6 +1156,10 @@ mymain(void) + DO_TEST_PARSE_ERROR("usb-ich9-no-companion", + QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1); ++ DO_TEST("usb-ich9-autoassign", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, ++ QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1, ++ QEMU_CAPS_USB_HUB); + DO_TEST("usb-hub", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); +@@ -1168,6 +1172,9 @@ mymain(void) + DO_TEST("usb-ports", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); ++ DO_TEST("usb-port-autoassign", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, ++ QEMU_CAPS_NODEFCONFIG); + DO_TEST("usb-redir", + QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB, +@@ -1222,6 +1229,10 @@ mymain(void) + DO_TEST("usb-controller-xhci", + QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI, + QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS); ++ DO_TEST("usb-xhci-autoassign", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI, ++ QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS, ++ QEMU_CAPS_USB_HUB); + + DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE); + DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE); +-- +2.9.2 + diff --git a/SOURCES/libvirt-Allow-omitting-USB-port.patch b/SOURCES/libvirt-Allow-omitting-USB-port.patch new file mode 100644 index 0000000..1300041 --- /dev/null +++ b/SOURCES/libvirt-Allow-omitting-USB-port.patch @@ -0,0 +1,221 @@ +From 986f039eddce59d25fb4060e3f12d2960c6ba100 Mon Sep 17 00:00:00 2001 +Message-Id: <986f039eddce59d25fb4060e3f12d2960c6ba100@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:48 +0200 +Subject: [PATCH] Allow omitting USB port +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We were requiring a USB port path in the schema, but not enforcing it. +Omitting the USB port would lead to libvirt formatting it as (null). +Such domain cannot be started and will disappear after libvirtd restart +(since it cannot parse back the XML). + +Only format the port if it has been specified and mark it as optional +in the XML schema. + +(cherry picked from commit 4f903643186d0a59c4590fc8a6e8d9493c4d3d6b) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 + +Conflicts: + downstream does not assume QEMU_CAPS_SMP_TOPOLOGY +--- + docs/schemas/domaincommon.rng | 8 +++-- + src/conf/domain_conf.c | 5 ++- + src/qemu/qemu_command.c | 3 +- + .../qemuxml2argv-usb-port-missing.args | 26 ++++++++++++++++ + .../qemuxml2argv-usb-port-missing.xml | 25 +++++++++++++++ + tests/qemuxml2argvtest.c | 3 ++ + .../qemuxml2xmlout-usb-port-missing.xml | 36 ++++++++++++++++++++++ + tests/qemuxml2xmltest.c | 1 + + 8 files changed, 100 insertions(+), 7 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml + create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml + +diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index 563cb3c..0876daa 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -4055,9 +4055,11 @@ + + + +- +- +- ++ ++ ++ ++ ++ + + + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index e6dc23d..0bd8a30 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -4859,9 +4859,8 @@ virDomainDeviceInfoFormat(virBufferPtr buf, + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB: +- virBufferAsprintf(buf, " bus='%d' port='%s'", +- info->addr.usb.bus, +- info->addr.usb.port); ++ virBufferAsprintf(buf, " bus='%d'", info->addr.usb.bus); ++ virBufferEscapeString(buf, " port='%s'", info->addr.usb.port); + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 49412c0..af6146f 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -375,7 +375,8 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, + VIR_DOMAIN_CONTROLLER_TYPE_USB, + info->addr.usb.bus))) + goto cleanup; +- virBufferAsprintf(buf, ",bus=%s.0,port=%s", contAlias, info->addr.usb.port); ++ virBufferAsprintf(buf, ",bus=%s.0", contAlias); ++ virBufferEscapeString(buf, ",port=%s", info->addr.usb.port); + } else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) { + if (info->addr.spaprvio.has_reg) + virBufferAsprintf(buf, ",reg=0x%llx", info->addr.spaprvio.reg); +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args +new file mode 100644 +index 0000000..d43c58d +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args +@@ -0,0 +1,26 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefconfig \ ++-nodefaults \ ++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ ++server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=readline \ ++-no-acpi \ ++-boot c \ ++-usb \ ++-device usb-hub,id=hub0,bus=usb.0 \ ++-device usb-hub,id=hub1,bus=usb.0 \ ++-device usb-mouse,id=input0,bus=usb.0 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml +new file mode 100644 +index 0000000..593fcd1 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml +@@ -0,0 +1,25 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++
++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index a73db5e..4389e24 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1159,6 +1159,9 @@ mymain(void) + DO_TEST("usb-hub", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); ++ DO_TEST("usb-port-missing", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, ++ QEMU_CAPS_NODEFCONFIG); + DO_TEST("usb-ports", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml +new file mode 100644 +index 0000000..2e29cbd +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml +@@ -0,0 +1,36 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++
++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++
++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index 7db9cb7..c6ef28c 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -535,6 +535,7 @@ mymain(void) + DO_TEST("interface-server"); + DO_TEST("virtio-lun"); + ++ DO_TEST("usb-port-missing"); + DO_TEST("usb-redir"); + DO_TEST("usb-redir-filter"); + DO_TEST("usb-redir-filter-version"); +-- +2.9.2 + diff --git a/SOURCES/libvirt-Allow-vfio-hotplug-of-a-device-to-the-domain-which-owns-the-iommu.patch b/SOURCES/libvirt-Allow-vfio-hotplug-of-a-device-to-the-domain-which-owns-the-iommu.patch deleted file mode 100644 index 1b9fc7d..0000000 --- a/SOURCES/libvirt-Allow-vfio-hotplug-of-a-device-to-the-domain-which-owns-the-iommu.patch +++ /dev/null @@ -1,138 +0,0 @@ -From ceeaf62ea52df6cfacac8c1653ff9f7585ef0392 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Shivaprasad G Bhat -Date: Wed, 2 Sep 2015 15:55:23 -0400 -Subject: [PATCH] Allow vfio hotplug of a device to the domain which owns the - iommu - -The commit 7e72de4 didn't consider the hotplug scenarios. The patch addresses -the hotplug case whereby if atleast one of the pci function is owned by a -guest, the hotplug of other functions/devices in the same iommu group to the -same guest goes through successfully. - -Prerequisite for the fix for: - - https://bugzilla.redhat.com/show_bug.cgi?id=1256486 - -Signed-off-by: Shivaprasad G Bhat -(cherry picked from commit e3810db34f1acb74dfcfd69219930e23a30284f6) -Signed-off-by: Jiri Denemark ---- - src/util/virhostdev.c | 34 +++++++++++++++++++++++++++------- - 1 file changed, 27 insertions(+), 7 deletions(-) - -diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c -index 809caed..529753c 100644 ---- a/src/util/virhostdev.c -+++ b/src/util/virhostdev.c -@@ -54,23 +54,35 @@ static virClassPtr virHostdevManagerClass; - static void virHostdevManagerDispose(void *obj); - static virHostdevManagerPtr virHostdevManagerNew(void); - -+struct virHostdevIsPCINodeDeviceUsedData { -+ virHostdevManagerPtr hostdev_mgr; -+ const char *domainName; -+ const bool usesVfio; -+}; -+ - static int virHostdevIsPCINodeDeviceUsed(virPCIDeviceAddressPtr devAddr, void *opaque) - { - virPCIDevicePtr other; - int ret = -1; - virPCIDevicePtr pci = NULL; -- virHostdevManagerPtr hostdev_mgr = opaque; -+ struct virHostdevIsPCINodeDeviceUsedData *helperData = opaque; - - if (!(pci = virPCIDeviceNew(devAddr->domain, devAddr->bus, - devAddr->slot, devAddr->function))) - goto cleanup; - -- other = virPCIDeviceListFind(hostdev_mgr->activePCIHostdevs, pci); -+ other = virPCIDeviceListFind(helperData->hostdev_mgr->activePCIHostdevs, -+ pci); - if (other) { - const char *other_drvname = NULL; - const char *other_domname = NULL; - virPCIDeviceGetUsedBy(other, &other_drvname, &other_domname); - -+ if (helperData->usesVfio && -+ (other_domname && helperData->domainName) && -+ (STREQ(other_domname, helperData->domainName))) -+ goto iommu_owner; -+ - if (other_drvname && other_domname) - virReportError(VIR_ERR_OPERATION_INVALID, - _("PCI device %s is in use by " -@@ -83,6 +95,7 @@ static int virHostdevIsPCINodeDeviceUsed(virPCIDeviceAddressPtr devAddr, void *o - virPCIDeviceGetName(pci)); - goto cleanup; - } -+ iommu_owner: - ret = 0; - cleanup: - virPCIDeviceFree(pci); -@@ -562,6 +575,9 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr, - for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { - virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i); - bool strict_acs_check = !!(flags & VIR_HOSTDEV_STRICT_ACS_CHECK); -+ bool usesVfio = STREQ(virPCIDeviceGetStubDriver(dev), "vfio-pci"); -+ struct virHostdevIsPCINodeDeviceUsedData data = {hostdev_mgr, dom_name, -+ usesVfio}; - - if (!virPCIDeviceIsAssignable(dev, strict_acs_check)) { - virReportError(VIR_ERR_OPERATION_INVALID, -@@ -579,12 +595,12 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr, - * belonging to same iommu group can't be shared - * across guests. - */ -- if (STREQ(virPCIDeviceGetStubDriver(dev), "vfio-pci")) { -+ if (usesVfio) { - if (virPCIDeviceAddressIOMMUGroupIterate(devAddr, - virHostdevIsPCINodeDeviceUsed, -- hostdev_mgr) < 0) -+ &data) < 0) - goto cleanup; -- } else if (virHostdevIsPCINodeDeviceUsed(devAddr, hostdev_mgr)) { -+ } else if (virHostdevIsPCINodeDeviceUsed(devAddr, &data)) { - goto cleanup; - } - } -@@ -1544,6 +1560,8 @@ virHostdevPCINodeDeviceDetach(virHostdevManagerPtr hostdev_mgr, - virPCIDevicePtr pci) - { - virPCIDeviceAddressPtr devAddr = NULL; -+ struct virHostdevIsPCINodeDeviceUsedData data = { hostdev_mgr, NULL, -+ false }; - int ret = -1; - - virObjectLock(hostdev_mgr->activePCIHostdevs); -@@ -1552,7 +1570,7 @@ virHostdevPCINodeDeviceDetach(virHostdevManagerPtr hostdev_mgr, - if (!(devAddr = virPCIDeviceGetAddress(pci))) - goto out; - -- if (virHostdevIsPCINodeDeviceUsed(devAddr, hostdev_mgr)) -+ if (virHostdevIsPCINodeDeviceUsed(devAddr, &data)) - goto out; - - if (virPCIDeviceDetach(pci, hostdev_mgr->activePCIHostdevs, -@@ -1573,6 +1591,8 @@ virHostdevPCINodeDeviceReAttach(virHostdevManagerPtr hostdev_mgr, - virPCIDevicePtr pci) - { - virPCIDeviceAddressPtr devAddr = NULL; -+ struct virHostdevIsPCINodeDeviceUsedData data = {hostdev_mgr, NULL, -+ false}; - int ret = -1; - - virObjectLock(hostdev_mgr->activePCIHostdevs); -@@ -1581,7 +1601,7 @@ virHostdevPCINodeDeviceReAttach(virHostdevManagerPtr hostdev_mgr, - if (!(devAddr = virPCIDeviceGetAddress(pci))) - goto out; - -- if (virHostdevIsPCINodeDeviceUsed(devAddr, hostdev_mgr)) -+ if (virHostdevIsPCINodeDeviceUsed(devAddr, &data)) - goto out; - - virPCIDeviceReattachInit(pci); --- -2.5.1 - diff --git a/SOURCES/libvirt-Assign-addresses-on-USB-device-hotplug.patch b/SOURCES/libvirt-Assign-addresses-on-USB-device-hotplug.patch new file mode 100644 index 0000000..a4bcc75 --- /dev/null +++ b/SOURCES/libvirt-Assign-addresses-on-USB-device-hotplug.patch @@ -0,0 +1,203 @@ +From 758b25f47af79cd6da43a4bc13599b0bb64afef1 Mon Sep 17 00:00:00 2001 +Message-Id: <758b25f47af79cd6da43a4bc13599b0bb64afef1@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:56 +0200 +Subject: [PATCH] Assign addresses on USB device hotplug +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +USB disks, redirected devices, host devices and serial devices +are supported. + +(cherry picked from commit f2a781ceb075073a6033b96649f41501148d3c0c) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/domain_addr.c | 30 ++++++++++++++++++++++ + src/conf/domain_addr.h | 5 ++++ + src/libvirt_private.syms | 1 + + src/qemu/qemu_domain_address.c | 5 ++++ + src/qemu/qemu_hotplug.c | 27 +++++++++++++++++++ + .../qemuhotplug-hotplug-base-live+disk-usb.xml | 1 + + 6 files changed, 69 insertions(+) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 3b0c205..365ee40 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1735,3 +1735,33 @@ virDomainUSBAddressEnsure(virDomainUSBAddressSetPtr addrs, + + return 0; + } ++ ++ ++int ++virDomainUSBAddressRelease(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info) ++{ ++ virDomainUSBAddressHubPtr targetHub = NULL; ++ char *portStr = NULL; ++ int targetPort; ++ int ret = -1; ++ ++ if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB || ++ !virDomainUSBAddressPortIsValid(info->addr.usb.port)) ++ return 0; ++ ++ portStr = virDomainUSBAddressPortFormat(info->addr.usb.port); ++ VIR_DEBUG("Releasing USB addr bus=%u port=%s", info->addr.usb.bus, portStr); ++ ++ if (!(targetHub = virDomainUSBAddressFindPort(addrs, info, &targetPort, ++ portStr))) ++ goto cleanup; ++ ++ ignore_value(virBitmapClearBit(targetHub->portmap, targetPort)); ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(portStr); ++ return ret; ++} +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index 633aa16..cc36aed 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -293,4 +293,9 @@ int + virDomainUSBAddressEnsure(virDomainUSBAddressSetPtr addrs, + virDomainDeviceInfoPtr info) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++ ++int ++virDomainUSBAddressRelease(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + #endif /* __DOMAIN_ADDR_H__ */ +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 4727d39..e23bfe3 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -112,6 +112,7 @@ virDomainUSBAddressEnsure; + virDomainUSBAddressPortFormat; + virDomainUSBAddressPortFormatBuf; + virDomainUSBAddressPortIsValid; ++virDomainUSBAddressRelease; + virDomainUSBAddressReserve; + virDomainUSBAddressSetAddControllers; + virDomainUSBAddressSetAddHub; +diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c +index 21c2ecf..7499026 100644 +--- a/src/qemu/qemu_domain_address.c ++++ b/src/qemu/qemu_domain_address.c +@@ -1772,4 +1772,9 @@ qemuDomainReleaseDeviceAddress(virDomainObjPtr vm, + virDomainVirtioSerialAddrRelease(priv->vioserialaddrs, info) < 0) + VIR_WARN("Unable to release virtio-serial address on %s", + NULLSTR(devstr)); ++ if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB && ++ priv->usbaddrs && ++ virDomainUSBAddressRelease(priv->usbaddrs, info) < 0) ++ VIR_WARN("Unable to release USB address on %s", ++ NULLSTR(devstr)); + } +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index cba0e8c..36885a3 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -640,6 +640,13 @@ qemuDomainAttachUSBMassStorageDevice(virQEMUDriverPtr driver, + char *devstr = NULL; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + const char *src = virDomainDiskGetSource(disk); ++ bool releaseaddr = false; ++ ++ if (priv->usbaddrs) { ++ if (virDomainUSBAddressEnsure(priv->usbaddrs, &disk->info) < 0) ++ goto cleanup; ++ releaseaddr = true; ++ } + + if (qemuDomainPrepareDisk(driver, vm, disk, NULL, false) < 0) + goto cleanup; +@@ -685,6 +692,8 @@ qemuDomainAttachUSBMassStorageDevice(virQEMUDriverPtr driver, + virDomainDiskInsertPreAlloced(vm->def, disk); + + cleanup: ++ if (ret < 0 && releaseaddr) ++ virDomainUSBAddressRelease(priv->usbaddrs, &disk->info); + VIR_FREE(devstr); + VIR_FREE(drivestr); + virObjectUnref(cfg); +@@ -1486,6 +1495,12 @@ qemuDomainAttachChrDeviceAssignAddr(qemuDomainObjPrivatePtr priv, + return -1; + return 1; + ++ } else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL && ++ chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB) { ++ if (virDomainUSBAddressEnsure(priv->usbaddrs, &chr->info) < 0) ++ return -1; ++ return 1; ++ + } else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && + chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO) { + if (virDomainVirtioSerialAddrAutoAssign(NULL, priv->vioserialaddrs, +@@ -1804,11 +1819,18 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver, + { + qemuDomainObjPrivatePtr priv = vm->privateData; + char *devstr = NULL; ++ bool releaseaddr = false; + bool added = false; + bool teardowncgroup = false; + bool teardownlabel = false; + int ret = -1; + ++ if (priv->usbaddrs) { ++ if (virDomainUSBAddressEnsure(priv->usbaddrs, hostdev->info) < 0) ++ goto cleanup; ++ releaseaddr = true; ++ } ++ + if (qemuHostdevPrepareUSBDevices(driver, vm->def->name, &hostdev, 1, 0) < 0) + goto cleanup; + +@@ -1854,6 +1876,8 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver, + VIR_WARN("Unable to restore host device labelling on hotplug fail"); + if (added) + qemuHostdevReAttachUSBDevices(driver, vm->def->name, &hostdev, 1); ++ if (releaseaddr) ++ virDomainUSBAddressRelease(priv->usbaddrs, hostdev->info); + } + VIR_FREE(devstr); + return ret; +@@ -2851,6 +2875,8 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + dev.type = VIR_DOMAIN_DEVICE_DISK; + dev.data.disk = disk; + ignore_value(qemuRemoveSharedDevice(driver, &dev, vm->def->name)); ++ if (priv->usbaddrs) ++ virDomainUSBAddressRelease(priv->usbaddrs, &disk->info); + + virDomainDiskDefFree(disk); + return 0; +@@ -2947,6 +2973,7 @@ qemuDomainRemoveUSBHostDevice(virQEMUDriverPtr driver, + virDomainHostdevDefPtr hostdev) + { + qemuHostdevReAttachUSBDevices(driver, vm->def->name, &hostdev, 1); ++ qemuDomainReleaseDeviceAddress(vm, hostdev->info, NULL); + } + + static void +diff --git a/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base-live+disk-usb.xml b/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base-live+disk-usb.xml +index 41039a4..cd686e6 100644 +--- a/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base-live+disk-usb.xml ++++ b/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base-live+disk-usb.xml +@@ -27,6 +27,7 @@ + + + ++
+ + + +-- +2.9.2 + diff --git a/SOURCES/libvirt-Assign-addresses-to-USB-devices.patch b/SOURCES/libvirt-Assign-addresses-to-USB-devices.patch new file mode 100644 index 0000000..4597a79 --- /dev/null +++ b/SOURCES/libvirt-Assign-addresses-to-USB-devices.patch @@ -0,0 +1,707 @@ +From 2e6ca604192638d5182bb109fc83590c6d1028ae Mon Sep 17 00:00:00 2001 +Message-Id: <2e6ca604192638d5182bb109fc83590c6d1028ae@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:55 +0200 +Subject: [PATCH] Assign addresses to USB devices +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Automatically assign addresses to USB devices. + +Just like reserving, this is only done for newly defined domains. + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +(cherry picked from commit bf182078d96476c8d5557737c1107241f280a947) +Signed-off-by: Ján Tomko +--- + src/conf/domain_addr.c | 133 ++++++++++++++++++++- + src/conf/domain_addr.h | 14 +++ + src/libvirt_private.syms | 3 + + src/qemu/qemu_domain_address.c | 65 ++++++++++ + .../qemuxml2argvdata/qemuxml2argv-bios-nvram.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-bios.args | 2 +- + .../qemuxml2argv-controller-order.args | 8 +- + .../qemuxml2argv-disk-usb-device-removable.args | 3 +- + .../qemuxml2argv-disk-usb-device.args | 2 +- + .../qemuxml2argv-graphics-spice-timeout.args | 2 +- + .../qemuxml2argv-graphics-spice-usb-redir.args | 2 +- + ...muxml2argv-hostdev-usb-address-device-boot.args | 3 +- + .../qemuxml2argv-hostdev-usb-address-device.args | 2 +- + .../qemuxml2argv-hostdev-usb-address.args | 2 +- + .../qemuxml2argv-hugepages-numa.args | 6 +- + .../qemuxml2argv-input-usbmouse.args | 2 +- + .../qemuxml2argv-input-usbtablet.args | 2 +- + .../qemuxml2argv-pseries-usb-kbd.args | 2 +- + .../qemuxml2argv-serial-spiceport.args | 2 +- + .../qemuxml2argv-smartcard-controller.args | 2 +- + .../qemuxml2argv-smartcard-host-certificates.args | 2 +- + .../qemuxml2argv-smartcard-host.args | 2 +- + ...emuxml2argv-smartcard-passthrough-spicevmc.args | 2 +- + .../qemuxml2argv-smartcard-passthrough-tcp.args | 2 +- + .../qemuxml2argv-sound-device.args | 2 +- + .../qemuxml2argv-usb-ich9-autoassign.args | 10 +- + .../qemuxml2argv-usb-port-autoassign.args | 8 +- + .../qemuxml2argv-usb-port-missing.args | 4 +- + .../qemuxml2argv-usb-redir-boot.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args | 2 +- + .../qemuxml2argv-usb-xhci-autoassign.args | 10 +- + 31 files changed, 260 insertions(+), 45 deletions(-) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index bbac399..3b0c205 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1489,7 +1489,7 @@ virDomainUSBAddressFindPort(virDomainUSBAddressSetPtr addrs, + + #define VIR_DOMAIN_USB_HUB_PORTS 8 + +-static int ++int + virDomainUSBAddressSetAddHub(virDomainUSBAddressSetPtr addrs, + virDomainHubDefPtr hub) + { +@@ -1564,6 +1564,119 @@ virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, + } + + ++static int ++virDomainUSBAddressFindFreePort(virDomainUSBAddressHubPtr hub, ++ unsigned int *portpath, ++ unsigned int level) ++{ ++ unsigned int port; ++ ssize_t portIdx; ++ size_t i; ++ ++ /* Look for free ports on the current hub */ ++ if ((portIdx = virBitmapNextClearBit(hub->portmap, -1)) >= 0) { ++ port = portIdx + 1; ++ VIR_DEBUG("Found a free port %u at level %u", port, level); ++ portpath[level] = port; ++ return 0; ++ } ++ ++ VIR_DEBUG("No ports found on hub %p, trying the hubs on it", hub); ++ ++ if (level >= VIR_DOMAIN_DEVICE_USB_MAX_PORT_DEPTH - 1) ++ return -1; ++ ++ /* Recursively search through the ports that contain another hub */ ++ for (i = 0; i < hub->nports; i++) { ++ if (!hub->ports[i]) ++ continue; ++ ++ port = i + 1; ++ VIR_DEBUG("Looking at USB hub at level: %u port: %u", level, port); ++ if (virDomainUSBAddressFindFreePort(hub->ports[i], portpath, ++ level + 1) < 0) ++ continue; ++ ++ portpath[level] = port; ++ return 0; ++ } ++ return -1; ++} ++ ++ ++/* Try to find a free port on bus @bus. ++ * ++ * Returns 0 on success ++ * -1 on fatal error (OOM) ++ * -2 if there is no bus at @bus or no free port on this bus ++ */ ++static int ++virDomainUSBAddressAssignFromBus(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info, ++ size_t bus) ++{ ++ unsigned int portpath[VIR_DOMAIN_DEVICE_USB_MAX_PORT_DEPTH] = { 0 }; ++ virDomainUSBAddressHubPtr hub = addrs->buses[bus]; ++ char *portStr = NULL; ++ int ret = -1; ++ ++ if (!hub) ++ return -2; ++ ++ if (virDomainUSBAddressFindFreePort(hub, portpath, 0) < 0) ++ return -2; ++ ++ /* we found a free port */ ++ if (!(portStr = virDomainUSBAddressPortFormat(portpath))) ++ goto cleanup; ++ ++ info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB; ++ info->addr.usb.bus = bus; ++ memcpy(info->addr.usb.port, portpath, sizeof(portpath)); ++ VIR_DEBUG("Assigning USB addr bus=%u port=%s", ++ info->addr.usb.bus, portStr); ++ if (virDomainUSBAddressReserve(info, addrs) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ cleanup: ++ VIR_FREE(portStr); ++ return ret; ++} ++ ++ ++int ++virDomainUSBAddressAssign(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info) ++{ ++ size_t i; ++ int rc; ++ ++ if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) { ++ VIR_DEBUG("A USB port on bus %u was requested", info->addr.usb.bus); ++ if (!addrs->buses[info->addr.usb.bus]) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("USB bus %u requested but no controller " ++ "with that index is present"), info->addr.usb.bus); ++ return -1; ++ } ++ rc = virDomainUSBAddressAssignFromBus(addrs, info, info->addr.usb.bus); ++ if (rc >= -1) ++ return rc; ++ } else { ++ VIR_DEBUG("Looking for a free USB port on all the buses"); ++ for (i = 0; i < addrs->nbuses; i++) { ++ rc = virDomainUSBAddressAssignFromBus(addrs, info, i); ++ if (rc >= -1) ++ return rc; ++ } ++ } ++ ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("No free USB ports")); ++ return -1; ++} ++ ++ + int + virDomainUSBAddressReserve(virDomainDeviceInfoPtr info, + void *data) +@@ -1604,3 +1717,21 @@ virDomainUSBAddressReserve(virDomainDeviceInfoPtr info, + VIR_FREE(portStr); + return ret; + } ++ ++ ++int ++virDomainUSBAddressEnsure(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info) ++{ ++ if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE || ++ (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB && ++ !virDomainUSBAddressPortIsValid(info->addr.usb.port))) { ++ if (virDomainUSBAddressAssign(addrs, info) < 0) ++ return -1; ++ } else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) { ++ if (virDomainUSBAddressReserve(info, addrs) < 0) ++ return -1; ++ } ++ ++ return 0; ++} +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index a24d216..633aa16 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -273,10 +273,24 @@ virDomainUSBAddressSetPtr virDomainUSBAddressSetCreate(void); + int virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, + virDomainDefPtr def) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++int ++virDomainUSBAddressSetAddHub(virDomainUSBAddressSetPtr addrs, ++ virDomainHubDefPtr hub) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + void virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs); + + int + virDomainUSBAddressReserve(virDomainDeviceInfoPtr info, + void *data) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++ ++int ++virDomainUSBAddressAssign(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++ ++int ++virDomainUSBAddressEnsure(virDomainUSBAddressSetPtr addrs, ++ virDomainDeviceInfoPtr info) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + #endif /* __DOMAIN_ADDR_H__ */ +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index f66ccf5..4727d39 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -107,11 +107,14 @@ virDomainPCIAddressSetGrow; + virDomainPCIAddressSlotInUse; + virDomainPCIAddressValidate; + virDomainPCIControllerModelToConnectType; ++virDomainUSBAddressAssign; ++virDomainUSBAddressEnsure; + virDomainUSBAddressPortFormat; + virDomainUSBAddressPortFormatBuf; + virDomainUSBAddressPortIsValid; + virDomainUSBAddressReserve; + virDomainUSBAddressSetAddControllers; ++virDomainUSBAddressSetAddHub; + virDomainUSBAddressSetCreate; + virDomainUSBAddressSetFree; + virDomainVirtioSerialAddrAssign; +diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c +index f66b2f0..21c2ecf 100644 +--- a/src/qemu/qemu_domain_address.c ++++ b/src/qemu/qemu_domain_address.c +@@ -1622,6 +1622,63 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, + } + + ++struct qemuAssignUSBIteratorInfo { ++ virDomainUSBAddressSetPtr addrs; ++ size_t count; ++}; ++ ++ ++static int ++qemuDomainAssignUSBPortsIterator(virDomainDeviceInfoPtr info, ++ void *opaque) ++{ ++ struct qemuAssignUSBIteratorInfo *data = opaque; ++ ++ if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) ++ return 0; ++ ++ return virDomainUSBAddressAssign(data->addrs, info); ++} ++ ++ ++static int ++qemuDomainAssignUSBHubs(virDomainUSBAddressSetPtr addrs, ++ virDomainDefPtr def) ++{ ++ size_t i; ++ ++ for (i = 0; i < def->nhubs; i++) { ++ virDomainHubDefPtr hub = def->hubs[i]; ++ if (hub->type != VIR_DOMAIN_HUB_TYPE_USB) ++ continue; ++ ++ if (hub->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB && ++ virDomainUSBAddressPortIsValid(hub->info.addr.usb.port)) ++ continue; ++ if (virDomainUSBAddressAssign(addrs, &hub->info) < 0) ++ return -1; ++ ++ if (virDomainUSBAddressSetAddHub(addrs, hub) < 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++static int ++qemuDomainAssignUSBPorts(virDomainUSBAddressSetPtr addrs, ++ virDomainDefPtr def) ++{ ++ struct qemuAssignUSBIteratorInfo data = { .addrs = addrs }; ++ ++ return virDomainUSBDeviceDefForeach(def, ++ qemuDomainAssignUSBPortsIterator, ++ &data, ++ true); ++} ++ ++ + static int + qemuDomainAssignUSBAddresses(virDomainDefPtr def, + virDomainObjPtr obj) +@@ -1642,6 +1699,14 @@ qemuDomainAssignUSBAddresses(virDomainDefPtr def, + + VIR_DEBUG("Existing USB addresses have been reserved"); + ++ if (qemuDomainAssignUSBHubs(addrs, def) < 0) ++ goto cleanup; ++ ++ if (qemuDomainAssignUSBPorts(addrs, def) < 0) ++ goto cleanup; ++ ++ VIR_DEBUG("Finished assigning USB ports"); ++ + if (obj && obj->privateData) { + priv = obj->privateData; + priv->usbaddrs = addrs; +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args +index fe4e419..848a029 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args +@@ -21,5 +21,5 @@ QEMU_AUDIO_DRV=none \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ + -serial pty \ +--device usb-tablet,id=input0 \ ++-device usb-tablet,id=input0,bus=usb.0,port=1 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios.args b/tests/qemuxml2argvdata/qemuxml2argv-bios.args +index 012af85..604b871 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-bios.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bios.args +@@ -22,5 +22,5 @@ QEMU_AUDIO_DRV=none \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ + -serial pty \ +--device usb-tablet,id=input0 \ ++-device usb-tablet,id=input0,bus=usb.0,port=1 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args b/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args +index 70f3fdb..7b98beb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args +@@ -19,8 +19,8 @@ nowait \ + -boot order=cna,menu=off \ + -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ + -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 \ +--device usb-ccid,id=ccid0 \ +--device usb-hub,id=hub0 \ ++-device usb-ccid,id=ccid0,bus=usb.0,port=1.1 \ ++-device usb-hub,id=hub0,bus=usb.0,port=1 \ + -drive file=/tmp/fdr.img,format=raw,if=none,id=drive-virtio-disk0,cache=none,\ + aio=native \ + -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,\ +@@ -37,10 +37,10 @@ media=cdrom,id=drive-ide0-1-0,readonly=on \ + -chardev spicevmc,id=charchannel0,name=vdagent \ + -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,\ + id=channel0,name=com.redhat.spice.0 \ +--device usb-tablet,id=input0 \ ++-device usb-tablet,id=input0,bus=usb.0,port=1.2 \ + -spice port=5901,tls-port=5902,addr=0.0.0.0,x509-dir=/etc/pki/libvirt-spice \ + -vga cirrus \ + -device intel-hda,id=sound0,bus=pci.0,addr=0x4 \ + -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \ +--device usb-host,hostbus=14,hostaddr=6,id=hostdev0 \ ++-device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bus=usb.0,port=2 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args +index 63e2bb2..7cda592 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args +@@ -21,5 +21,6 @@ QEMU_AUDIO_DRV=none \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ + -drive file=/tmp/usbdisk.img,format=raw,if=none,id=drive-usb-disk0 \ +--device usb-storage,drive=drive-usb-disk0,id=usb-disk0,removable=on \ ++-device usb-storage,bus=usb.0,port=1,drive=drive-usb-disk0,id=usb-disk0,\ ++removable=on \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args +index 5d1ea98..03ef44f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args +@@ -21,5 +21,5 @@ QEMU_AUDIO_DRV=none \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ + -drive file=/tmp/usbdisk.img,format=raw,if=none,id=drive-usb-disk0 \ +--device usb-storage,drive=drive-usb-disk0,id=usb-disk0 \ ++-device usb-storage,bus=usb.0,port=1,drive=drive-usb-disk0,id=usb-disk0 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args +index c0be4ee..cead7d6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args +@@ -28,7 +28,7 @@ media=cdrom,id=drive-ide0-1-0,readonly=on \ + -device rtl8139,vlan=0,id=net0,mac=52:54:00:71:70:89,bus=pci.0,addr=0x7 \ + -net tap,fd=3,vlan=0,name=hostnet0 \ + -serial pty \ +--device usb-tablet,id=input0 \ ++-device usb-tablet,id=input0,bus=usb.0,port=1 \ + -spice port=5900,addr=127.0.0.1 \ + -vga std \ + -device AC97,id=sound0,bus=pci.0,addr=0x3 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args +index fa248b3..3f00da4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args +@@ -30,7 +30,7 @@ zlib-glz-wan-compression=auto,playback-compression=on,streaming-video=filter,\ + disable-copy-paste \ + -vga cirrus \ + -chardev socket,id=charredir0,host=localhost,port=4000 \ +--device usb-redir,chardev=charredir0,id=redir0 \ ++-device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=1 \ + -chardev spicevmc,id=charredir1,name=usbredir \ + -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args +index 8c00055..ddf90c0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args +@@ -19,5 +19,6 @@ QEMU_AUDIO_DRV=none \ + -usb \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ +--device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bootindex=1 \ ++-device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bootindex=1,bus=usb.0,\ ++port=1 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args +index b5e6834..7883c61 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args +@@ -20,5 +20,5 @@ QEMU_AUDIO_DRV=none \ + -usb \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ +--device usb-host,hostbus=14,hostaddr=6,id=hostdev0 \ ++-device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bus=usb.0,port=1 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args +index bb5d55a..d1c3e8f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args +@@ -19,4 +19,4 @@ QEMU_AUDIO_DRV=none \ + -usb \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ +--device usb-host,hostbus=14,hostaddr=6,id=hostdev0 ++-device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bus=usb.0,port=1 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args +index c5a9e53..5c356ef 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args +@@ -46,7 +46,7 @@ id=channel0,name=org.qemu.guest_agent.0 \ + -chardev spicevmc,id=charchannel1,name=vdagent \ + -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel1,\ + id=channel1,name=com.redhat.spice.0 \ +--device usb-tablet,id=input0 \ ++-device usb-tablet,id=input0,bus=usb.0,port=1 \ + -spice port=5901,tls-port=5902,addr=127.0.0.1,x509-dir=/etc/pki/libvirt-spice \ + -vga qxl \ + -global qxl-vga.ram_size=67108864 \ +@@ -54,7 +54,7 @@ id=channel1,name=com.redhat.spice.0 \ + -device intel-hda,id=sound0,bus=pci.0,addr=0x4 \ + -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \ + -chardev spicevmc,id=charredir0,name=usbredir \ +--device usb-redir,chardev=charredir0,id=redir0 \ ++-device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 \ + -chardev spicevmc,id=charredir1,name=usbredir \ +--device usb-redir,chardev=charredir1,id=redir1 \ ++-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args +index bd0e5c6..df96e6a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args +@@ -19,4 +19,4 @@ QEMU_AUDIO_DRV=none \ + -usb \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ +--device usb-mouse,id=input0 ++-device usb-mouse,id=input0,bus=usb.0,port=1 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args +index 294515f..faf21d5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args +@@ -19,4 +19,4 @@ QEMU_AUDIO_DRV=none \ + -usb \ + -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ +--device usb-tablet,id=input0 ++-device usb-tablet,id=input0,bus=usb.0,port=1 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args +index 25c16cb..5887616 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args +@@ -22,4 +22,4 @@ server,nowait \ + -device pci-ohci,id=usb,bus=pci,addr=0x1 \ + -chardev pty,id=charserial0 \ + -device spapr-vty,chardev=charserial0,reg=0x30000000 \ +--device usb-kbd,id=input0 ++-device usb-kbd,id=input0,bus=usb.0,port=1 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args +index 246e854..f05c3f2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args +@@ -23,7 +23,7 @@ server,nowait \ + -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ + -chardev spiceport,id=charserial0,name=org.qemu.console.serial.0 \ + -device isa-serial,chardev=charserial0,id=serial0 \ +--device usb-tablet,id=input0 \ ++-device usb-tablet,id=input0,bus=usb.0,port=1 \ + -spice port=5903,tls-port=5904,addr=127.0.0.1,x509-dir=/etc/pki/libvirt-spice \ + -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,bus=pci.0,\ + addr=0x2 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args +index d3135c2..beb2935 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args +@@ -19,7 +19,7 @@ server,nowait \ + -mon chardev=charmonitor,id=monitor,mode=readline \ + -no-acpi \ + -boot c \ +--device usb-ccid,id=ccid0 \ ++-device usb-ccid,id=ccid0,bus=usb.0,port=1 \ + -usb \ + -device ccid-card-emulated,backend=nss-emulated,id=smartcard0,bus=ccid0.0 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args +index 09ef26c..72cf24b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args +@@ -19,7 +19,7 @@ server,nowait \ + -mon chardev=charmonitor,id=monitor,mode=readline \ + -no-acpi \ + -boot c \ +--device usb-ccid,id=ccid0 \ ++-device usb-ccid,id=ccid0,bus=usb.0,port=1 \ + -usb \ + -device ccid-card-emulated,backend=certificates,cert1=cert1,cert2=cert2,\ + cert3=cert3,db=/etc/pki/nssdb,id=smartcard0,bus=ccid0.0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args +index d3135c2..beb2935 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args +@@ -19,7 +19,7 @@ server,nowait \ + -mon chardev=charmonitor,id=monitor,mode=readline \ + -no-acpi \ + -boot c \ +--device usb-ccid,id=ccid0 \ ++-device usb-ccid,id=ccid0,bus=usb.0,port=1 \ + -usb \ + -device ccid-card-emulated,backend=nss-emulated,id=smartcard0,bus=ccid0.0 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args +index b618507..cdca4c4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args +@@ -19,7 +19,7 @@ server,nowait \ + -mon chardev=charmonitor,id=monitor,mode=readline \ + -no-acpi \ + -boot c \ +--device usb-ccid,id=ccid0 \ ++-device usb-ccid,id=ccid0,bus=usb.0,port=1 \ + -usb \ + -chardev spicevmc,id=charsmartcard0,name=smartcard \ + -device ccid-card-passthru,chardev=charsmartcard0,id=smartcard0,bus=ccid0.0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args +index e0fcb49..0c526c8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args +@@ -19,7 +19,7 @@ server,nowait \ + -mon chardev=charmonitor,id=monitor,mode=readline \ + -no-acpi \ + -boot c \ +--device usb-ccid,id=ccid0 \ ++-device usb-ccid,id=ccid0,bus=usb.0,port=1 \ + -usb \ + -chardev socket,id=charsmartcard0,host=127.0.0.1,port=2001,server,nowait \ + -device ccid-card-passthru,chardev=charsmartcard0,id=smartcard0,bus=ccid0.0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args b/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args +index 8d846a0..b084f4e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args +@@ -34,5 +34,5 @@ QEMU_AUDIO_DRV=none \ + -device ich9-intel-hda,id=sound7,bus=pci.0,addr=0x8 \ + -device hda-micro,id=sound7-codec0,bus=sound7.0,cad=0 \ + -device hda-duplex,id=sound7-codec1,bus=sound7.0,cad=1 \ +--device usb-audio,id=sound8 \ ++-device usb-audio,id=sound8,bus=usb.0,port=1 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x9 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args +index faaff95..db95851 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args +@@ -24,9 +24,9 @@ server,nowait \ + addr=0x4 \ + -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ + -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ +--device usb-hub,id=hub0 \ +--device usb-hub,id=hub1 \ +--device usb-mouse,id=input0 \ +--device usb-mouse,id=input1 \ +--device usb-mouse,id=input2 \ ++-device usb-hub,id=hub0,bus=usb.0,port=1 \ ++-device usb-hub,id=hub1,bus=usb.0,port=2 \ ++-device usb-mouse,id=input0,bus=usb.0,port=3 \ ++-device usb-mouse,id=input1,bus=usb.0,port=4 \ ++-device usb-mouse,id=input2,bus=usb.0,port=5 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args +index aa80919..ac5cfdd 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args +@@ -21,8 +21,8 @@ server,nowait \ + -boot c \ + -usb \ + -device usb-hub,id=hub0,bus=usb.0,port=1 \ +--device usb-hub,id=hub1 \ +--device usb-mouse,id=input0 \ +--device usb-mouse,id=input1 \ +--device usb-mouse,id=input2 \ ++-device usb-hub,id=hub1,bus=usb.0,port=2 \ ++-device usb-mouse,id=input0,bus=usb.0,port=1.1 \ ++-device usb-mouse,id=input1,bus=usb.0,port=1.2 \ ++-device usb-mouse,id=input2,bus=usb.0,port=1.3 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args +index d43c58d..56c0750 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args +@@ -20,7 +20,7 @@ server,nowait \ + -no-acpi \ + -boot c \ + -usb \ +--device usb-hub,id=hub0,bus=usb.0 \ +--device usb-hub,id=hub1,bus=usb.0 \ ++-device usb-hub,id=hub0,bus=usb.0,port=1 \ ++-device usb-hub,id=hub1,bus=usb.0,port=2 \ + -device usb-mouse,id=input0,bus=usb.0 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args +index 53b9040..bc47963 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args +@@ -24,7 +24,7 @@ addr=0x4 \ + -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ + -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ + -chardev socket,id=charredir0,host=localhost,port=4000 \ +--device usb-redir,chardev=charredir0,id=redir0,bootindex=1 \ ++-device usb-redir,chardev=charredir0,id=redir0,bootindex=1,bus=usb.0,port=1 \ + -chardev spicevmc,id=charredir1,name=usbredir \ + -device usb-redir,chardev=charredir1,id=redir1,bootindex=2,bus=usb.0,port=4 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args +index 08e8f3e..0999c97 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args +@@ -25,7 +25,7 @@ addr=0x4 \ + -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ + -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ + -chardev socket,id=charredir0,host=localhost,port=4000 \ +--device usb-redir,chardev=charredir0,id=redir0 \ ++-device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=1 \ + -chardev spicevmc,id=charredir1,name=usbredir \ + -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \ + -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args +index 7c5e6a5..15a9d29 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args +@@ -20,8 +20,8 @@ server,nowait \ + -no-acpi \ + -boot c \ + -device nec-usb-xhci,p2=8,p3=8,id=usb,bus=pci.0,addr=0x3 \ +--device usb-hub,id=hub0 \ +--device usb-hub,id=hub1 \ +--device usb-mouse,id=input0 \ +--device usb-mouse,id=input1 \ +--device usb-mouse,id=input2 ++-device usb-hub,id=hub0,bus=usb.0,port=1 \ ++-device usb-hub,id=hub1,bus=usb.0,port=2 \ ++-device usb-mouse,id=input0,bus=usb.0,port=3 \ ++-device usb-mouse,id=input1,bus=usb.0,port=4 \ ++-device usb-mouse,id=input2,bus=usb.0,port=5 +-- +2.9.2 + diff --git a/SOURCES/libvirt-Auto-add-one-hub-if-there-are-too-many-USB-devices.patch b/SOURCES/libvirt-Auto-add-one-hub-if-there-are-too-many-USB-devices.patch new file mode 100644 index 0000000..18e9443 --- /dev/null +++ b/SOURCES/libvirt-Auto-add-one-hub-if-there-are-too-many-USB-devices.patch @@ -0,0 +1,238 @@ +From 6c058183513069522ab1b622f2e08eb1de440def Mon Sep 17 00:00:00 2001 +Message-Id: <6c058183513069522ab1b622f2e08eb1de440def@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:57 +0200 +Subject: [PATCH] Auto-add one hub if there are too many USB devices +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When parsing a command line with USB devices that have +no address specified, QEMU automatically adds a USB hub +if the device would fill up all the available USB ports. + +To help most of the users, add one hub if there are more +USB devices than available ports. For wilder configurations, +expect the user to provide us with more hubs and/or controllers. + +(cherry picked from commit 815d98ac0bb8a4b48a412e026cb6465309e4043c) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 + +Conflicts: + downstream does not assume QEMU_CAPS_SMP_TOPOLOGY in tests +--- + src/conf/domain_addr.c | 20 +++++++++ + src/conf/domain_addr.h | 2 + + src/libvirt_private.syms | 1 + + src/qemu/qemu_domain_address.c | 48 ++++++++++++++++++++++ + .../qemuxml2argv-usb-hub-autoadd.args | 28 +++++++++++++ + .../qemuxml2argv-usb-hub-autoadd.xml | 23 +++++++++++ + tests/qemuxml2argvtest.c | 3 ++ + 7 files changed, 125 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.xml + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 365ee40..c3469ee 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1604,6 +1604,26 @@ virDomainUSBAddressFindFreePort(virDomainUSBAddressHubPtr hub, + } + + ++size_t ++virDomainUSBAddressCountAllPorts(virDomainDefPtr def) ++{ ++ size_t i, ret = 0; ++ ++ for (i = 0; i < def->ncontrollers; i++) { ++ virDomainControllerDefPtr cont = def->controllers[i]; ++ if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB) ++ ret += virDomainUSBAddressControllerModelToPorts(cont); ++ } ++ ++ for (i = 0; i < def->nhubs; i++) { ++ virDomainHubDefPtr hub = def->hubs[i]; ++ if (hub->type == VIR_DOMAIN_HUB_TYPE_USB) ++ ret += VIR_DOMAIN_USB_HUB_PORTS; ++ } ++ return ret; ++} ++ ++ + /* Try to find a free port on bus @bus. + * + * Returns 0 on success +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index cc36aed..ce94981 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -277,6 +277,8 @@ int + virDomainUSBAddressSetAddHub(virDomainUSBAddressSetPtr addrs, + virDomainHubDefPtr hub) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++size_t ++virDomainUSBAddressCountAllPorts(virDomainDefPtr def); + void virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs); + + int +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index e23bfe3..8cd1ba3 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -108,6 +108,7 @@ virDomainPCIAddressSlotInUse; + virDomainPCIAddressValidate; + virDomainPCIControllerModelToConnectType; + virDomainUSBAddressAssign; ++virDomainUSBAddressCountAllPorts; + virDomainUSBAddressEnsure; + virDomainUSBAddressPortFormat; + virDomainUSBAddressPortFormatBuf; +diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c +index 7499026..787b357 100644 +--- a/src/qemu/qemu_domain_address.c ++++ b/src/qemu/qemu_domain_address.c +@@ -1680,6 +1680,51 @@ qemuDomainAssignUSBPorts(virDomainUSBAddressSetPtr addrs, + + + static int ++qemuDomainAssignUSBPortsCounter(virDomainDeviceInfoPtr info ATTRIBUTE_UNUSED, ++ void *opaque) ++{ ++ struct qemuAssignUSBIteratorInfo *data = opaque; ++ ++ data->count++; ++ return 0; ++} ++ ++ ++static int ++qemuDomainUSBAddressAddHubs(virDomainDefPtr def) ++{ ++ struct qemuAssignUSBIteratorInfo data = { .count = 0 }; ++ virDomainHubDefPtr hub = NULL; ++ size_t available_ports; ++ int ret = -1; ++ ++ available_ports = virDomainUSBAddressCountAllPorts(def); ++ ignore_value(virDomainUSBDeviceDefForeach(def, ++ qemuDomainAssignUSBPortsCounter, ++ &data, ++ false)); ++ VIR_DEBUG("Found %zu USB devices and %zu provided USB ports", ++ data.count, available_ports); ++ ++ /* Add one hub if there are more devices than ports ++ * otherwise it's up to the user to specify more hubs/controllers */ ++ if (data.count > available_ports) { ++ if (VIR_ALLOC(hub) < 0) ++ return -1; ++ hub->type = VIR_DOMAIN_HUB_TYPE_USB; ++ ++ if (VIR_APPEND_ELEMENT(def->hubs, def->nhubs, hub) < 0) ++ goto cleanup; ++ } ++ ++ ret = 0; ++ cleanup: ++ VIR_FREE(hub); ++ return ret; ++} ++ ++ ++static int + qemuDomainAssignUSBAddresses(virDomainDefPtr def, + virDomainObjPtr obj) + { +@@ -1690,6 +1735,9 @@ qemuDomainAssignUSBAddresses(virDomainDefPtr def, + if (!(addrs = virDomainUSBAddressSetCreate())) + goto cleanup; + ++ if (qemuDomainUSBAddressAddHubs(def) < 0) ++ goto cleanup; ++ + if (virDomainUSBAddressSetAddControllers(addrs, def) < 0) + goto cleanup; + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args +new file mode 100644 +index 0000000..12c9691 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args +@@ -0,0 +1,28 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefconfig \ ++-nodefaults \ ++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ ++server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=readline \ ++-no-acpi \ ++-boot c \ ++-usb \ ++-device usb-hub,id=hub0,bus=usb.0,port=1 \ ++-device usb-mouse,id=input0,bus=usb.0,port=2 \ ++-device usb-mouse,id=input1,bus=usb.0,port=1.1 \ ++-device usb-mouse,id=input2,bus=usb.0,port=1.2 \ ++-device usb-tablet,id=input3,bus=usb.0,port=1.3 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.xml +new file mode 100644 +index 0000000..43e0f1f +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.xml +@@ -0,0 +1,23 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index e434470..51bab61 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1163,6 +1163,9 @@ mymain(void) + DO_TEST("usb-hub", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); ++ DO_TEST("usb-hub-autoadd", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, ++ QEMU_CAPS_NODEFCONFIG); + DO_TEST_PARSE_ERROR("usb-hub-conflict", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); +-- +2.9.2 + diff --git a/SOURCES/libvirt-Explicitly-format-the-isa-fdc-controller-for-newer-q35-machines.patch b/SOURCES/libvirt-Explicitly-format-the-isa-fdc-controller-for-newer-q35-machines.patch deleted file mode 100644 index 0c0803f..0000000 --- a/SOURCES/libvirt-Explicitly-format-the-isa-fdc-controller-for-newer-q35-machines.patch +++ /dev/null @@ -1,304 +0,0 @@ -From c8aeb07255eb984a89be33ca3a0bafcebe088682 Mon Sep 17 00:00:00 2001 -Message-Id: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -Date: Wed, 8 Jul 2015 15:56:47 +0200 -Subject: [PATCH] Explicitly format the isa-fdc controller for newer q35 - machines -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Since QEMU commit ea96bc6 [1]: -i386: drop FDC in pc-q35-2.4+ if neither it nor floppy drives are wanted -the floppy controller is no longer implicit. - -Specify it explicitly on the command line if the machine type version -is 2.4 or later. - -Note that libvirt's floppy drives do not result in QEMU implying the -controller, because libvirt uses if=none instead of if=floppy. - -https://bugzilla.redhat.com/show_bug.cgi?id=1227880 - -[1] http://git.qemu.org/?p=qemu.git;a=commitdiff;h=ea96bc6 - -(cherry picked from commit 4edf01c92cf9004aac2a505a38d92d13050c24bc) -Signed-off-by: Ján Tomko -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 31 +++++++++++++---- - src/qemu/qemu_domain.c | 19 ++++++++++ - src/qemu/qemu_domain.h | 1 + - .../qemuxml2argv-boot-floppy-q35.args | 12 +++++++ - .../qemuxml2argv-boot-floppy-q35.xml | 40 ++++++++++++++++++++++ - .../qemuxml2argv-bootindex-floppy-q35.args | 11 ++++++ - .../qemuxml2argv-bootindex-floppy-q35.xml | 40 ++++++++++++++++++++++ - tests/qemuxml2argvtest.c | 9 +++++ - 8 files changed, 156 insertions(+), 7 deletions(-) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.xml - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.xml - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index d8ce22f..48d2ee0 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -8837,9 +8837,9 @@ qemuBuildCommandLine(virConnectPtr conn, - * List of controller types that we add commandline args for, - * *in the order we want to add them*. - * -- * We don't add an explicit FD controller because the -- * provided PIIX4 device already includes one. It isn't possible to -- * remove the PIIX4. -+ * The floppy controller is implicit on PIIX4 and older Q35 -+ * machines. For newer Q35 machines it is added out of the -+ * controllers loop, after the floppy drives. - * - * We don't add PCI/PCIe root controller either, because it's - * implicit, but we do add PCI bridges and other PCI -@@ -8860,6 +8860,8 @@ qemuBuildCommandLine(virConnectPtr conn, - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - virBuffer boot_buf = VIR_BUFFER_INITIALIZER; - char *boot_order_str = NULL, *boot_opts_str = NULL; -+ virBuffer fdc_opts = VIR_BUFFER_INITIALIZER; -+ char *fdc_opts_str = NULL; - - VIR_DEBUG("conn=%p driver=%p def=%p mon=%p json=%d " - "qemuCaps=%p migrateFrom=%s migrateFD=%d " -@@ -9810,8 +9812,12 @@ qemuBuildCommandLine(virConnectPtr conn, - disk->info.alias) < 0) - goto error; - -- virCommandAddArg(cmd, "-global"); -- virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr); -+ if (!qemuDomainMachineNeedsFDC(def)) { -+ virCommandAddArg(cmd, "-global"); -+ virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr); -+ } else { -+ virBufferAsprintf(&fdc_opts, "%s,", optstr); -+ } - VIR_FREE(optstr); - - if (bootindex) { -@@ -9821,8 +9827,12 @@ qemuBuildCommandLine(virConnectPtr conn, - bootindex) < 0) - goto error; - -- virCommandAddArg(cmd, "-global"); -- virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr); -+ if (!qemuDomainMachineNeedsFDC(def)) { -+ virCommandAddArg(cmd, "-global"); -+ virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr); -+ } else { -+ virBufferAsprintf(&fdc_opts, "%s,", optstr); -+ } - VIR_FREE(optstr); - } - } else { -@@ -9836,6 +9846,13 @@ qemuBuildCommandLine(virConnectPtr conn, - } - } - } -+ /* Newer Q35 machine types require an explicit FDC controller */ -+ virBufferTrim(&fdc_opts, ",", -1); -+ if ((fdc_opts_str = virBufferContentAndReset(&fdc_opts))) { -+ virCommandAddArg(cmd, "-device"); -+ virCommandAddArgFormat(cmd, "isa-fdc,%s", fdc_opts_str); -+ VIR_FREE(fdc_opts_str); -+ } - } else { - for (i = 0; i < def->ndisks; i++) { - char dev[NAME_MAX]; -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index f9bf32c..6590cf0 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3245,6 +3245,25 @@ qemuDomainMachineIsI440FX(const virDomainDef *def) - } - - -+bool -+qemuDomainMachineNeedsFDC(const virDomainDef *def) -+{ -+ char *p = STRSKIP(def->os.machine, "pc-q35-"); -+ -+ if (p) { -+ if (STRPREFIX(p, "1.") || -+ STRPREFIX(p, "2.0") || -+ STRPREFIX(p, "2.1") || -+ STRPREFIX(p, "2.2") || -+ STRPREFIX(p, "2.3")) -+ return false; -+ return true; -+ } -+ return false; -+} -+ -+ -+ - /** - * qemuDomainUpdateCurrentMemorySize: - * -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index 54e1e7b..66dbcf5 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -465,6 +465,7 @@ virDomainChrSourceDefPtr qemuFindAgentConfig(virDomainDefPtr def); - - bool qemuDomainMachineIsQ35(const virDomainDef *def); - bool qemuDomainMachineIsI440FX(const virDomainDef *def); -+bool qemuDomainMachineNeedsFDC(const virDomainDef *def); - - int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, - virDomainObjPtr vm); -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args -new file mode 100644 -index 0000000..464bfa9 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args -@@ -0,0 +1,12 @@ -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ -+/usr/bin/qemu -S \ -+-M pc-q35-2.4 \ -+-m 214 -smp 1 \ -+-nographic -nodefaults \ -+-monitor unix:/tmp/test-monitor,server,nowait \ -+-no-acpi -boot a \ -+-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \ -+-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 \ -+-drive file=/tmp/firmware.img,if=none,id=drive-fdc0-0-0 \ -+-device isa-fdc,driveA=drive-fdc0-0-0 \ -+-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.xml b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.xml -new file mode 100644 -index 0000000..70d3262 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.xml -@@ -0,0 +1,40 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219100 -+ 219100 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+
-+ -+ -+
-+ -+ -+ -+
-+ -+ -+
-+ -+ -+ -+ -+ -+
-+ -+ -+ -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args -new file mode 100644 -index 0000000..2f0627b ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args -@@ -0,0 +1,11 @@ -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ -+/usr/bin/qemu -S -M pc-q35-2.4 \ -+-m 214 -smp 1 \ -+-nographic -nodefaults \ -+-monitor unix:/tmp/test-monitor,server,nowait \ -+-no-acpi \ -+-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \ -+-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 \ -+-drive file=/tmp/firmware.img,if=none,id=drive-fdc0-0-0 \ -+-device isa-fdc,driveA=drive-fdc0-0-0,bootindexA=1 \ -+-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.xml b/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.xml -new file mode 100644 -index 0000000..70d3262 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.xml -@@ -0,0 +1,40 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219100 -+ 219100 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+
-+ -+ -+
-+ -+ -+ -+
-+ -+ -+
-+ -+ -+ -+ -+ -+
-+ -+ -+ -diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c -index 574777b..bee6637 100644 ---- a/tests/qemuxml2argvtest.c -+++ b/tests/qemuxml2argvtest.c -@@ -607,6 +607,15 @@ mymain(void) - DO_TEST("boot-cdrom", NONE); - DO_TEST("boot-network", NONE); - DO_TEST("boot-floppy", NONE); -+ DO_TEST("boot-floppy-q35", -+ QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE, -+ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, -+ QEMU_CAPS_DRIVE, QEMU_CAPS_ICH9_AHCI); -+ DO_TEST("bootindex-floppy-q35", -+ QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE, -+ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, -+ QEMU_CAPS_DRIVE, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU, -+ QEMU_CAPS_BOOTINDEX); - DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU); - DO_TEST("boot-menu-enable", - QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE); --- -2.4.5 - diff --git a/SOURCES/libvirt-Fix-logic-in-qemuDomainObjPrivateXMLParseVcpu.patch b/SOURCES/libvirt-Fix-logic-in-qemuDomainObjPrivateXMLParseVcpu.patch new file mode 100644 index 0000000..afcb7f1 --- /dev/null +++ b/SOURCES/libvirt-Fix-logic-in-qemuDomainObjPrivateXMLParseVcpu.patch @@ -0,0 +1,65 @@ +From a7e224cdad4aae6641fed84cdad621e7fecc8dc7 Mon Sep 17 00:00:00 2001 +Message-Id: +From: "Daniel P. Berrange" +Date: Wed, 24 Aug 2016 16:10:53 -0400 +Subject: [PATCH] Fix logic in qemuDomainObjPrivateXMLParseVcpu + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +The code in qemuDomainObjPrivateXMLParseVcpu for parsing +the 'idstr' string was comparing the overall boolean +result against 0 which was always true + +qemu/qemu_domain.c: In function 'qemuDomainObjPrivateXMLParseVcpu': +qemu/qemu_domain.c:1482:59: error: comparison of constant '0' with boolean expression is always false [-Werror=bool-compare] + if ((idstr && virStrToLong_uip(idstr, NULL, 10, &idx)) < 0 || + ^ + +It was further performing two distinct error checks in +the same conditional and reporting a single error message, +which was misleading in one of the two cases. + +This splits the conditional check into two parts with +distinct error messages and fixes the logic error. + +Fixes the bug in + + commit 5184f398b40a5e0d7d84b86182edcb2b48ab04ba + Author: Peter Krempa + Date: Fri Jul 1 14:56:14 2016 +0200 + + qemu: Store vCPU thread ids in vcpu private data objects + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit ed1fbd7c5ba90ce10cb9a7e35f32a4b4354988aa) +--- + src/qemu/qemu_domain.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 38225b5..1148b52 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1510,10 +1510,15 @@ qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node, + + idstr = virXMLPropString(node, "id"); + +- if ((idstr && virStrToLong_uip(idstr, NULL, 10, &idx)) < 0 || +- !(vcpu = virDomainDefGetVcpu(def, idx))) { ++ if (idstr && ++ (virStrToLong_uip(idstr, NULL, 10, &idx) < 0)) { + virReportError(VIR_ERR_INTERNAL_ERROR, +- _("invalid vcpu index '%s'"), idstr); ++ _("cannot parse vcpu index '%s'"), idstr); ++ goto cleanup; ++ } ++ if (!(vcpu = virDomainDefGetVcpu(def, idx))) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("invalid vcpu index '%u'"), idx); + goto cleanup; + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-Introduce-SMM-feature.patch b/SOURCES/libvirt-Introduce-SMM-feature.patch new file mode 100644 index 0000000..f58e3eb --- /dev/null +++ b/SOURCES/libvirt-Introduce-SMM-feature.patch @@ -0,0 +1,384 @@ +From b330f5cda86acf70de78d103a7ed5a0e0e3cbacb Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Privoznik +Date: Fri, 5 Aug 2016 14:35:25 +0200 +Subject: [PATCH] Introduce SMM feature + +https://bugzilla.redhat.com/show_bug.cgi?id=1304483 + +Since its release of 2.4.0 qemu is able to enable System +Management Module in the firmware, or disable it. We should +expose this capability in the XML. Unfortunately, there's no good +way to determine whether the binary we are talking to supports +it. I mean, if qemu's run with real machine type, the smm +attribute can be seen in 'qom-list /machine' output. But it's not +there when qemu's run with -M none. Therefore we're stuck with +version based check. + +Also, for the RHEL-7.3 I had to adjust the machine-smm-opt test. +In the upstream we already retired QEMU_CAPS_SMP_TOPOLOGY +capability, but not in RHEL yet. + +Signed-off-by: Michal Privoznik +(cherry picked from commit d0e4be9d0297494ba0e23843593f734234ddb08f) +Signed-off-by: Michal Privoznik + + Conflicts: + tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml + tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml + tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml - + QEMU_CAPS_DISPLAY is not backported yet + +Signed-off-by: Michal Privoznik +--- + docs/formatdomain.html.in | 6 +++++ + docs/schemas/domaincommon.rng | 9 +++++++ + src/conf/domain_conf.c | 5 +++- + src/conf/domain_conf.h | 1 + + src/qemu/qemu_capabilities.c | 16 +++++++++++++ + src/qemu/qemu_capabilities.h | 4 ++++ + src/qemu/qemu_command.c | 12 ++++++++++ + tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml | 1 + + tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 1 + + .../caps_2.6.0-gicv2.aarch64.xml | 1 + + .../caps_2.6.0-gicv3.aarch64.xml | 1 + + tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 1 + + tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 1 + + .../qemuxml2argv-machine-smm-opt.args | 25 +++++++++++++++++++ + .../qemuxml2argv-machine-smm-opt.xml | 28 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 8 +++++++ + 16 files changed, 119 insertions(+), 1 deletion(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index f006179..4d4d601 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -1655,6 +1655,12 @@ + values are 2, 3 and host. + Since 1.2.16 + ++
smm
++
Enable System Management Mode. Possible values are ++ on and off. The default is left ++ for hypervisor to decide. ++ Since 2.1.0 ++
+ + +

Time keeping

+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index f17104b..3960a98 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -4286,6 +4286,15 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index abf889a..c02c821 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -137,7 +137,8 @@ VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST, + "capabilities", + "pmu", + "vmport", +- "gic") ++ "gic", ++ "smm") + + VIR_ENUM_IMPL(virDomainCapabilitiesPolicy, VIR_DOMAIN_CAPABILITIES_POLICY_LAST, + "default", +@@ -16361,6 +16362,7 @@ virDomainDefParseXML(xmlDocPtr xml, + case VIR_DOMAIN_FEATURE_PMU: + case VIR_DOMAIN_FEATURE_PVSPINLOCK: + case VIR_DOMAIN_FEATURE_VMPORT: ++ case VIR_DOMAIN_FEATURE_SMM: + node = ctxt->node; + ctxt->node = nodes[i]; + if ((tmp = virXPathString("string(./@state)", ctxt))) { +@@ -23265,6 +23267,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, + case VIR_DOMAIN_FEATURE_PMU: + case VIR_DOMAIN_FEATURE_PVSPINLOCK: + case VIR_DOMAIN_FEATURE_VMPORT: ++ case VIR_DOMAIN_FEATURE_SMM: + switch ((virTristateSwitch) def->features[i]) { + case VIR_TRISTATE_SWITCH_LAST: + case VIR_TRISTATE_SWITCH_ABSENT: +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 1f75be1..88b0122 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -1598,6 +1598,7 @@ typedef enum { + VIR_DOMAIN_FEATURE_PMU, + VIR_DOMAIN_FEATURE_VMPORT, + VIR_DOMAIN_FEATURE_GIC, ++ VIR_DOMAIN_FEATURE_SMM, + + VIR_DOMAIN_FEATURE_LAST + } virDomainFeature; +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index b35948d..d3964bd 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -338,6 +338,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, + + "tls-creds-x509", /* 230 */ + "intel-iommu", ++ "smm", + ); + + +@@ -3538,6 +3539,10 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, + if (qemuCaps->version >= 2003000) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOSTUSER_MULTIQUEUE); + ++ /* smm option is supported from v2.4.0 */ ++ if (qemuCaps->version >= 2004000) ++ virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_SMM_OPT); ++ + /* Since 2.4.50 ARM virt machine supports gic-version option */ + if (qemuCaps->version >= 2004050) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACH_VIRT_GIC_VERSION); +@@ -4057,6 +4062,17 @@ virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps, + + + bool ++virQEMUCapsSupportsSMM(virQEMUCapsPtr qemuCaps, ++ const virDomainDef *def) ++{ ++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_SMM_OPT)) ++ return false; ++ ++ return qemuDomainMachineIsQ35(def); ++} ++ ++ ++bool + virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, + const char *canonical_machine) + { +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index 379aff0..150d619 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -371,6 +371,7 @@ typedef enum { + /* 230 */ + QEMU_CAPS_OBJECT_TLS_CREDS_X509, /* -object tls-creds-x509 */ + QEMU_CAPS_DEVICE_INTEL_IOMMU, /* -device intel-iommu */ ++ QEMU_CAPS_MACHINE_SMM_OPT, /* -machine xxx,smm=on/off/auto */ + + QEMU_CAPS_LAST /* this must always be the last item */ + } virQEMUCapsFlags; +@@ -407,6 +408,9 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps, + bool virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps, + const virDomainDef *def); + ++bool virQEMUCapsSupportsSMM(virQEMUCapsPtr qemuCaps, ++ const virDomainDef *def); ++ + char *virQEMUCapsFlagsString(virQEMUCapsPtr qemuCaps); + + const char *virQEMUCapsGetBinary(virQEMUCapsPtr qemuCaps); +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 1a5c6dc..773f5f3 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -6996,6 +6996,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + } + } else { + virTristateSwitch vmport = def->features[VIR_DOMAIN_FEATURE_VMPORT]; ++ virTristateSwitch smm = def->features[VIR_DOMAIN_FEATURE_SMM]; + + virCommandAddArg(cmd, "-machine"); + virBufferAdd(&buf, def->os.machine, -1); +@@ -7025,6 +7026,17 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + virTristateSwitchTypeToString(vmport)); + } + ++ if (smm) { ++ if (!virQEMUCapsSupportsSMM(qemuCaps, def)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("smm is not available with this QEMU binary")); ++ goto cleanup; ++ } ++ ++ virBufferAsprintf(&buf, ",smm=%s", ++ virTristateSwitchTypeToString(smm)); ++ } ++ + if (def->mem.dump_core) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DUMP_GUEST_CORE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +index 98c260c..225019a 100644 +--- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +@@ -183,6 +183,7 @@ + + + ++ + 2004000 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +index 590c8c1..f16f057 100644 +--- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +@@ -188,6 +188,7 @@ + + + ++ + 2005000 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml +index aa65733..c57f11f 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml +@@ -157,6 +157,7 @@ + + + ++ + 2005094 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml +index 04d77f7..9798323 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml +@@ -157,6 +157,7 @@ + + + ++ + 2005094 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml +index 120d249..7392551 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml +@@ -151,6 +151,7 @@ + + + ++ + 2005094 + 0 + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +index 128ac11..766c514 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +@@ -194,6 +194,7 @@ + + + ++ + 2006000 + 0 + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args +new file mode 100644 +index 0000000..e49d7e9 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args +@@ -0,0 +1,25 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-machine q35,accel=tcg,smm=on \ ++-m 214 \ ++-smp 1,sockets=1,cores=1,threads=1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot c \ ++-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \ ++-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \ ++-device virtio-scsi-pci,id=scsi0,bus=pci.2,addr=0x1 \ ++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-scsi0-0-0-0 \ ++-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\ ++drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x2 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.xml b/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.xml +new file mode 100644 +index 0000000..b964b5e +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.xml +@@ -0,0 +1,28 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index f49f9b9..5c26812 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -617,6 +617,14 @@ mymain(void) + QEMU_CAPS_DUMP_GUEST_CORE); + DO_TEST_FAILURE("machine-core-on", NONE); + DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT); ++ DO_TEST("machine-smm-opt", ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_ICH9_AHCI, ++ QEMU_CAPS_MACHINE_OPT, ++ QEMU_CAPS_MACHINE_SMM_OPT, ++ QEMU_CAPS_SMP_TOPOLOGY, ++ QEMU_CAPS_VIRTIO_SCSI); + DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT, + QEMU_CAPS_MACHINE_USB_OPT); + DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT, +-- +2.9.2 + diff --git a/SOURCES/libvirt-Introduce-iommu-device.patch b/SOURCES/libvirt-Introduce-iommu-device.patch new file mode 100644 index 0000000..7aaad98 --- /dev/null +++ b/SOURCES/libvirt-Introduce-iommu-device.patch @@ -0,0 +1,536 @@ +From aa8079012cc5655cc0e2c55532f8e6b55f1d0a51 Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 25 Jul 2016 10:24:56 +0200 +Subject: [PATCH] Introduce device +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A device with an attribute 'model', with just one model +so far: + + + ... + + + +https://bugzilla.redhat.com/show_bug.cgi?id=1235581 +(cherry picked from commit ea0ed35d6efcba9e79c76d7b57959f553b76224a) +Signed-off-by: Ján Tomko +--- + docs/formatdomain.html.in | 26 +++++++ + docs/schemas/domaincommon.rng | 11 +++ + src/conf/domain_conf.c | 90 +++++++++++++++++++++- + src/conf/domain_conf.h | 16 ++++ + src/libvirt_private.syms | 2 + + src/qemu/qemu_driver.c | 6 ++ + src/qemu/qemu_hotplug.c | 1 + + .../qemuxml2argvdata/qemuxml2argv-intel-iommu.xml | 37 +++++++++ + .../qemuxml2xmlout-intel-iommu.xml | 37 +++++++++ + tests/qemuxml2xmltest.c | 4 + + 10 files changed, 229 insertions(+), 1 deletion(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.xml + create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index b0b2f82..d206f6a 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -6716,6 +6716,32 @@ qemu-kvm -net nic,model=? /dev/null + + + ++

IOMMU devices

++ ++

++ The iommu element can be used to add an IOMMU device. ++ Since 2.1.0 ++

++ ++

++ Example: ++

++
++  ...
++  <devices>
++    <iommu model='intel'/>
++  </devices>
++  ...
++
++
++
model
++
++

++ Currently only the intel model is supported. ++

++
++
++ +

Security label

+ +

+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index 0876daa..f17104b 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -3713,6 +3713,14 @@ + + + ++ ++ ++ ++ intel ++ ++ ++ ++ + + + +@@ -4184,6 +4192,9 @@ + + + ++ ++ ++ + + + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index bc01633..ddeca0d 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -241,7 +241,8 @@ VIR_ENUM_IMPL(virDomainDevice, VIR_DOMAIN_DEVICE_LAST, + "shmem", + "tpm", + "panic", +- "memory") ++ "memory", ++ "iommu") + + VIR_ENUM_IMPL(virDomainDeviceAddress, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST, + "none", +@@ -804,6 +805,9 @@ VIR_ENUM_IMPL(virDomainTPMModel, VIR_DOMAIN_TPM_MODEL_LAST, + VIR_ENUM_IMPL(virDomainTPMBackend, VIR_DOMAIN_TPM_TYPE_LAST, + "passthrough") + ++VIR_ENUM_IMPL(virDomainIOMMUModel, VIR_DOMAIN_IOMMU_MODEL_LAST, ++ "intel") ++ + VIR_ENUM_IMPL(virDomainDiskDiscard, VIR_DOMAIN_DISK_DISCARD_LAST, + "default", + "unmap", +@@ -2364,6 +2368,9 @@ void virDomainDeviceDefFree(virDomainDeviceDefPtr def) + case VIR_DOMAIN_DEVICE_MEMORY: + virDomainMemoryDefFree(def->data.memory); + break; ++ case VIR_DOMAIN_DEVICE_IOMMU: ++ VIR_FREE(def->data.iommu); ++ break; + case VIR_DOMAIN_DEVICE_LAST: + case VIR_DOMAIN_DEVICE_NONE: + break; +@@ -2610,6 +2617,8 @@ void virDomainDefFree(virDomainDefPtr def) + virDomainPanicDefFree(def->panics[i]); + VIR_FREE(def->panics); + ++ VIR_FREE(def->iommu); ++ + VIR_FREE(def->idmap.uidmap); + VIR_FREE(def->idmap.gidmap); + +@@ -3179,6 +3188,7 @@ virDomainDeviceGetInfo(virDomainDeviceDefPtr device) + /* The following devices do not contain virDomainDeviceInfo */ + case VIR_DOMAIN_DEVICE_LEASE: + case VIR_DOMAIN_DEVICE_GRAPHICS: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + case VIR_DOMAIN_DEVICE_NONE: + break; +@@ -3540,6 +3550,7 @@ virDomainDeviceInfoIterateInternal(virDomainDefPtr def, + case VIR_DOMAIN_DEVICE_LAST: + case VIR_DOMAIN_DEVICE_RNG: + case VIR_DOMAIN_DEVICE_MEMORY: ++ case VIR_DOMAIN_DEVICE_IOMMU: + break; + } + #endif +@@ -4635,6 +4646,7 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev, + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_MEMORY: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_LAST: + break; +@@ -13269,6 +13281,39 @@ virDomainMemoryDefParseXML(xmlNodePtr memdevNode, + } + + ++static virDomainIOMMUDefPtr ++virDomainIOMMUDefParseXML(xmlNodePtr node) ++{ ++ virDomainIOMMUDefPtr iommu = NULL, ret = NULL; ++ char *tmp = NULL; ++ int val; ++ ++ if (VIR_ALLOC(iommu) < 0) ++ goto cleanup; ++ ++ if (!(tmp = virXMLPropString(node, "model"))) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("missing model for IOMMU device")); ++ goto cleanup; ++ } ++ ++ if ((val = virDomainIOMMUModelTypeFromString(tmp)) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, _("unknown IOMMU model: %s"), tmp); ++ goto cleanup; ++ } ++ ++ iommu->model = val; ++ ++ ret = iommu; ++ iommu = NULL; ++ ++ cleanup: ++ VIR_FREE(iommu); ++ VIR_FREE(tmp); ++ return ret; ++} ++ ++ + virDomainDeviceDefPtr + virDomainDeviceDefParse(const char *xmlStr, + const virDomainDef *def, +@@ -13410,6 +13455,10 @@ virDomainDeviceDefParse(const char *xmlStr, + if (!(dev->data.memory = virDomainMemoryDefParseXML(node, ctxt, flags))) + goto error; + break; ++ case VIR_DOMAIN_DEVICE_IOMMU: ++ if (!(dev->data.iommu = virDomainIOMMUDefParseXML(node))) ++ goto error; ++ break; + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_LAST: + break; +@@ -17217,6 +17266,21 @@ virDomainDefParseXML(xmlDocPtr xml, + } + VIR_FREE(nodes); + ++ if ((n = virXPathNodeSet("./devices/iommu", ctxt, &nodes)) < 0) ++ goto error; ++ ++ if (n > 1) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("only a single IOMMU device is supported")); ++ goto error; ++ } ++ ++ if (n > 0) { ++ if (!(def->iommu = virDomainIOMMUDefParseXML(nodes[0]))) ++ goto error; ++ } ++ VIR_FREE(nodes); ++ + /* analysis of the user namespace mapping */ + if ((n = virXPathNodeSet("./idmap/uid", ctxt, &nodes)) < 0) + goto error; +@@ -18983,6 +19047,23 @@ virDomainDefCheckABIStability(virDomainDefPtr src, + goto error; + } + ++ if (!!src->iommu != !!dst->iommu) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Target domain IOMMU device count " ++ "does not match source")); ++ goto error; ++ } ++ ++ if (src->iommu && ++ src->iommu->model != dst->iommu->model) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("Target domain IOMMU device model '%s' " ++ "does not match source '%s'"), ++ virDomainIOMMUModelTypeToString(dst->iommu->model), ++ virDomainIOMMUModelTypeToString(src->iommu->model)); ++ goto error; ++ } ++ + /* Coverity is not very happy with this - all dead_error_condition */ + #if !STATIC_ANALYSIS + /* This switch statement is here to trigger compiler warning when adding +@@ -19015,6 +19096,7 @@ virDomainDefCheckABIStability(virDomainDefPtr src, + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_MEMORY: ++ case VIR_DOMAIN_DEVICE_IOMMU: + break; + } + #endif +@@ -23525,6 +23607,11 @@ virDomainDefFormatInternal(virDomainDefPtr def, + goto error; + } + ++ if (def->iommu) { ++ virBufferAsprintf(buf, "\n", ++ virDomainIOMMUModelTypeToString(def->iommu->model)); ++ } ++ + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + +@@ -24642,6 +24729,7 @@ virDomainDeviceDefCopy(virDomainDeviceDefPtr src, + case VIR_DOMAIN_DEVICE_MEMBALLOON: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_SHMEM: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Copying definition of '%d' type " +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index f29c4bd..1f75be1 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -151,6 +151,9 @@ typedef virDomainShmemDef *virDomainShmemDefPtr; + typedef struct _virDomainTPMDef virDomainTPMDef; + typedef virDomainTPMDef *virDomainTPMDefPtr; + ++typedef struct _virDomainIOMMUDef virDomainIOMMUDef; ++typedef virDomainIOMMUDef *virDomainIOMMUDefPtr; ++ + /* Flags for the 'type' field in virDomainDeviceDef */ + typedef enum { + VIR_DOMAIN_DEVICE_NONE = 0, +@@ -176,6 +179,7 @@ typedef enum { + VIR_DOMAIN_DEVICE_TPM, + VIR_DOMAIN_DEVICE_PANIC, + VIR_DOMAIN_DEVICE_MEMORY, ++ VIR_DOMAIN_DEVICE_IOMMU, + + VIR_DOMAIN_DEVICE_LAST + } virDomainDeviceType; +@@ -207,6 +211,7 @@ struct _virDomainDeviceDef { + virDomainTPMDefPtr tpm; + virDomainPanicDefPtr panic; + virDomainMemoryDefPtr memory; ++ virDomainIOMMUDefPtr iommu; + } data; + }; + +@@ -2097,6 +2102,15 @@ struct _virDomainKeyWrapDef { + int dea; /* enum virTristateSwitch */ + }; + ++typedef enum { ++ VIR_DOMAIN_IOMMU_MODEL_INTEL, ++ ++ VIR_DOMAIN_IOMMU_MODEL_LAST ++} virDomainIOMMUModel; ++ ++struct _virDomainIOMMUDef { ++ virDomainIOMMUModel model; ++}; + /* + * Guest VM main configuration + * +@@ -2234,6 +2248,7 @@ struct _virDomainDef { + virCPUDefPtr cpu; + virSysinfoDefPtr sysinfo; + virDomainRedirFilterDefPtr redirfilter; ++ virDomainIOMMUDefPtr iommu; + + void *namespaceData; + virDomainXMLNamespace ns; +@@ -2999,6 +3014,7 @@ VIR_ENUM_DECL(virDomainTPMModel) + VIR_ENUM_DECL(virDomainTPMBackend) + VIR_ENUM_DECL(virDomainMemoryModel) + VIR_ENUM_DECL(virDomainMemoryBackingModel) ++VIR_ENUM_DECL(virDomainIOMMUModel) + /* from libvirt.h */ + VIR_ENUM_DECL(virDomainState) + VIR_ENUM_DECL(virDomainNostateReason) +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 8cd1ba3..4dd93d7 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -353,6 +353,8 @@ virDomainHubTypeToString; + virDomainHypervTypeFromString; + virDomainHypervTypeToString; + virDomainInputDefFree; ++virDomainIOMMUModelTypeFromString; ++virDomainIOMMUModelTypeToString; + virDomainIOThreadIDAdd; + virDomainIOThreadIDDefFree; + virDomainIOThreadIDDel; +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index f1425b7..2d6e5d2 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -7440,6 +7440,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("live attach of device '%s' is not supported"), +@@ -7531,6 +7532,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm, + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("live detach of device '%s' is not supported"), +@@ -7646,6 +7648,7 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn, + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("live update of device '%s' is not supported"), +@@ -7809,6 +7812,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("persistent attach of device '%s' is not supported"), +@@ -7963,6 +7967,7 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef, + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("persistent detach of device '%s' is not supported"), +@@ -8061,6 +8066,7 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef, + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("persistent update of device '%s' is not supported"), +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 4a56cad..7a71333 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -3328,6 +3328,7 @@ qemuDomainRemoveDevice(virQEMUDriverPtr driver, + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: ++ case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("don't know how to remove a %s device"), +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.xml b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.xml +new file mode 100644 +index 0000000..b5b2b51 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.xml +@@ -0,0 +1,37 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++

++ ++ ++ ++ ++
++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu.xml +new file mode 100644 +index 0000000..b5b2b51 +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu.xml +@@ -0,0 +1,37 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index c6ef28c..2112d39 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -830,6 +830,10 @@ mymain(void) + DO_TEST("video-qxl-heads"); + DO_TEST("video-qxl-noheads"); + ++ DO_TEST_FULL("intel-iommu", WHEN_ACTIVE, GIC_NONE, ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE); ++ + qemuTestDriverFree(&driver); + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +-- +2.9.2 + diff --git a/SOURCES/libvirt-Introduce-secure-attribute-to-os-loader-element.patch b/SOURCES/libvirt-Introduce-secure-attribute-to-os-loader-element.patch new file mode 100644 index 0000000..ba9ba05 --- /dev/null +++ b/SOURCES/libvirt-Introduce-secure-attribute-to-os-loader-element.patch @@ -0,0 +1,190 @@ +From 8d9b2ba3738c9447c1cdea9ea1b81eee3ffe00f4 Mon Sep 17 00:00:00 2001 +Message-Id: <8d9b2ba3738c9447c1cdea9ea1b81eee3ffe00f4@dist-git> +From: Michal Privoznik +Date: Fri, 5 Aug 2016 14:35:26 +0200 +Subject: [PATCH] Introduce @secure attribute to os loader element + +https://bugzilla.redhat.com/show_bug.cgi?id=1304483 + +This element will control secure boot implemented by some +firmwares. If the firmware used in does support the +feature we must tell it to the underlying hypervisor. However, we +can't know whether loader does support it or not just by looking +at the file. Therefore we have to have an attribute to the +element where users can tell us whether the firmware is secure +boot enabled or not. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 64c24800437ee372d228103291626705892c3ad9) +Signed-off-by: Michal Privoznik +--- + docs/formatdomain.html.in | 7 ++-- + docs/schemas/domaincommon.rng | 8 +++++ + src/conf/domain_conf.c | 14 ++++++++ + src/conf/domain_conf.h | 1 + + .../qemuxml2argv-bios-nvram-secure.xml | 41 ++++++++++++++++++++++ + 5 files changed, 69 insertions(+), 2 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index 4d4d601..c2e261d 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -102,7 +102,7 @@ + ... + <os> + <type>hvm</type> +- <loader readonly='yes' type='rom'>/usr/lib/xen/boot/hvmloader</loader> ++ <loader readonly='yes' secure='no' type='rom'>/usr/lib/xen/boot/hvmloader</loader> + <nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/nvram/guest_VARS.fd</nvram> + <boot dev='hd'/> + <boot dev='cdrom'/> +@@ -140,7 +140,10 @@ + pflash. It tells the hypervisor where in the guest + memory the file should be mapped. For instance, if the loader + path points to an UEFI image, type should be +- pflash. ++ pflash. Moreover, some firmwares may ++ implement the Secure boot feature. Attribute ++ secure can be used then to control it. ++ Since 2.1.0 +
nvram
+
Some UEFI firmwares may want to use a non-volatile memory to store + some variables. In the host, this is represented as a file and the +diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index 3960a98..497597c 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -260,6 +260,14 @@ + + + ++ ++ ++ yes ++ no ++ ++ ++ ++ + + + rom +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index c02c821..715ca2b 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -15371,9 +15371,11 @@ virDomainLoaderDefParseXML(xmlNodePtr node, + { + int ret = -1; + char *readonly_str = NULL; ++ char *secure_str = NULL; + char *type_str = NULL; + + readonly_str = virXMLPropString(node, "readonly"); ++ secure_str = virXMLPropString(node, "secure"); + type_str = virXMLPropString(node, "type"); + loader->path = (char *) xmlNodeGetContent(node); + +@@ -15384,6 +15386,13 @@ virDomainLoaderDefParseXML(xmlNodePtr node, + goto cleanup; + } + ++ if (secure_str && ++ (loader->secure = virTristateBoolTypeFromString(secure_str)) <= 0) { ++ virReportError(VIR_ERR_XML_DETAIL, ++ _("unknown secure value: %s"), secure_str); ++ goto cleanup; ++ } ++ + if (type_str) { + int type; + if ((type = virDomainLoaderTypeFromString(type_str)) < 0) { +@@ -15397,6 +15406,7 @@ virDomainLoaderDefParseXML(xmlNodePtr node, + ret = 0; + cleanup: + VIR_FREE(readonly_str); ++ VIR_FREE(secure_str); + VIR_FREE(type_str); + return ret; + } +@@ -22512,6 +22522,7 @@ virDomainLoaderDefFormat(virBufferPtr buf, + virDomainLoaderDefPtr loader) + { + const char *readonly = virTristateBoolTypeToString(loader->readonly); ++ const char *secure = virTristateBoolTypeToString(loader->secure); + const char *type = virDomainLoaderTypeToString(loader->type); + + virBufferAddLit(buf, "readonly) + virBufferAsprintf(buf, " readonly='%s'", readonly); + ++ if (loader->secure) ++ virBufferAsprintf(buf, " secure='%s'", secure); ++ + virBufferAsprintf(buf, " type='%s'>", type); + + virBufferEscapeString(buf, "%s\n", loader->path); +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 88b0122..6eed30e 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -1731,6 +1731,7 @@ struct _virDomainLoaderDef { + char *path; + int readonly; /* enum virTristateBool */ + virDomainLoader type; ++ int secure; /* enum virTristateBool */ + char *nvram; /* path to non-volatile RAM */ + char *templt; /* user override of path to master nvram */ + }; +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.xml b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.xml +new file mode 100644 +index 0000000..0ddddfe3 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.xml +@@ -0,0 +1,41 @@ ++ ++ test-bios ++ 362d1fc1-df7d-193e-5c18-49a71bd1da66 ++ 1048576 ++ 1048576 ++ 1 ++ ++ hvm ++ /usr/share/OVMF/OVMF_CODE.secboot.fd ++ /usr/share/OVMF/OVMF_VARS.fd ++ ++ ++ ++ ++ ++ ++ ++ ++ destroy ++ restart ++ restart ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.9.2 + diff --git a/SOURCES/libvirt-Introduce-virDomainUSBAddressSet.patch b/SOURCES/libvirt-Introduce-virDomainUSBAddressSet.patch new file mode 100644 index 0000000..3b93e8c --- /dev/null +++ b/SOURCES/libvirt-Introduce-virDomainUSBAddressSet.patch @@ -0,0 +1,127 @@ +From da353cc1db4b13c50c3d79d5053d47a389a86148 Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:50 +0200 +Subject: [PATCH] Introduce virDomainUSBAddressSet +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A new type to track USB addresses. + +Every is represented by an +object of type virDomainUSBAddressHub located at buses[i]. + +Each of these hubs has up to 'nports' ports. +If a port is occupied, it has the corresponding bit set in +the 'ports' bitmap, e.g. port 1 would have the 0th bit set. +If there is a hub on this port, then hubs[i] will point +to this hub. + +(cherry picked from commit 82c142b321a10c62aa0a10e3ae9ba603b2d7d155) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/domain_addr.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + src/conf/domain_addr.h | 22 ++++++++++++++++++++++ + src/libvirt_private.syms | 2 ++ + 3 files changed, 66 insertions(+) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 741d045..658aad5 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1284,3 +1284,45 @@ virDomainUSBAddressPortFormat(unsigned int *port) + return NULL; + return virBufferContentAndReset(&buf); + } ++ ++ ++virDomainUSBAddressSetPtr ++virDomainUSBAddressSetCreate(void) ++{ ++ virDomainUSBAddressSetPtr addrs; ++ ++ if (VIR_ALLOC(addrs) < 0) ++ return NULL; ++ ++ return addrs; ++} ++ ++ ++static void ++virDomainUSBAddressHubFree(virDomainUSBAddressHubPtr hub) ++{ ++ size_t i; ++ ++ if (!hub) ++ return; ++ ++ for (i = 0; i < hub->nports; i++) ++ virDomainUSBAddressHubFree(hub->ports[i]); ++ virBitmapFree(hub->portmap); ++ VIR_FREE(hub); ++} ++ ++ ++void ++virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs) ++{ ++ size_t i; ++ ++ if (!addrs) ++ return; ++ ++ for (i = 0; i < addrs->nbuses; i++) ++ virDomainUSBAddressHubFree(addrs->buses[i]); ++ VIR_FREE(addrs->buses); ++ VIR_FREE(addrs); ++} +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index cfc74d5..168d3ed 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -249,4 +249,26 @@ char * + virDomainUSBAddressPortFormat(unsigned int *port) + ATTRIBUTE_NONNULL(1); + ++typedef struct _virDomainUSBAddressHub virDomainUSBAddressHub; ++typedef virDomainUSBAddressHub *virDomainUSBAddressHubPtr; ++struct _virDomainUSBAddressHub { ++ /* indexes are shifted by one: ++ * ports[0] represents port 1, because ports are numbered from 1 */ ++ virBitmapPtr portmap; ++ size_t nports; ++ virDomainUSBAddressHubPtr *ports; ++}; ++ ++struct _virDomainUSBAddressSet { ++ /* every is represented ++ * as a hub at buses[i] */ ++ virDomainUSBAddressHubPtr *buses; ++ size_t nbuses; ++}; ++typedef struct _virDomainUSBAddressSet virDomainUSBAddressSet; ++typedef virDomainUSBAddressSet *virDomainUSBAddressSetPtr; ++ ++virDomainUSBAddressSetPtr virDomainUSBAddressSetCreate(void); ++void virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs); ++ + #endif /* __DOMAIN_ADDR_H__ */ +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 44b78e0..49f8d6c 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -110,6 +110,8 @@ virDomainPCIControllerModelToConnectType; + virDomainUSBAddressPortFormat; + virDomainUSBAddressPortFormatBuf; + virDomainUSBAddressPortIsValid; ++virDomainUSBAddressSetCreate; ++virDomainUSBAddressSetFree; + virDomainVirtioSerialAddrAssign; + virDomainVirtioSerialAddrAutoAssign; + virDomainVirtioSerialAddrIsComplete; +-- +2.9.2 + diff --git a/SOURCES/libvirt-Introduce-virDomainUSBDeviceDefForeach.patch b/SOURCES/libvirt-Introduce-virDomainUSBDeviceDefForeach.patch new file mode 100644 index 0000000..312cb3d --- /dev/null +++ b/SOURCES/libvirt-Introduce-virDomainUSBDeviceDefForeach.patch @@ -0,0 +1,158 @@ +From ad806164d0df731d6ce8b24109abb360584ea64b Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:47 +0200 +Subject: [PATCH] Introduce virDomainUSBDeviceDefForeach +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A helper that will execute a callback on every USB device +in the domain definition. + +With an ability to skip USB hubs, since we will want to treat +them differently in some cases. + +(cherry picked from commit 492b3bfda175a846bdbff898607197b0b306d58c) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/domain_conf.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/conf/domain_conf.h | 7 ++++ + src/libvirt_private.syms | 1 + + 3 files changed, 97 insertions(+) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index bb297f6..e6dc23d 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -24022,6 +24022,95 @@ virDomainSmartcardDefForeach(virDomainDefPtr def, + } + + ++int ++virDomainUSBDeviceDefForeach(virDomainDefPtr def, ++ virDomainUSBDeviceDefIterator iter, ++ void *opaque, ++ bool skipHubs) ++{ ++ size_t i; ++ ++ /* usb-hub */ ++ if (!skipHubs) { ++ for (i = 0; i < def->nhubs; i++) { ++ virDomainHubDefPtr hub = def->hubs[i]; ++ if (hub->type == VIR_DOMAIN_HUB_TYPE_USB) { ++ if (iter(&hub->info, opaque) < 0) ++ return -1; ++ } ++ } ++ } ++ ++ /* usb-host */ ++ for (i = 0; i < def->nhostdevs; i++) { ++ virDomainHostdevDefPtr hostdev = def->hostdevs[i]; ++ if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { ++ if (iter(hostdev->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ /* usb-storage */ ++ for (i = 0; i < def->ndisks; i++) { ++ virDomainDiskDefPtr disk = def->disks[i]; ++ if (disk->bus == VIR_DOMAIN_DISK_BUS_USB) { ++ if (iter(&disk->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ /* TODO: add def->nets here when libvirt starts supporting usb-net */ ++ ++ /* usb-ccid */ ++ for (i = 0; i < def->ncontrollers; i++) { ++ virDomainControllerDefPtr cont = def->controllers[i]; ++ if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_CCID) { ++ if (iter(&cont->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ /* usb-kbd, usb-mouse, usb-tablet */ ++ for (i = 0; i < def->ninputs; i++) { ++ virDomainInputDefPtr input = def->inputs[i]; ++ ++ if (input->bus == VIR_DOMAIN_INPUT_BUS_USB) { ++ if (iter(&input->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ /* usb-serial */ ++ for (i = 0; i < def->nserials; i++) { ++ virDomainChrDefPtr serial = def->serials[i]; ++ if (serial->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB) { ++ if (iter(&serial->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ /* usb-audio model=usb */ ++ for (i = 0; i < def->nsounds; i++) { ++ virDomainSoundDefPtr sound = def->sounds[i]; ++ if (sound->model == VIR_DOMAIN_SOUND_MODEL_USB) { ++ if (iter(&sound->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ /* usb-redir */ ++ for (i = 0; i < def->nredirdevs; i++) { ++ virDomainRedirdevDefPtr redirdev = def->redirdevs[i]; ++ if (redirdev->bus == VIR_DOMAIN_REDIRDEV_BUS_USB) { ++ if (iter(&redirdev->info, opaque) < 0) ++ return -1; ++ } ++ } ++ ++ return 0; ++} ++ ++ + /* Call iter(disk, name, depth, opaque) for each element of disk and + * its backing chain in the pre-populated disk->src.backingStore. + * ignoreOpenFailure determines whether to warn about a chain that +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index e1990dc..f29c4bd 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2884,6 +2884,13 @@ typedef int (*virDomainDiskDefPathIterator)(virDomainDiskDefPtr disk, + size_t depth, + void *opaque); + ++typedef int (*virDomainUSBDeviceDefIterator)(virDomainDeviceInfoPtr info, ++ void *opaque); ++int virDomainUSBDeviceDefForeach(virDomainDefPtr def, ++ virDomainUSBDeviceDefIterator iter, ++ void *opaque, ++ bool skipHubs); ++ + int virDomainDiskDefForeachPath(virDomainDiskDefPtr disk, + bool ignoreOpenFailure, + virDomainDiskDefPathIterator iter, +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 4617f5d..de620a8 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -473,6 +473,7 @@ virDomainTPMBackendTypeToString; + virDomainTPMDefFree; + virDomainTPMModelTypeFromString; + virDomainTPMModelTypeToString; ++virDomainUSBDeviceDefForeach; + virDomainVideoDefaultRAM; + virDomainVideoDefaultType; + virDomainVideoDefFree; +-- +2.9.2 + diff --git a/SOURCES/libvirt-Introduce-virErrorCopyNew.patch b/SOURCES/libvirt-Introduce-virErrorCopyNew.patch deleted file mode 100644 index a9f5617..0000000 --- a/SOURCES/libvirt-Introduce-virErrorCopyNew.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 9de6f8ef5dbda65683717dd0001cb606792a9ca3 Mon Sep 17 00:00:00 2001 -Message-Id: <9de6f8ef5dbda65683717dd0001cb606792a9ca3@dist-git> -From: Jiri Denemark -Date: Fri, 10 Jul 2015 08:44:41 +0200 -Subject: [PATCH] Introduce virErrorCopyNew - -A helper function for copying error objects. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 9d0a2af6c230ce3007b3504907ccdba09cdc4cf2) - -https://bugzilla.redhat.com/show_bug.cgi?id=1090093 - -Signed-off-by: Jiri Denemark ---- - docs/apibuild.py | 1 + - src/libvirt_private.syms | 1 + - src/util/virerror.c | 16 ++++++++++++++++ - src/util/virerror.h | 1 + - 4 files changed, 19 insertions(+) - -diff --git a/docs/apibuild.py b/docs/apibuild.py -index 69f991d..f934fb2 100755 ---- a/docs/apibuild.py -+++ b/docs/apibuild.py -@@ -102,6 +102,7 @@ ignored_functions = { - "virDomainMigratePrepare3Params": "private function for migration", - "virDomainMigrateConfirm3Params": "private function for migration", - "virDomainMigratePrepareTunnel3Params": "private function for tunnelled migration", -+ "virErrorCopyNew": "private", - } - - ignored_macros = { -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 65168b1..1a03268 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1365,6 +1365,7 @@ ebtablesRemoveForwardAllowIn; - - # util/virerror.h - virDispatchError; -+virErrorCopyNew; - virErrorInitialize; - virErrorSetErrnoFromLastError; - virLastErrorIsSystemErrno; -diff --git a/src/util/virerror.c b/src/util/virerror.c -index fae627b..60b2e79 100644 ---- a/src/util/virerror.c -+++ b/src/util/virerror.c -@@ -214,6 +214,22 @@ virCopyError(virErrorPtr from, - return ret; - } - -+ -+virErrorPtr -+virErrorCopyNew(virErrorPtr err) -+{ -+ virErrorPtr ret; -+ -+ if (VIR_ALLOC_QUIET(ret) < 0) -+ return NULL; -+ -+ if (virCopyError(err, ret) < 0) -+ VIR_FREE(ret); -+ -+ return ret; -+} -+ -+ - static virErrorPtr - virLastErrorObject(void) - { -diff --git a/src/util/virerror.h b/src/util/virerror.h -index baa2d08..2348648 100644 ---- a/src/util/virerror.h -+++ b/src/util/virerror.h -@@ -185,6 +185,7 @@ void virReportOOMErrorFull(int domcode, - virRaiseErrorObject(__FILE__, __FUNCTION__, __LINE__, obj) - - int virSetError(virErrorPtr newerr); -+virErrorPtr virErrorCopyNew(virErrorPtr err); - void virDispatchError(virConnectPtr conn); - const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); - --- -2.4.5 - diff --git a/SOURCES/libvirt-Introduce-virHashAtomic.patch b/SOURCES/libvirt-Introduce-virHashAtomic.patch deleted file mode 100644 index ad98343..0000000 --- a/SOURCES/libvirt-Introduce-virHashAtomic.patch +++ /dev/null @@ -1,201 +0,0 @@ -From c940f107b75694c3272ca98cb69b9d7df8cd2d0b Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Thu, 2 Jul 2015 14:21:27 +0200 -Subject: [PATCH] Introduce virHashAtomic - -This is a self-locking wrapper around virHashTable. Only a limited set -of APIs are implemented now (the ones which are used in the following -patch) as more can be added on demand. - -Signed-off-by: Jiri Denemark -(cherry picked from commit a7c22a1f2949e781aef4aa82afda407efd344f95) - -https://bugzilla.redhat.com/show_bug.cgi?id=1090093 - -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 3 ++ - src/util/virhash.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/util/virhash.h | 10 ++++++ - 3 files changed, 94 insertions(+) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 720afdf..65168b1 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1476,6 +1476,9 @@ virFirewallStartTransaction; - - # util/virhash.h - virHashAddEntry; -+virHashAtomicNew; -+virHashAtomicSteal; -+virHashAtomicUpdate; - virHashCreate; - virHashEqual; - virHashForEach; -diff --git a/src/util/virhash.c b/src/util/virhash.c -index e3c1880..3cfcc69 100644 ---- a/src/util/virhash.c -+++ b/src/util/virhash.c -@@ -31,6 +31,7 @@ - #include "virhashcode.h" - #include "virrandom.h" - #include "virstring.h" -+#include "virobject.h" - - #define VIR_FROM_THIS VIR_FROM_NONE - -@@ -76,6 +77,28 @@ struct _virHashTable { - virHashKeyFree keyFree; - }; - -+struct _virHashAtomic { -+ virObjectLockable parent; -+ virHashTablePtr hash; -+}; -+ -+static virClassPtr virHashAtomicClass; -+static void virHashAtomicDispose(void *obj); -+ -+static int virHashAtomicOnceInit(void) -+{ -+ virHashAtomicClass = virClassNew(virClassForObjectLockable(), -+ "virHashAtomic", -+ sizeof(virHashAtomic), -+ virHashAtomicDispose); -+ if (!virHashAtomicClass) -+ return -1; -+ else -+ return 0; -+} -+VIR_ONCE_GLOBAL_INIT(virHashAtomic) -+ -+ - static uint32_t virHashStrCode(const void *name, uint32_t seed) - { - return virHashCodeGen(name, strlen(name), seed); -@@ -178,6 +201,36 @@ virHashTablePtr virHashCreate(ssize_t size, virHashDataFree dataFree) - virHashStrFree); - } - -+ -+virHashAtomicPtr -+virHashAtomicNew(ssize_t size, -+ virHashDataFree dataFree) -+{ -+ virHashAtomicPtr hash; -+ -+ if (virHashAtomicInitialize() < 0) -+ return NULL; -+ -+ if (!(hash = virObjectLockableNew(virHashAtomicClass))) -+ return NULL; -+ -+ if (!(hash->hash = virHashCreate(size, dataFree))) { -+ virObjectUnref(hash); -+ return NULL; -+ } -+ return hash; -+} -+ -+ -+static void -+virHashAtomicDispose(void *obj) -+{ -+ virHashAtomicPtr hash = obj; -+ -+ virHashFree(hash->hash); -+} -+ -+ - /** - * virHashGrow: - * @table: the hash table -@@ -360,6 +413,21 @@ virHashUpdateEntry(virHashTablePtr table, const void *name, - return virHashAddOrUpdateEntry(table, name, userdata, true); - } - -+int -+virHashAtomicUpdate(virHashAtomicPtr table, -+ const void *name, -+ void *userdata) -+{ -+ int ret; -+ -+ virObjectLock(table); -+ ret = virHashAddOrUpdateEntry(table->hash, name, userdata, true); -+ virObjectUnlock(table); -+ -+ return ret; -+} -+ -+ - /** - * virHashLookup: - * @table: the hash table -@@ -409,6 +477,19 @@ void *virHashSteal(virHashTablePtr table, const void *name) - return data; - } - -+void * -+virHashAtomicSteal(virHashAtomicPtr table, -+ const void *name) -+{ -+ void *data; -+ -+ virObjectLock(table); -+ data = virHashSteal(table->hash, name); -+ virObjectUnlock(table); -+ -+ return data; -+} -+ - - /** - * virHashSize: -diff --git a/src/util/virhash.h b/src/util/virhash.h -index a137137..50b9a04 100644 ---- a/src/util/virhash.h -+++ b/src/util/virhash.h -@@ -21,6 +21,9 @@ - typedef struct _virHashTable virHashTable; - typedef virHashTable *virHashTablePtr; - -+typedef struct _virHashAtomic virHashAtomic; -+typedef virHashAtomic *virHashAtomicPtr; -+ - /* - * function types: - */ -@@ -101,6 +104,8 @@ typedef void (*virHashKeyFree)(void *name); - */ - virHashTablePtr virHashCreate(ssize_t size, - virHashDataFree dataFree); -+virHashAtomicPtr virHashAtomicNew(ssize_t size, -+ virHashDataFree dataFree); - virHashTablePtr virHashCreateFull(ssize_t size, - virHashDataFree dataFree, - virHashKeyCode keyCode, -@@ -119,6 +124,9 @@ int virHashAddEntry(virHashTablePtr table, - int virHashUpdateEntry(virHashTablePtr table, - const void *name, - void *userdata); -+int virHashAtomicUpdate(virHashAtomicPtr table, -+ const void *name, -+ void *userdata); - - /* - * Remove an entry from the hash table. -@@ -140,6 +148,8 @@ void *virHashLookup(const virHashTable *table, const void *name); - * Retrieve & remove the userdata. - */ - void *virHashSteal(virHashTablePtr table, const void *name); -+void *virHashAtomicSteal(virHashAtomicPtr table, -+ const void *name); - - /* - * Get the hash table's key/value pairs and have them optionally sorted. --- -2.4.5 - diff --git a/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch b/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch new file mode 100644 index 0000000..38e52a1 --- /dev/null +++ b/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch @@ -0,0 +1,35 @@ +From c6b70e343c1050b9fc497b3e1d8b5190f3889e1e Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 22 Feb 2016 12:51:51 +0100 +Subject: [PATCH] RHEL: Add rhel machine types to qemuDomainMachineNeedsFDC + +RHEL-only. + +pc-q35-rhel7.0.0 and pc-q35-rhel7.1.0 do not need an explicit +isa-fdc controller. + +https://bugzilla.redhat.com/show_bug.cgi?id=1227880 + +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_domain.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index fd25669..0edcc04 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -4918,6 +4918,9 @@ qemuDomainMachineNeedsFDC(const virDomainDef *def) + STRPREFIX(p, "2.2") || + STRPREFIX(p, "2.3")) + return false; ++ if (STRPREFIX(p, "rhel7.0.0") || ++ STRPREFIX(p, "rhel7.1.0")) ++ return false; + return true; + } + return false; +-- +2.9.0 + diff --git a/SOURCES/libvirt-RHEL-Add-support-for-QMP-I-O-error-reason.patch b/SOURCES/libvirt-RHEL-Add-support-for-QMP-I-O-error-reason.patch index 930adbc..f83cc40 100644 --- a/SOURCES/libvirt-RHEL-Add-support-for-QMP-I-O-error-reason.patch +++ b/SOURCES/libvirt-RHEL-Add-support-for-QMP-I-O-error-reason.patch @@ -1,5 +1,5 @@ -From 5c9c53f6c1a8223fdd65f2acb0f5db2cba0f6fd0 Mon Sep 17 00:00:00 2001 -Message-Id: <5c9c53f6c1a8223fdd65f2acb0f5db2cba0f6fd0@dist-git> +From f45c3ceef34cdc47dbf3b5694769a8282a956983 Mon Sep 17 00:00:00 2001 +Message-Id: From: Jiri Denemark Date: Thu, 9 Oct 2014 10:38:39 +0200 Subject: [PATCH] RHEL: Add support for QMP I/O error reason @@ -18,10 +18,10 @@ Signed-off-by: Jiri Denemark 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c -index fd567e4..065c7fe 100644 +index 5a65203..2890872 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c -@@ -584,7 +584,7 @@ qemuMonitorJSONHandleIOError(qemuMonitorPtr mon, virJSONValuePtr data) +@@ -592,7 +592,7 @@ qemuMonitorJSONHandleIOError(qemuMonitorPtr mon, virJSONValuePtr data) { const char *device; const char *action; @@ -30,7 +30,7 @@ index fd567e4..065c7fe 100644 bool nospc = false; int actionID; -@@ -600,8 +600,14 @@ qemuMonitorJSONHandleIOError(qemuMonitorPtr mon, virJSONValuePtr data) +@@ -608,8 +608,14 @@ qemuMonitorJSONHandleIOError(qemuMonitorPtr mon, virJSONValuePtr data) if ((device = virJSONValueObjectGetString(data, "device")) == NULL) VIR_WARN("missing device in disk io error event"); @@ -48,5 +48,5 @@ index fd567e4..065c7fe 100644 if ((actionID = qemuMonitorIOErrorActionTypeFromString(action)) < 0) { VIR_WARN("unknown disk io error action '%s'", action); -- -2.4.5 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-Fix-maxvcpus-output.patch b/SOURCES/libvirt-RHEL-Fix-maxvcpus-output.patch index 8d74501..dacf41d 100644 --- a/SOURCES/libvirt-RHEL-Fix-maxvcpus-output.patch +++ b/SOURCES/libvirt-RHEL-Fix-maxvcpus-output.patch @@ -1,5 +1,5 @@ -From 83bce1af14104615dd2945099d9d6519801d6d0f Mon Sep 17 00:00:00 2001 -Message-Id: <83bce1af14104615dd2945099d9d6519801d6d0f@dist-git> +From 14ede92edfd80dc9610f92ae6f0d925f2bc2d100 Mon Sep 17 00:00:00 2001 +Message-Id: <14ede92edfd80dc9610f92ae6f0d925f2bc2d100@dist-git> From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Wed, 17 Sep 2014 19:00:58 +0200 Subject: [PATCH] RHEL: Fix maxvcpus output @@ -15,14 +15,14 @@ https://bugzilla.redhat.com/show_bug.cgi?id=998708 Signed-off-by: Jiri Denemark --- - src/qemu/qemu_driver.c | 5 +++++ + src/util/virhostcpu.c | 5 +++++ 1 file changed, 5 insertions(+) -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index f3beebe..6dafbec 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -1264,6 +1264,11 @@ kvmGetMaxVCPUs(void) +diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c +index fed5be7..dfdc543 100644 +--- a/src/util/virhostcpu.c ++++ b/src/util/virhostcpu.c +@@ -1311,6 +1311,11 @@ virHostCPUGetKVMMaxVCPUs(void) return -1; } @@ -35,5 +35,5 @@ index f3beebe..6dafbec 100644 /* at first try KVM_CAP_MAX_VCPUS to determine the maximum count */ if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_MAX_VCPUS)) > 0) -- -2.4.5 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch b/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch index 1d73e60..d0fff31 100644 --- a/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch +++ b/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch @@ -1,5 +1,5 @@ -From c920fb815413e588dfa36da3221196762a77e6fd Mon Sep 17 00:00:00 2001 -Message-Id: +From 0c8ec3bc6be11a4043f6f4bb697fbca4bc46e448 Mon Sep 17 00:00:00 2001 +Message-Id: <0c8ec3bc6be11a4043f6f4bb697fbca4bc46e448@dist-git> From: Jiri Denemark Date: Fri, 27 Mar 2015 12:48:40 +0100 Subject: [PATCH] RHEL: Hack around changed Broadwell/Haswell CPUs @@ -24,10 +24,10 @@ Signed-off-by: Jiri Denemark 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 25a7bc6..ca14ffc 100644 +index 71e9e63..5b2f041 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c -@@ -7011,6 +7011,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, +@@ -6251,6 +6251,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, virCPUCompareResult cmp; const char *preferred; virCapsPtr caps = NULL; @@ -36,7 +36,7 @@ index 25a7bc6..ca14ffc 100644 bool compareAgainstHost = ((def->virtType == VIR_DOMAIN_VIRT_KVM || def->cpu->mode != VIR_CPU_MODE_CUSTOM) && def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH); -@@ -7171,8 +7173,27 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, +@@ -6404,8 +6406,27 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, else sign = '+'; @@ -65,25 +65,31 @@ index 25a7bc6..ca14ffc 100644 ret = 0; diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args -index f9bea62..6c11291 100644 +index d00a619..29cf688 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ --/usr/bin/qemu-kvm -S -M pc -cpu Haswell -m 214 -smp 6 \ -+/usr/bin/qemu-kvm -S -M pc -cpu Haswell,+rtm,+hle -m 214 -smp 6 \ - -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \ - none -serial none -parallel none +@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \ + -name QEMUGuest1 \ + -S \ + -M pc \ +--cpu Haswell \ ++-cpu Haswell,+rtm,+hle \ + -m 214 \ + -smp 6 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args -index f9bea62..6c11291 100644 +index d00a619..29cf688 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ --/usr/bin/qemu-kvm -S -M pc -cpu Haswell -m 214 -smp 6 \ -+/usr/bin/qemu-kvm -S -M pc -cpu Haswell,+rtm,+hle -m 214 -smp 6 \ - -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \ - none -serial none -parallel none +@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \ + -name QEMUGuest1 \ + -S \ + -M pc \ +--cpu Haswell \ ++-cpu Haswell,+rtm,+hle \ + -m 214 \ + -smp 6 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ -- -2.4.5 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-Support-virtio-disk-hotplug-in-JSON-mode.patch b/SOURCES/libvirt-RHEL-Support-virtio-disk-hotplug-in-JSON-mode.patch index 9dba2fb..f949dc4 100644 --- a/SOURCES/libvirt-RHEL-Support-virtio-disk-hotplug-in-JSON-mode.patch +++ b/SOURCES/libvirt-RHEL-Support-virtio-disk-hotplug-in-JSON-mode.patch @@ -1,7 +1,7 @@ -From b32e593db092c9c4f7c85028fe318f6b401451cb Mon Sep 17 00:00:00 2001 -Message-Id: -From: "Daniel P. Berrange" -Date: Fri, 17 Dec 2010 14:55:38 +0100 +From 167dc5464595cf08f3134514d722b75b0e20d4ac Mon Sep 17 00:00:00 2001 +Message-Id: <167dc5464595cf08f3134514d722b75b0e20d4ac@dist-git> +From: Jiri Denemark +Date: Tue, 5 Apr 2016 09:14:09 +0200 Subject: [PATCH] RHEL: Support virtio disk hotplug in JSON mode RHEL only, no upstream @@ -50,18 +50,53 @@ Conflicts: src/qemu/qemu_monitor_json.c - context; upstream doesn't try to call nonexistent drive_{add,del} QMP commands any more --- - src/qemu/qemu_monitor_json.c | 81 +++++++++++++++++++++++++++++++++++++++++++- - tests/qemuhotplugtest.c | 74 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 154 insertions(+), 1 deletion(-) + src/qemu/qemu_monitor.c | 12 +++-- + src/qemu/qemu_monitor_json.c | 106 +++++++++++++++++++++++++++++++++++++++++++ + src/qemu/qemu_monitor_json.h | 6 +++ + tests/qemuhotplugtest.c | 83 ++++++++++++++++++++++++++++++++- + 4 files changed, 201 insertions(+), 6 deletions(-) +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 1e27470..1d3d98a 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -2704,8 +2704,10 @@ qemuMonitorDriveDel(qemuMonitorPtr mon, + + QEMU_CHECK_MONITOR(mon); + +- /* there won't be a direct replacement for drive_del in QMP */ +- return qemuMonitorTextDriveDel(mon, drivestr); ++ if (mon->json) ++ return qemuMonitorJSONDriveDel(mon, drivestr); ++ else ++ return qemuMonitorTextDriveDel(mon, drivestr); + } + + +@@ -2808,8 +2810,10 @@ qemuMonitorAddDrive(qemuMonitorPtr mon, + + QEMU_CHECK_MONITOR(mon); + +- /* there won't ever be a direct QMP replacement for this function */ +- return qemuMonitorTextAddDrive(mon, drivestr); ++ if (mon->json) ++ return qemuMonitorJSONAddDrive(mon, drivestr); ++ else ++ return qemuMonitorTextAddDrive(mon, drivestr); + } + + diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c -index edfa67f..fd567e4 100644 +index 35e38a9..5a65203 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c -@@ -3474,9 +3474,54 @@ int qemuMonitorJSONDelObject(qemuMonitorPtr mon, - int qemuMonitorJSONAddDrive(qemuMonitorPtr mon, - const char *drivestr) - { +@@ -3677,6 +3677,112 @@ int qemuMonitorJSONDelObject(qemuMonitorPtr mon, + } + + ++int qemuMonitorJSONAddDrive(qemuMonitorPtr mon, ++ const char *drivestr) ++{ + int ret = -1; + virJSONValuePtr cmd; + virJSONValuePtr reply = NULL; @@ -101,9 +136,7 @@ index edfa67f..fd567e4 100644 + } + + /* Upstream approach */ - /* XXX Update to use QMP, if QMP ever adds support for drive_add */ - VIR_DEBUG("drive_add command not found, trying HMP"); -- return qemuMonitorTextAddDrive(mon, drivestr); ++ /* there won't be a direct replacement for drive_add in QMP */ + ret = qemuMonitorTextAddDrive(mon, drivestr); + +cleanup: @@ -111,16 +144,16 @@ index edfa67f..fd567e4 100644 + virJSONValueFree(cmd); + virJSONValueFree(reply); + return ret; - } - - -@@ -3484,7 +3529,37 @@ int qemuMonitorJSONDriveDel(qemuMonitorPtr mon, - const char *drivestr) - { - int ret; ++} ++ ++ ++int qemuMonitorJSONDriveDel(qemuMonitorPtr mon, ++ const char *drivestr) ++{ ++ int ret; + virJSONValuePtr cmd; + virJSONValuePtr reply = NULL; - ++ + VIR_DEBUG("drivestr=%s", drivestr); + cmd = qemuMonitorJSONMakeCommand("__com.redhat_drive_del", + "s:id", drivestr, @@ -149,25 +182,49 @@ index edfa67f..fd567e4 100644 + } + + /* Upstream approach */ - /* XXX Update to use QMP, if QMP ever adds support for drive_del */ - VIR_DEBUG("drive_del command not found, trying HMP"); - if ((ret = qemuMonitorTextDriveDel(mon, drivestr)) < 0) { -@@ -3497,6 +3572,10 @@ int qemuMonitorJSONDriveDel(qemuMonitorPtr mon, - virResetLastError(); - } - } ++ /* there won't be a direct replacement for drive_del in QMP */ ++ if ((ret = qemuMonitorTextDriveDel(mon, drivestr)) < 0) { ++ virErrorPtr err = virGetLastError(); ++ if (err && err->code == VIR_ERR_OPERATION_UNSUPPORTED) { ++ VIR_ERROR("%s", ++ _("deleting disk is not supported. " ++ "This may leak data if disk is reassigned")); ++ ret = 1; ++ virResetLastError(); ++ } ++ } + +cleanup: + virJSONValueFree(cmd); + virJSONValueFree(reply); - return ret; - } ++ return ret; ++} ++ + int qemuMonitorJSONSetDrivePassphrase(qemuMonitorPtr mon, + const char *alias, + const char *passphrase) +diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h +index 4e6f2bc..c573ca2 100644 +--- a/src/qemu/qemu_monitor_json.h ++++ b/src/qemu/qemu_monitor_json.h +@@ -229,6 +229,12 @@ int qemuMonitorJSONAddObject(qemuMonitorPtr mon, + int qemuMonitorJSONDelObject(qemuMonitorPtr mon, + const char *objalias); ++int qemuMonitorJSONAddDrive(qemuMonitorPtr mon, ++ const char *drivestr); ++ ++int qemuMonitorJSONDriveDel(qemuMonitorPtr mon, ++ const char *drivestr); ++ + int qemuMonitorJSONSetDrivePassphrase(qemuMonitorPtr mon, + const char *alias, + const char *passphrase); diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c -index 368a5e7..3b547f2 100644 +index ae57c0a..5f6b838 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c -@@ -416,6 +416,14 @@ mymain(void) +@@ -417,6 +417,14 @@ mymain(void) " }" \ "}\r\n" @@ -182,129 +239,162 @@ index 368a5e7..3b547f2 100644 DO_TEST_UPDATE("graphics-spice", "graphics-spice-nochange", false, false, NULL); DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false, "set_password", QMP_OK, "expire_password", QMP_OK); -@@ -436,56 +444,122 @@ mymain(void) +@@ -437,67 +445,135 @@ mymain(void) "chardev-remove", QMP_OK); - DO_TEST_ATTACH("hotplug-base", "disk-virtio", false, true, + DO_TEST_ATTACH("hotplug-base-live", "disk-virtio", false, true, + "__com.redhat_drive_add", QMP_NOT_FOUND, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); - DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false, + DO_TEST_DETACH("hotplug-base-live", "disk-virtio", false, false, "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); -+ DO_TEST_ATTACH("hotplug-base", "disk-virtio", false, true, ++ DO_TEST_ATTACH("hotplug-base-live", "disk-virtio", false, true, + "__com.redhat_drive_add", QMP_OK, + "device_add", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false, ++ DO_TEST_DETACH("hotplug-base-live", "disk-virtio", false, false, + "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_OK); + - DO_TEST_ATTACH_EVENT("hotplug-base", "disk-virtio", false, true, + DO_TEST_ATTACH_EVENT("hotplug-base-live", "disk-virtio", false, true, + "__com.redhat_drive_add", QMP_NOT_FOUND, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); - DO_TEST_DETACH("hotplug-base", "disk-virtio", true, true, + DO_TEST_DETACH("hotplug-base-live", "disk-virtio", true, true, "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); - DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false, + DO_TEST_DETACH("hotplug-base-live", "disk-virtio", false, false, "device_del", QMP_DEVICE_DELETED("virtio-disk4") QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); -+ DO_TEST_ATTACH_EVENT("hotplug-base", "disk-virtio", false, true, ++ DO_TEST_ATTACH_EVENT("hotplug-base-live", "disk-virtio", false, true, + "__com.redhat_drive_add", QMP_OK, + "device_add", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-virtio", true, true, ++ DO_TEST_DETACH("hotplug-base-live", "disk-virtio", true, true, + "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false, ++ DO_TEST_DETACH("hotplug-base-live", "disk-virtio", false, false, + "device_del", QMP_DEVICE_DELETED("virtio-disk4") QMP_OK, + "__com.redhat_drive_del", QMP_OK); + - DO_TEST_ATTACH("hotplug-base", "disk-usb", false, true, + DO_TEST_ATTACH("hotplug-base-live", "disk-usb", false, true, + "__com.redhat_drive_add", QMP_NOT_FOUND, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); - DO_TEST_DETACH("hotplug-base", "disk-usb", false, false, + DO_TEST_DETACH("hotplug-base-live", "disk-usb", false, false, "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); -+ DO_TEST_ATTACH("hotplug-base", "disk-usb", false, true, ++ DO_TEST_ATTACH("hotplug-base-live", "disk-usb", false, true, + "__com.redhat_drive_add", QMP_OK, + "device_add", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-usb", false, false, ++ DO_TEST_DETACH("hotplug-base-live", "disk-usb", false, false, + "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_OK); + - DO_TEST_ATTACH_EVENT("hotplug-base", "disk-usb", false, true, + DO_TEST_ATTACH_EVENT("hotplug-base-live", "disk-usb", false, true, + "__com.redhat_drive_add", QMP_NOT_FOUND, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); - DO_TEST_DETACH("hotplug-base", "disk-usb", true, true, + DO_TEST_DETACH("hotplug-base-live", "disk-usb", true, true, "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); - DO_TEST_DETACH("hotplug-base", "disk-usb", false, false, + DO_TEST_DETACH("hotplug-base-live", "disk-usb", false, false, "device_del", QMP_DEVICE_DELETED("usb-disk16") QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); -+ DO_TEST_ATTACH_EVENT("hotplug-base", "disk-usb", false, true, ++ DO_TEST_ATTACH_EVENT("hotplug-base-live", "disk-usb", false, true, + "__com.redhat_drive_add", QMP_OK, + "device_add", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-usb", true, true, ++ DO_TEST_DETACH("hotplug-base-live", "disk-usb", true, true, + "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-usb", false, false, ++ DO_TEST_DETACH("hotplug-base-live", "disk-usb", false, false, + "device_del", QMP_DEVICE_DELETED("usb-disk16") QMP_OK, + "__com.redhat_drive_del", QMP_OK); + - DO_TEST_ATTACH("hotplug-base", "disk-scsi", false, true, + DO_TEST_ATTACH("hotplug-base-live", "disk-scsi", false, true, + "__com.redhat_drive_add", QMP_NOT_FOUND, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); - DO_TEST_DETACH("hotplug-base", "disk-scsi", false, false, + DO_TEST_DETACH("hotplug-base-live", "disk-scsi", false, false, "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); -+ DO_TEST_ATTACH("hotplug-base", "disk-scsi", false, true, ++ DO_TEST_ATTACH("hotplug-base-live", "disk-scsi", false, true, + "__com.redhat_drive_add", QMP_OK, + "device_add", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-scsi", false, false, ++ DO_TEST_DETACH("hotplug-base-live", "disk-scsi", false, false, + "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_OK); + - DO_TEST_ATTACH_EVENT("hotplug-base", "disk-scsi", false, true, + DO_TEST_ATTACH_EVENT("hotplug-base-live", "disk-scsi", false, true, + "__com.redhat_drive_add", QMP_NOT_FOUND, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); - DO_TEST_DETACH("hotplug-base", "disk-scsi", true, true, + DO_TEST_DETACH("hotplug-base-live", "disk-scsi", true, true, "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); - DO_TEST_DETACH("hotplug-base", "disk-scsi", false, false, + DO_TEST_DETACH("hotplug-base-live", "disk-scsi", false, false, "device_del", QMP_DEVICE_DELETED("scsi0-0-0-5") QMP_OK, + "__com.redhat_drive_del", QMP_NOT_FOUND, "human-monitor-command", HMP("")); -+ DO_TEST_ATTACH_EVENT("hotplug-base", "disk-scsi", false, true, ++ DO_TEST_ATTACH_EVENT("hotplug-base-live", "disk-scsi", false, true, + "__com.redhat_drive_add", QMP_OK, + "device_add", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-scsi", true, true, ++ DO_TEST_DETACH("hotplug-base-live", "disk-scsi", true, true, + "device_del", QMP_OK, + "__com.redhat_drive_del", QMP_OK); -+ DO_TEST_DETACH("hotplug-base", "disk-scsi", false, false, ++ DO_TEST_DETACH("hotplug-base-live", "disk-scsi", false, false, + "device_del", QMP_DEVICE_DELETED("scsi0-0-0-5") QMP_OK, + "__com.redhat_drive_del", QMP_OK); + - virObjectUnref(driver.caps); - virObjectUnref(driver.xmlopt); - virObjectUnref(driver.config); + DO_TEST_ATTACH("hotplug-base-without-scsi-controller-live", "disk-scsi-2", false, true, + /* Four controllers added */ + "device_add", QMP_OK, + "device_add", QMP_OK, + "device_add", QMP_OK, + "device_add", QMP_OK, +- "human-monitor-command", HMP("OK\\r\\n"), + /* Disk added */ ++ "__com.redhat_drive_add", QMP_NOT_FOUND, ++ "human-monitor-command", HMP("OK\\r\\n"), + "device_add", QMP_OK); + DO_TEST_DETACH("hotplug-base-with-scsi-controller-live", "disk-scsi-2", false, false, + "device_del", QMP_OK, ++ "__com.redhat_drive_del", QMP_NOT_FOUND, + "human-monitor-command", HMP("")); + + DO_TEST_ATTACH_EVENT("hotplug-base-without-scsi-controller-live", "disk-scsi-2", false, true, +@@ -506,14 +582,17 @@ mymain(void) + "device_add", QMP_OK, + "device_add", QMP_OK, + "device_add", QMP_OK, +- "human-monitor-command", HMP("OK\\r\\n"), + /* Disk added */ ++ "__com.redhat_drive_add", QMP_NOT_FOUND, ++ "human-monitor-command", HMP("OK\\r\\n"), + "device_add", QMP_OK); + DO_TEST_DETACH("hotplug-base-with-scsi-controller-live", "disk-scsi-2", true, true, + "device_del", QMP_OK, ++ "__com.redhat_drive_del", QMP_NOT_FOUND, + "human-monitor-command", HMP("")); + DO_TEST_DETACH("hotplug-base-with-scsi-controller-live", "disk-scsi-2", false, false, + "device_del", QMP_DEVICE_DELETED("scsi3-0-5-7") QMP_OK, ++ "__com.redhat_drive_del", QMP_NOT_FOUND, + "human-monitor-command", HMP("")); + + DO_TEST_ATTACH("hotplug-base-live", "qemu-agent", false, true, -- -2.4.5 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-docs-Introduce-subsite-xsl.patch b/SOURCES/libvirt-RHEL-docs-Introduce-subsite-xsl.patch new file mode 100644 index 0000000..be16ec1 --- /dev/null +++ b/SOURCES/libvirt-RHEL-docs-Introduce-subsite-xsl.patch @@ -0,0 +1,55 @@ +From f51f13a7e9de2b5c235a4c231138fa73d67a49b8 Mon Aug 8 13:14:18 2016 +Message-Id: +From: Michal Privoznik +Date: Mon, 8 Aug 2016 13:08:51 +0200 +Subject: [PATCH] RHEL: docs: Introduce subsite.xsl + +https://bugzilla.redhat.com/show_bug.cgi?id=1365004 + +RHEL only + +The file was not being distributed (now fixed in both upstream +and downstream). However, since we are building on the top of +release that is still missing the file copy it from upstream. + +Signed-off-by: Michal Privoznik +--- + docs/subsite.xsl | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + create mode 100644 docs/subsite.xsl + +diff --git b/docs/subsite.xsl a/docs/subsite.xsl +new file mode 100644 +index 0000000..108d0d8 +--- /dev/null ++++ a/docs/subsite.xsl +@@ -0,0 +1,25 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.8.4 + + diff --git a/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch b/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch index be8a38d..2fb442d 100644 --- a/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch +++ b/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch @@ -1,5 +1,5 @@ -From e9b274bf20d24096921e09626eaec3e89b7b7767 Mon Sep 17 00:00:00 2001 -Message-Id: +From 4b78773be04078d281419b629e58b00f7e6aac26 Mon Sep 17 00:00:00 2001 +Message-Id: <4b78773be04078d281419b629e58b00f7e6aac26@dist-git> From: John Ferlan Date: Thu, 9 Jul 2015 08:28:57 -0400 Subject: [PATCH] RHEL: qemu: Add ability to set sgio values for hostdev @@ -18,18 +18,18 @@ Signed-off-by: Jiri Denemark 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index 7d317d7..aa2d1de 100644 +index 6dfa738..1d5b0ae 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c -@@ -1432,6 +1432,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) +@@ -1379,6 +1379,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) virDomainDiskDefPtr disk = NULL; virDomainHostdevDefPtr hostdev = NULL; char *sysfs_path = NULL; + char *hostdev_path = NULL; const char *path = NULL; - bool val; + int val = -1; int ret = -1; -@@ -1453,14 +1454,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) +@@ -1400,14 +1401,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) if (!qemuIsSharedHostdev(hostdev)) return 0; @@ -46,7 +46,7 @@ index 7d317d7..aa2d1de 100644 } else { return 0; } -@@ -1469,7 +1466,11 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) +@@ -1416,7 +1413,11 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) goto cleanup; /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */ @@ -59,7 +59,7 @@ index 7d317d7..aa2d1de 100644 /* Do not do anything if unpriv_sgio is not supported by the kernel and the * whitelist is enabled. But if requesting unfiltered access, always call -@@ -1486,6 +1487,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) +@@ -1429,6 +1430,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) ret = 0; cleanup: @@ -68,5 +68,5 @@ index 7d317d7..aa2d1de 100644 return ret; } -- -2.5.1 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch b/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch index 5b5ec58..c00903f 100644 --- a/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch +++ b/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch @@ -1,5 +1,5 @@ -From 4b1391cc3a879f4a82510742d0f1dc668d23de94 Mon Sep 17 00:00:00 2001 -Message-Id: <4b1391cc3a879f4a82510742d0f1dc668d23de94@dist-git> +From 47da3da96575632cc166a3e1265e4753dc9a85e8 Mon Sep 17 00:00:00 2001 +Message-Id: <47da3da96575632cc166a3e1265e4753dc9a85e8@dist-git> From: John Ferlan Date: Thu, 9 Jul 2015 08:28:58 -0400 Subject: [PATCH] RHEL: qemu: Add check for unpriv sgio for SCSI generic host @@ -22,10 +22,10 @@ Signed-off-by: Jiri Denemark 1 file changed, 15 insertions(+) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index aa2d1de..965d34d 100644 +index 1d5b0ae..49e8e8b 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c -@@ -1274,6 +1274,8 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver, +@@ -1219,6 +1219,8 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver, { char *dev_path = NULL; char *key = NULL; @@ -34,7 +34,7 @@ index aa2d1de..965d34d 100644 int ret = -1; if (!qemuIsSharedHostdev(hostdev)) -@@ -1282,6 +1284,19 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver, +@@ -1227,6 +1229,19 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver, if (!(dev_path = qemuGetHostdevPath(hostdev))) goto cleanup; @@ -55,5 +55,5 @@ index aa2d1de..965d34d 100644 goto cleanup; -- -2.5.1 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch b/SOURCES/libvirt-RHEL-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch new file mode 100644 index 0000000..ebf9028 --- /dev/null +++ b/SOURCES/libvirt-RHEL-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch @@ -0,0 +1,38 @@ +From 000869de9fabb90082dd1577610a04b545cdbf77 Mon Sep 17 00:00:00 2001 +Message-Id: <000869de9fabb90082dd1577610a04b545cdbf77@dist-git> +From: Martin Kletzander +Date: Mon, 23 Nov 2015 12:46:36 +0100 +Subject: [PATCH] RHEL: qemu: Support vhost-user-multiqueue with QEMU 2.3 + +RHEL-only + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1207692 +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1284416 + +Signed-off-by: Martin Kletzander +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_capabilities.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 206133d..9f1c0e1 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -3529,8 +3529,11 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, + virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_AARCH64_OFF); + + /* vhost-user supports multi-queue from v2.4.0 onwards, +- * but there is no way to query for that capability */ +- if (qemuCaps->version >= 2004000) ++ * but there is no way to query for that capability ++ * ++ * RHEL-only: The change was back-ported to earlier QEMU version, ++ * particularly 2.3, in BZ 1276100 */ ++ if (qemuCaps->version >= 2003000) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOSTUSER_MULTIQUEUE); + + /* Since 2.4.50 ARM virt machine supports gic-version option */ +-- +2.9.0 + diff --git a/SOURCES/libvirt-RHEL-qemu-support-relative-backing-for-RHEL-7.0.z-qemu.patch b/SOURCES/libvirt-RHEL-qemu-support-relative-backing-for-RHEL-7.0.z-qemu.patch index 6c233a6..934ac6c 100644 --- a/SOURCES/libvirt-RHEL-qemu-support-relative-backing-for-RHEL-7.0.z-qemu.patch +++ b/SOURCES/libvirt-RHEL-qemu-support-relative-backing-for-RHEL-7.0.z-qemu.patch @@ -1,5 +1,5 @@ -From 10dc4fb241e70105d5b584f7070f34d156e5e4e2 Mon Sep 17 00:00:00 2001 -Message-Id: <10dc4fb241e70105d5b584f7070f34d156e5e4e2@dist-git> +From 2c48579454f7cd49500cb03ae23973c6880ea5ea Mon Sep 17 00:00:00 2001 +Message-Id: <2c48579454f7cd49500cb03ae23973c6880ea5ea@dist-git> From: Eric Blake Date: Tue, 7 Oct 2014 17:06:17 -0600 Subject: [PATCH] RHEL: qemu: support relative backing for RHEL 7.0.z qemu @@ -25,17 +25,17 @@ Signed-off-by: Jiri Denemark 1 file changed, 1 insertion(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 27686c3..89d63e5 100644 +index 28d5321..206133d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c -@@ -1494,6 +1494,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = { +@@ -1464,6 +1464,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = { { "add-fd", QEMU_CAPS_ADD_FD }, { "nbd-server-start", QEMU_CAPS_NBD_SERVER }, { "change-backing-file", QEMU_CAPS_CHANGE_BACKING_FILE }, + { "__com.redhat_change-backing-file", QEMU_CAPS_CHANGE_BACKING_FILE }, { "rtc-reset-reinjection", QEMU_CAPS_RTC_RESET_REINJECTION }, + { "migrate-incoming", QEMU_CAPS_INCOMING_DEFER }, }; - -- -2.4.5 +2.9.0 diff --git a/SOURCES/libvirt-RHEL-screenshot-Implement-multiple-screen-support.patch b/SOURCES/libvirt-RHEL-screenshot-Implement-multiple-screen-support.patch index 299af32..63c0036 100644 --- a/SOURCES/libvirt-RHEL-screenshot-Implement-multiple-screen-support.patch +++ b/SOURCES/libvirt-RHEL-screenshot-Implement-multiple-screen-support.patch @@ -1,5 +1,5 @@ -From df75234947b6c743e08277577056fe9837659108 Mon Sep 17 00:00:00 2001 -Message-Id: +From 9e5ccc797249afe0c44232b6b0d2cae4ff7d8d21 Mon Sep 17 00:00:00 2001 +Message-Id: <9e5ccc797249afe0c44232b6b0d2cae4ff7d8d21@dist-git> From: Michal Privoznik Date: Fri, 26 Aug 2011 16:41:17 +0800 Subject: [PATCH] RHEL: screenshot: Implement multiple screen support @@ -34,10 +34,10 @@ Conflicts: 5 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 7a04e67..f3beebe 100644 +index 0507be8..7bdf329 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c -@@ -3808,6 +3808,8 @@ qemuDomainScreenshot(virDomainPtr dom, +@@ -3768,6 +3768,8 @@ qemuDomainScreenshot(virDomainPtr dom, char *ret = NULL; bool unlink_tmp = false; virQEMUDriverConfigPtr cfg = NULL; @@ -46,7 +46,7 @@ index 7a04e67..f3beebe 100644 virCheckFlags(0, NULL); -@@ -3829,12 +3831,15 @@ qemuDomainScreenshot(virDomainPtr dom, +@@ -3789,12 +3791,15 @@ qemuDomainScreenshot(virDomainPtr dom, goto endjob; } @@ -68,7 +68,7 @@ index 7a04e67..f3beebe 100644 goto endjob; } -@@ -3849,8 +3854,11 @@ qemuDomainScreenshot(virDomainPtr dom, +@@ -3809,8 +3814,11 @@ qemuDomainScreenshot(virDomainPtr dom, virSecurityManagerSetSavedStateLabel(qemu_driver->securityManager, vm->def, tmp); @@ -82,10 +82,10 @@ index 7a04e67..f3beebe 100644 goto endjob; } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c -index 93fcc7f..9c70211 100644 +index 098e654..1e27470 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c -@@ -3141,12 +3141,22 @@ qemuMonitorSendKey(qemuMonitorPtr mon, +@@ -3022,12 +3022,22 @@ qemuMonitorSendKey(qemuMonitorPtr mon, int qemuMonitorScreendump(qemuMonitorPtr mon, @@ -111,10 +111,10 @@ index 93fcc7f..9c70211 100644 return qemuMonitorJSONScreendump(mon, file); else diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h -index ec1724f..87167e3 100644 +index cb4cca8..6e4e09d 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h -@@ -754,7 +754,8 @@ int qemuMonitorArbitraryCommand(qemuMonitorPtr mon, +@@ -759,7 +759,8 @@ int qemuMonitorArbitraryCommand(qemuMonitorPtr mon, int qemuMonitorInjectNMI(qemuMonitorPtr mon); int qemuMonitorScreendump(qemuMonitorPtr mon, @@ -125,10 +125,10 @@ index ec1724f..87167e3 100644 int qemuMonitorSendKey(qemuMonitorPtr mon, unsigned int holdtime, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c -index f0cfc57..edfa67f 100644 +index bb426dc..35e38a9 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c -@@ -3959,6 +3959,30 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon, +@@ -4155,6 +4155,30 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon, return ret; } @@ -160,10 +160,10 @@ index f0cfc57..edfa67f 100644 const char *file) { diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h -index b76d85b..399a38d 100644 +index 37a739e..4e6f2bc 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h -@@ -291,6 +291,10 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon, +@@ -287,6 +287,10 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon, unsigned int *keycodes, unsigned int nkeycodes); @@ -175,5 +175,5 @@ index b76d85b..399a38d 100644 const char *file); -- -2.4.5 +2.9.0 diff --git a/SOURCES/libvirt-Renamed-deconfigured-cpus-to-allow-make-dist.patch b/SOURCES/libvirt-Renamed-deconfigured-cpus-to-allow-make-dist.patch deleted file mode 100644 index f7f5813..0000000 --- a/SOURCES/libvirt-Renamed-deconfigured-cpus-to-allow-make-dist.patch +++ /dev/null @@ -1,7617 +0,0 @@ -From b6108536a1acd8b2c3a38d47d91f10b2d1dd3d3b Mon Sep 17 00:00:00 2001 -Message-Id: -From: Daniel Veillard -Date: Wed, 5 Aug 2015 18:18:33 +0200 -Subject: [PATCH] Renamed deconfigured-cpus to allow make dist - -Simplest was just to rename that extra long name and move files in git -accordingly - -(cherry picked from commit 2094d01e2f54e5774c0d0d380e83154b42ea65be) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - .../nodeinfodata/linux-deconf-cpus/cpu/cpu0/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu1/online | 1 + - .../linux-deconf-cpus/cpu/cpu10/online | 1 + - .../linux-deconf-cpus/cpu/cpu100/online | 1 + - .../linux-deconf-cpus/cpu/cpu101/online | 1 + - .../linux-deconf-cpus/cpu/cpu102/online | 1 + - .../linux-deconf-cpus/cpu/cpu103/online | 1 + - .../linux-deconf-cpus/cpu/cpu104/online | 1 + - .../linux-deconf-cpus/cpu/cpu104/topology/core_id | 1 + - .../cpu/cpu104/topology/core_siblings | 1 + - .../cpu/cpu104/topology/core_siblings_list | 1 + - .../cpu/cpu104/topology/physical_package_id | 1 + - .../cpu/cpu104/topology/thread_siblings | 1 + - .../cpu/cpu104/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu105/online | 1 + - .../linux-deconf-cpus/cpu/cpu106/online | 1 + - .../linux-deconf-cpus/cpu/cpu107/online | 1 + - .../linux-deconf-cpus/cpu/cpu108/online | 1 + - .../linux-deconf-cpus/cpu/cpu109/online | 1 + - .../linux-deconf-cpus/cpu/cpu11/online | 1 + - .../linux-deconf-cpus/cpu/cpu110/online | 1 + - .../linux-deconf-cpus/cpu/cpu111/online | 1 + - .../linux-deconf-cpus/cpu/cpu112/online | 1 + - .../linux-deconf-cpus/cpu/cpu112/topology/core_id | 1 + - .../cpu/cpu112/topology/core_siblings | 1 + - .../cpu/cpu112/topology/core_siblings_list | 1 + - .../cpu/cpu112/topology/physical_package_id | 1 + - .../cpu/cpu112/topology/thread_siblings | 1 + - .../cpu/cpu112/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu113/online | 1 + - .../linux-deconf-cpus/cpu/cpu114/online | 1 + - .../linux-deconf-cpus/cpu/cpu115/online | 1 + - .../linux-deconf-cpus/cpu/cpu116/online | 1 + - .../linux-deconf-cpus/cpu/cpu117/online | 1 + - .../linux-deconf-cpus/cpu/cpu118/online | 1 + - .../linux-deconf-cpus/cpu/cpu119/online | 1 + - .../linux-deconf-cpus/cpu/cpu12/online | 1 + - .../linux-deconf-cpus/cpu/cpu120/online | 1 + - .../linux-deconf-cpus/cpu/cpu120/topology/core_id | 1 + - .../cpu/cpu120/topology/core_siblings | 1 + - .../cpu/cpu120/topology/core_siblings_list | 1 + - .../cpu/cpu120/topology/physical_package_id | 1 + - .../cpu/cpu120/topology/thread_siblings | 1 + - .../cpu/cpu120/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu121/online | 1 + - .../linux-deconf-cpus/cpu/cpu122/online | 1 + - .../linux-deconf-cpus/cpu/cpu123/online | 1 + - .../linux-deconf-cpus/cpu/cpu124/online | 1 + - .../linux-deconf-cpus/cpu/cpu125/online | 1 + - .../linux-deconf-cpus/cpu/cpu126/online | 1 + - .../linux-deconf-cpus/cpu/cpu127/online | 1 + - .../linux-deconf-cpus/cpu/cpu128/online | 1 + - .../linux-deconf-cpus/cpu/cpu128/topology/core_id | 1 + - .../cpu/cpu128/topology/core_siblings | 1 + - .../cpu/cpu128/topology/core_siblings_list | 1 + - .../cpu/cpu128/topology/physical_package_id | 1 + - .../cpu/cpu128/topology/thread_siblings | 1 + - .../cpu/cpu128/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu129/online | 1 + - .../linux-deconf-cpus/cpu/cpu13/online | 1 + - .../linux-deconf-cpus/cpu/cpu130/online | 1 + - .../linux-deconf-cpus/cpu/cpu131/online | 1 + - .../linux-deconf-cpus/cpu/cpu132/online | 1 + - .../linux-deconf-cpus/cpu/cpu133/online | 1 + - .../linux-deconf-cpus/cpu/cpu134/online | 1 + - .../linux-deconf-cpus/cpu/cpu135/online | 1 + - .../linux-deconf-cpus/cpu/cpu136/online | 1 + - .../linux-deconf-cpus/cpu/cpu136/topology/core_id | 1 + - .../cpu/cpu136/topology/core_siblings | 1 + - .../cpu/cpu136/topology/core_siblings_list | 1 + - .../cpu/cpu136/topology/physical_package_id | 1 + - .../cpu/cpu136/topology/thread_siblings | 1 + - .../cpu/cpu136/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu137/online | 1 + - .../linux-deconf-cpus/cpu/cpu138/online | 1 + - .../linux-deconf-cpus/cpu/cpu139/online | 1 + - .../linux-deconf-cpus/cpu/cpu14/online | 1 + - .../linux-deconf-cpus/cpu/cpu140/online | 1 + - .../linux-deconf-cpus/cpu/cpu141/online | 1 + - .../linux-deconf-cpus/cpu/cpu142/online | 1 + - .../linux-deconf-cpus/cpu/cpu143/online | 1 + - .../linux-deconf-cpus/cpu/cpu144/online | 1 + - .../linux-deconf-cpus/cpu/cpu145/online | 1 + - .../linux-deconf-cpus/cpu/cpu146/online | 1 + - .../linux-deconf-cpus/cpu/cpu147/online | 1 + - .../linux-deconf-cpus/cpu/cpu148/online | 1 + - .../linux-deconf-cpus/cpu/cpu149/online | 1 + - .../linux-deconf-cpus/cpu/cpu15/online | 1 + - .../linux-deconf-cpus/cpu/cpu150/online | 1 + - .../linux-deconf-cpus/cpu/cpu151/online | 1 + - .../linux-deconf-cpus/cpu/cpu152/online | 1 + - .../linux-deconf-cpus/cpu/cpu153/online | 1 + - .../linux-deconf-cpus/cpu/cpu154/online | 1 + - .../linux-deconf-cpus/cpu/cpu155/online | 1 + - .../linux-deconf-cpus/cpu/cpu156/online | 1 + - .../linux-deconf-cpus/cpu/cpu157/online | 1 + - .../linux-deconf-cpus/cpu/cpu158/online | 1 + - .../linux-deconf-cpus/cpu/cpu159/online | 1 + - .../linux-deconf-cpus/cpu/cpu16/online | 1 + - .../linux-deconf-cpus/cpu/cpu16/topology/core_id | 1 + - .../cpu/cpu16/topology/core_siblings | 1 + - .../cpu/cpu16/topology/core_siblings_list | 1 + - .../cpu/cpu16/topology/physical_package_id | 1 + - .../cpu/cpu16/topology/thread_siblings | 1 + - .../cpu/cpu16/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu17/online | 1 + - .../linux-deconf-cpus/cpu/cpu18/online | 1 + - .../linux-deconf-cpus/cpu/cpu19/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu2/online | 1 + - .../linux-deconf-cpus/cpu/cpu20/online | 1 + - .../linux-deconf-cpus/cpu/cpu21/online | 1 + - .../linux-deconf-cpus/cpu/cpu22/online | 1 + - .../linux-deconf-cpus/cpu/cpu23/online | 1 + - .../linux-deconf-cpus/cpu/cpu24/online | 1 + - .../linux-deconf-cpus/cpu/cpu24/topology/core_id | 1 + - .../cpu/cpu24/topology/core_siblings | 1 + - .../cpu/cpu24/topology/core_siblings_list | 1 + - .../cpu/cpu24/topology/physical_package_id | 1 + - .../cpu/cpu24/topology/thread_siblings | 1 + - .../cpu/cpu24/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu25/online | 1 + - .../linux-deconf-cpus/cpu/cpu26/online | 1 + - .../linux-deconf-cpus/cpu/cpu27/online | 1 + - .../linux-deconf-cpus/cpu/cpu28/online | 1 + - .../linux-deconf-cpus/cpu/cpu29/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu3/online | 1 + - .../linux-deconf-cpus/cpu/cpu30/online | 1 + - .../linux-deconf-cpus/cpu/cpu31/online | 1 + - .../linux-deconf-cpus/cpu/cpu32/online | 1 + - .../linux-deconf-cpus/cpu/cpu33/online | 1 + - .../linux-deconf-cpus/cpu/cpu34/online | 1 + - .../linux-deconf-cpus/cpu/cpu35/online | 1 + - .../linux-deconf-cpus/cpu/cpu36/online | 1 + - .../linux-deconf-cpus/cpu/cpu37/online | 1 + - .../linux-deconf-cpus/cpu/cpu38/online | 1 + - .../linux-deconf-cpus/cpu/cpu39/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu4/online | 1 + - .../linux-deconf-cpus/cpu/cpu40/online | 1 + - .../linux-deconf-cpus/cpu/cpu40/topology/core_id | 1 + - .../cpu/cpu40/topology/core_siblings | 1 + - .../cpu/cpu40/topology/core_siblings_list | 1 + - .../cpu/cpu40/topology/physical_package_id | 1 + - .../cpu/cpu40/topology/thread_siblings | 1 + - .../cpu/cpu40/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu41/online | 1 + - .../linux-deconf-cpus/cpu/cpu42/online | 1 + - .../linux-deconf-cpus/cpu/cpu43/online | 1 + - .../linux-deconf-cpus/cpu/cpu44/online | 1 + - .../linux-deconf-cpus/cpu/cpu45/online | 1 + - .../linux-deconf-cpus/cpu/cpu46/online | 1 + - .../linux-deconf-cpus/cpu/cpu47/online | 1 + - .../linux-deconf-cpus/cpu/cpu48/online | 1 + - .../linux-deconf-cpus/cpu/cpu48/topology/core_id | 1 + - .../cpu/cpu48/topology/core_siblings | 1 + - .../cpu/cpu48/topology/core_siblings_list | 1 + - .../cpu/cpu48/topology/physical_package_id | 1 + - .../cpu/cpu48/topology/thread_siblings | 1 + - .../cpu/cpu48/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu49/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu5/online | 1 + - .../linux-deconf-cpus/cpu/cpu50/online | 1 + - .../linux-deconf-cpus/cpu/cpu51/online | 1 + - .../linux-deconf-cpus/cpu/cpu52/online | 1 + - .../linux-deconf-cpus/cpu/cpu53/online | 1 + - .../linux-deconf-cpus/cpu/cpu54/online | 1 + - .../linux-deconf-cpus/cpu/cpu55/online | 1 + - .../linux-deconf-cpus/cpu/cpu56/online | 1 + - .../linux-deconf-cpus/cpu/cpu57/online | 1 + - .../linux-deconf-cpus/cpu/cpu58/online | 1 + - .../linux-deconf-cpus/cpu/cpu59/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu6/online | 1 + - .../linux-deconf-cpus/cpu/cpu60/online | 1 + - .../linux-deconf-cpus/cpu/cpu61/online | 1 + - .../linux-deconf-cpus/cpu/cpu62/online | 1 + - .../linux-deconf-cpus/cpu/cpu63/online | 1 + - .../linux-deconf-cpus/cpu/cpu64/online | 1 + - .../linux-deconf-cpus/cpu/cpu65/online | 1 + - .../linux-deconf-cpus/cpu/cpu66/online | 1 + - .../linux-deconf-cpus/cpu/cpu67/online | 1 + - .../linux-deconf-cpus/cpu/cpu68/online | 1 + - .../linux-deconf-cpus/cpu/cpu69/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu7/online | 1 + - .../linux-deconf-cpus/cpu/cpu70/online | 1 + - .../linux-deconf-cpus/cpu/cpu71/online | 1 + - .../linux-deconf-cpus/cpu/cpu72/online | 1 + - .../linux-deconf-cpus/cpu/cpu72/topology/core_id | 1 + - .../cpu/cpu72/topology/core_siblings | 1 + - .../cpu/cpu72/topology/core_siblings_list | 1 + - .../cpu/cpu72/topology/physical_package_id | 1 + - .../cpu/cpu72/topology/thread_siblings | 1 + - .../cpu/cpu72/topology/thread_siblings_list | 1 + - .../linux-deconf-cpus/cpu/cpu73/online | 1 + - .../linux-deconf-cpus/cpu/cpu74/online | 1 + - .../linux-deconf-cpus/cpu/cpu75/online | 1 + - .../linux-deconf-cpus/cpu/cpu76/online | 1 + - .../linux-deconf-cpus/cpu/cpu77/online | 1 + - .../linux-deconf-cpus/cpu/cpu78/online | 1 + - .../linux-deconf-cpus/cpu/cpu79/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu8/online | 1 + - .../linux-deconf-cpus/cpu/cpu80/online | 1 + - .../linux-deconf-cpus/cpu/cpu81/online | 1 + - .../linux-deconf-cpus/cpu/cpu82/online | 1 + - .../linux-deconf-cpus/cpu/cpu83/online | 1 + - .../linux-deconf-cpus/cpu/cpu84/online | 1 + - .../linux-deconf-cpus/cpu/cpu85/online | 1 + - .../linux-deconf-cpus/cpu/cpu86/online | 1 + - .../linux-deconf-cpus/cpu/cpu87/online | 1 + - .../linux-deconf-cpus/cpu/cpu88/online | 1 + - .../linux-deconf-cpus/cpu/cpu89/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/cpu9/online | 1 + - .../linux-deconf-cpus/cpu/cpu90/online | 1 + - .../linux-deconf-cpus/cpu/cpu91/online | 1 + - .../linux-deconf-cpus/cpu/cpu92/online | 1 + - .../linux-deconf-cpus/cpu/cpu93/online | 1 + - .../linux-deconf-cpus/cpu/cpu94/online | 1 + - .../linux-deconf-cpus/cpu/cpu95/online | 1 + - .../linux-deconf-cpus/cpu/cpu96/online | 1 + - .../linux-deconf-cpus/cpu/cpu97/online | 1 + - .../linux-deconf-cpus/cpu/cpu98/online | 1 + - .../linux-deconf-cpus/cpu/cpu99/online | 1 + - .../nodeinfodata/linux-deconf-cpus/cpu/kernel_max | 1 + - tests/nodeinfodata/linux-deconf-cpus/cpu/offline | 1 + - tests/nodeinfodata/linux-deconf-cpus/cpu/online | 1 + - tests/nodeinfodata/linux-deconf-cpus/cpu/possible | 1 + - tests/nodeinfodata/linux-deconf-cpus/cpu/present | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu0 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu1 | 1 + - .../linux-deconf-cpus/node/node0/cpu10 | 1 + - .../linux-deconf-cpus/node/node0/cpu100 | 1 + - .../linux-deconf-cpus/node/node0/cpu101 | 1 + - .../linux-deconf-cpus/node/node0/cpu102 | 1 + - .../linux-deconf-cpus/node/node0/cpu103 | 1 + - .../linux-deconf-cpus/node/node0/cpu11 | 1 + - .../linux-deconf-cpus/node/node0/cpu12 | 1 + - .../linux-deconf-cpus/node/node0/cpu13 | 1 + - .../linux-deconf-cpus/node/node0/cpu14 | 1 + - .../linux-deconf-cpus/node/node0/cpu144 | 1 + - .../linux-deconf-cpus/node/node0/cpu145 | 1 + - .../linux-deconf-cpus/node/node0/cpu146 | 1 + - .../linux-deconf-cpus/node/node0/cpu147 | 1 + - .../linux-deconf-cpus/node/node0/cpu148 | 1 + - .../linux-deconf-cpus/node/node0/cpu149 | 1 + - .../linux-deconf-cpus/node/node0/cpu15 | 1 + - .../linux-deconf-cpus/node/node0/cpu150 | 1 + - .../linux-deconf-cpus/node/node0/cpu151 | 1 + - .../linux-deconf-cpus/node/node0/cpu152 | 1 + - .../linux-deconf-cpus/node/node0/cpu153 | 1 + - .../linux-deconf-cpus/node/node0/cpu154 | 1 + - .../linux-deconf-cpus/node/node0/cpu155 | 1 + - .../linux-deconf-cpus/node/node0/cpu156 | 1 + - .../linux-deconf-cpus/node/node0/cpu157 | 1 + - .../linux-deconf-cpus/node/node0/cpu158 | 1 + - .../linux-deconf-cpus/node/node0/cpu159 | 1 + - .../linux-deconf-cpus/node/node0/cpu16 | 1 + - .../linux-deconf-cpus/node/node0/cpu17 | 1 + - .../linux-deconf-cpus/node/node0/cpu18 | 1 + - .../linux-deconf-cpus/node/node0/cpu19 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu2 | 1 + - .../linux-deconf-cpus/node/node0/cpu20 | 1 + - .../linux-deconf-cpus/node/node0/cpu21 | 1 + - .../linux-deconf-cpus/node/node0/cpu22 | 1 + - .../linux-deconf-cpus/node/node0/cpu23 | 1 + - .../linux-deconf-cpus/node/node0/cpu24 | 1 + - .../linux-deconf-cpus/node/node0/cpu25 | 1 + - .../linux-deconf-cpus/node/node0/cpu26 | 1 + - .../linux-deconf-cpus/node/node0/cpu27 | 1 + - .../linux-deconf-cpus/node/node0/cpu28 | 1 + - .../linux-deconf-cpus/node/node0/cpu29 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu3 | 1 + - .../linux-deconf-cpus/node/node0/cpu30 | 1 + - .../linux-deconf-cpus/node/node0/cpu31 | 1 + - .../linux-deconf-cpus/node/node0/cpu32 | 1 + - .../linux-deconf-cpus/node/node0/cpu33 | 1 + - .../linux-deconf-cpus/node/node0/cpu34 | 1 + - .../linux-deconf-cpus/node/node0/cpu35 | 1 + - .../linux-deconf-cpus/node/node0/cpu36 | 1 + - .../linux-deconf-cpus/node/node0/cpu37 | 1 + - .../linux-deconf-cpus/node/node0/cpu38 | 1 + - .../linux-deconf-cpus/node/node0/cpu39 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu4 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu5 | 1 + - .../linux-deconf-cpus/node/node0/cpu56 | 1 + - .../linux-deconf-cpus/node/node0/cpu57 | 1 + - .../linux-deconf-cpus/node/node0/cpu58 | 1 + - .../linux-deconf-cpus/node/node0/cpu59 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu6 | 1 + - .../linux-deconf-cpus/node/node0/cpu60 | 1 + - .../linux-deconf-cpus/node/node0/cpu61 | 1 + - .../linux-deconf-cpus/node/node0/cpu62 | 1 + - .../linux-deconf-cpus/node/node0/cpu63 | 1 + - .../linux-deconf-cpus/node/node0/cpu64 | 1 + - .../linux-deconf-cpus/node/node0/cpu65 | 1 + - .../linux-deconf-cpus/node/node0/cpu66 | 1 + - .../linux-deconf-cpus/node/node0/cpu67 | 1 + - .../linux-deconf-cpus/node/node0/cpu68 | 1 + - .../linux-deconf-cpus/node/node0/cpu69 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu7 | 1 + - .../linux-deconf-cpus/node/node0/cpu70 | 1 + - .../linux-deconf-cpus/node/node0/cpu71 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu8 | 1 + - .../linux-deconf-cpus/node/node0/cpu80 | 1 + - .../linux-deconf-cpus/node/node0/cpu81 | 1 + - .../linux-deconf-cpus/node/node0/cpu82 | 1 + - .../linux-deconf-cpus/node/node0/cpu83 | 1 + - .../linux-deconf-cpus/node/node0/cpu84 | 1 + - .../linux-deconf-cpus/node/node0/cpu85 | 1 + - .../linux-deconf-cpus/node/node0/cpu86 | 1 + - .../linux-deconf-cpus/node/node0/cpu87 | 1 + - .../linux-deconf-cpus/node/node0/cpu88 | 1 + - .../linux-deconf-cpus/node/node0/cpu89 | 1 + - .../nodeinfodata/linux-deconf-cpus/node/node0/cpu9 | 1 + - .../linux-deconf-cpus/node/node0/cpu90 | 1 + - .../linux-deconf-cpus/node/node0/cpu91 | 1 + - .../linux-deconf-cpus/node/node0/cpu92 | 1 + - .../linux-deconf-cpus/node/node0/cpu93 | 1 + - .../linux-deconf-cpus/node/node0/cpu94 | 1 + - .../linux-deconf-cpus/node/node0/cpu95 | 1 + - .../linux-deconf-cpus/node/node0/cpu96 | 1 + - .../linux-deconf-cpus/node/node0/cpu97 | 1 + - .../linux-deconf-cpus/node/node0/cpu98 | 1 + - .../linux-deconf-cpus/node/node0/cpu99 | 1 + - .../linux-deconf-cpus/node/node0/meminfo | 29 ++++++++++++++++++++++ - .../linux-deconf-cpus/node/node1/cpu40 | 1 + - .../linux-deconf-cpus/node/node1/cpu41 | 1 + - .../linux-deconf-cpus/node/node1/cpu42 | 1 + - .../linux-deconf-cpus/node/node1/cpu43 | 1 + - .../linux-deconf-cpus/node/node1/cpu44 | 1 + - .../linux-deconf-cpus/node/node1/cpu45 | 1 + - .../linux-deconf-cpus/node/node1/cpu46 | 1 + - .../linux-deconf-cpus/node/node1/cpu47 | 1 + - .../linux-deconf-cpus/node/node1/cpu48 | 1 + - .../linux-deconf-cpus/node/node1/cpu49 | 1 + - .../linux-deconf-cpus/node/node1/cpu50 | 1 + - .../linux-deconf-cpus/node/node1/cpu51 | 1 + - .../linux-deconf-cpus/node/node1/cpu52 | 1 + - .../linux-deconf-cpus/node/node1/cpu53 | 1 + - .../linux-deconf-cpus/node/node1/cpu54 | 1 + - .../linux-deconf-cpus/node/node1/cpu55 | 1 + - .../linux-deconf-cpus/node/node1/cpu72 | 1 + - .../linux-deconf-cpus/node/node1/cpu73 | 1 + - .../linux-deconf-cpus/node/node1/cpu74 | 1 + - .../linux-deconf-cpus/node/node1/cpu75 | 1 + - .../linux-deconf-cpus/node/node1/cpu76 | 1 + - .../linux-deconf-cpus/node/node1/cpu77 | 1 + - .../linux-deconf-cpus/node/node1/cpu78 | 1 + - .../linux-deconf-cpus/node/node1/cpu79 | 1 + - .../linux-deconf-cpus/node/node1/meminfo | 29 ++++++++++++++++++++++ - .../linux-deconf-cpus/node/node16/cpu104 | 1 + - .../linux-deconf-cpus/node/node16/cpu105 | 1 + - .../linux-deconf-cpus/node/node16/cpu106 | 1 + - .../linux-deconf-cpus/node/node16/cpu107 | 1 + - .../linux-deconf-cpus/node/node16/cpu108 | 1 + - .../linux-deconf-cpus/node/node16/cpu109 | 1 + - .../linux-deconf-cpus/node/node16/cpu110 | 1 + - .../linux-deconf-cpus/node/node16/cpu111 | 1 + - .../linux-deconf-cpus/node/node16/cpu112 | 1 + - .../linux-deconf-cpus/node/node16/cpu113 | 1 + - .../linux-deconf-cpus/node/node16/cpu114 | 1 + - .../linux-deconf-cpus/node/node16/cpu115 | 1 + - .../linux-deconf-cpus/node/node16/cpu116 | 1 + - .../linux-deconf-cpus/node/node16/cpu117 | 1 + - .../linux-deconf-cpus/node/node16/cpu118 | 1 + - .../linux-deconf-cpus/node/node16/cpu119 | 1 + - .../linux-deconf-cpus/node/node16/meminfo | 29 ++++++++++++++++++++++ - .../linux-deconf-cpus/node/node17/cpu120 | 1 + - .../linux-deconf-cpus/node/node17/cpu121 | 1 + - .../linux-deconf-cpus/node/node17/cpu122 | 1 + - .../linux-deconf-cpus/node/node17/cpu123 | 1 + - .../linux-deconf-cpus/node/node17/cpu124 | 1 + - .../linux-deconf-cpus/node/node17/cpu125 | 1 + - .../linux-deconf-cpus/node/node17/cpu126 | 1 + - .../linux-deconf-cpus/node/node17/cpu127 | 1 + - .../linux-deconf-cpus/node/node17/cpu128 | 1 + - .../linux-deconf-cpus/node/node17/cpu129 | 1 + - .../linux-deconf-cpus/node/node17/cpu130 | 1 + - .../linux-deconf-cpus/node/node17/cpu131 | 1 + - .../linux-deconf-cpus/node/node17/cpu132 | 1 + - .../linux-deconf-cpus/node/node17/cpu133 | 1 + - .../linux-deconf-cpus/node/node17/cpu134 | 1 + - .../linux-deconf-cpus/node/node17/cpu135 | 1 + - .../linux-deconf-cpus/node/node17/cpu136 | 1 + - .../linux-deconf-cpus/node/node17/cpu137 | 1 + - .../linux-deconf-cpus/node/node17/cpu138 | 1 + - .../linux-deconf-cpus/node/node17/cpu139 | 1 + - .../linux-deconf-cpus/node/node17/cpu140 | 1 + - .../linux-deconf-cpus/node/node17/cpu141 | 1 + - .../linux-deconf-cpus/node/node17/cpu142 | 1 + - .../linux-deconf-cpus/node/node17/cpu143 | 1 + - .../linux-deconf-cpus/node/node17/meminfo | 29 ++++++++++++++++++++++ - tests/nodeinfodata/linux-deconf-cpus/node/online | 1 + - tests/nodeinfodata/linux-deconf-cpus/node/possible | 1 + - .../linux-deconfigured-cpus/cpu/cpu0/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu1/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu10/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu100/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu101/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu102/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu103/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu104/online | 1 - - .../cpu/cpu104/topology/core_id | 1 - - .../cpu/cpu104/topology/core_siblings | 1 - - .../cpu/cpu104/topology/core_siblings_list | 1 - - .../cpu/cpu104/topology/physical_package_id | 1 - - .../cpu/cpu104/topology/thread_siblings | 1 - - .../cpu/cpu104/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu105/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu106/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu107/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu108/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu109/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu11/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu110/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu111/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu112/online | 1 - - .../cpu/cpu112/topology/core_id | 1 - - .../cpu/cpu112/topology/core_siblings | 1 - - .../cpu/cpu112/topology/core_siblings_list | 1 - - .../cpu/cpu112/topology/physical_package_id | 1 - - .../cpu/cpu112/topology/thread_siblings | 1 - - .../cpu/cpu112/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu113/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu114/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu115/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu116/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu117/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu118/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu119/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu12/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu120/online | 1 - - .../cpu/cpu120/topology/core_id | 1 - - .../cpu/cpu120/topology/core_siblings | 1 - - .../cpu/cpu120/topology/core_siblings_list | 1 - - .../cpu/cpu120/topology/physical_package_id | 1 - - .../cpu/cpu120/topology/thread_siblings | 1 - - .../cpu/cpu120/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu121/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu122/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu123/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu124/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu125/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu126/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu127/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu128/online | 1 - - .../cpu/cpu128/topology/core_id | 1 - - .../cpu/cpu128/topology/core_siblings | 1 - - .../cpu/cpu128/topology/core_siblings_list | 1 - - .../cpu/cpu128/topology/physical_package_id | 1 - - .../cpu/cpu128/topology/thread_siblings | 1 - - .../cpu/cpu128/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu129/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu13/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu130/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu131/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu132/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu133/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu134/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu135/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu136/online | 1 - - .../cpu/cpu136/topology/core_id | 1 - - .../cpu/cpu136/topology/core_siblings | 1 - - .../cpu/cpu136/topology/core_siblings_list | 1 - - .../cpu/cpu136/topology/physical_package_id | 1 - - .../cpu/cpu136/topology/thread_siblings | 1 - - .../cpu/cpu136/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu137/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu138/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu139/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu14/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu140/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu141/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu142/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu143/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu144/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu145/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu146/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu147/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu148/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu149/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu15/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu150/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu151/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu152/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu153/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu154/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu155/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu156/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu157/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu158/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu159/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu16/online | 1 - - .../cpu/cpu16/topology/core_id | 1 - - .../cpu/cpu16/topology/core_siblings | 1 - - .../cpu/cpu16/topology/core_siblings_list | 1 - - .../cpu/cpu16/topology/physical_package_id | 1 - - .../cpu/cpu16/topology/thread_siblings | 1 - - .../cpu/cpu16/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu17/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu18/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu19/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu2/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu20/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu21/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu22/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu23/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu24/online | 1 - - .../cpu/cpu24/topology/core_id | 1 - - .../cpu/cpu24/topology/core_siblings | 1 - - .../cpu/cpu24/topology/core_siblings_list | 1 - - .../cpu/cpu24/topology/physical_package_id | 1 - - .../cpu/cpu24/topology/thread_siblings | 1 - - .../cpu/cpu24/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu25/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu26/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu27/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu28/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu29/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu3/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu30/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu31/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu32/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu33/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu34/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu35/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu36/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu37/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu38/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu39/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu4/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu40/online | 1 - - .../cpu/cpu40/topology/core_id | 1 - - .../cpu/cpu40/topology/core_siblings | 1 - - .../cpu/cpu40/topology/core_siblings_list | 1 - - .../cpu/cpu40/topology/physical_package_id | 1 - - .../cpu/cpu40/topology/thread_siblings | 1 - - .../cpu/cpu40/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu41/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu42/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu43/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu44/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu45/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu46/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu47/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu48/online | 1 - - .../cpu/cpu48/topology/core_id | 1 - - .../cpu/cpu48/topology/core_siblings | 1 - - .../cpu/cpu48/topology/core_siblings_list | 1 - - .../cpu/cpu48/topology/physical_package_id | 1 - - .../cpu/cpu48/topology/thread_siblings | 1 - - .../cpu/cpu48/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu49/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu5/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu50/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu51/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu52/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu53/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu54/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu55/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu56/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu57/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu58/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu59/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu6/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu60/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu61/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu62/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu63/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu64/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu65/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu66/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu67/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu68/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu69/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu7/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu70/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu71/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu72/online | 1 - - .../cpu/cpu72/topology/core_id | 1 - - .../cpu/cpu72/topology/core_siblings | 1 - - .../cpu/cpu72/topology/core_siblings_list | 1 - - .../cpu/cpu72/topology/physical_package_id | 1 - - .../cpu/cpu72/topology/thread_siblings | 1 - - .../cpu/cpu72/topology/thread_siblings_list | 1 - - .../linux-deconfigured-cpus/cpu/cpu73/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu74/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu75/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu76/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu77/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu78/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu79/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu8/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu80/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu81/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu82/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu83/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu84/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu85/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu86/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu87/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu88/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu89/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu9/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu90/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu91/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu92/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu93/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu94/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu95/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu96/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu97/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu98/online | 1 - - .../linux-deconfigured-cpus/cpu/cpu99/online | 1 - - .../linux-deconfigured-cpus/cpu/kernel_max | 1 - - .../linux-deconfigured-cpus/cpu/offline | 1 - - .../linux-deconfigured-cpus/cpu/online | 1 - - .../linux-deconfigured-cpus/cpu/possible | 1 - - .../linux-deconfigured-cpus/cpu/present | 1 - - .../linux-deconfigured-cpus/node/node0/cpu0 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu1 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu10 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu100 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu101 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu102 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu103 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu11 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu12 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu13 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu14 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu144 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu145 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu146 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu147 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu148 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu149 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu15 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu150 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu151 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu152 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu153 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu154 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu155 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu156 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu157 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu158 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu159 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu16 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu17 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu18 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu19 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu2 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu20 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu21 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu22 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu23 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu24 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu25 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu26 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu27 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu28 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu29 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu3 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu30 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu31 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu32 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu33 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu34 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu35 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu36 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu37 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu38 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu39 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu4 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu5 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu56 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu57 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu58 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu59 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu6 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu60 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu61 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu62 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu63 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu64 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu65 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu66 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu67 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu68 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu69 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu7 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu70 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu71 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu8 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu80 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu81 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu82 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu83 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu84 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu85 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu86 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu87 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu88 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu89 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu9 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu90 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu91 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu92 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu93 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu94 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu95 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu96 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu97 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu98 | 1 - - .../linux-deconfigured-cpus/node/node0/cpu99 | 1 - - .../linux-deconfigured-cpus/node/node0/meminfo | 29 ---------------------- - .../linux-deconfigured-cpus/node/node1/cpu40 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu41 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu42 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu43 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu44 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu45 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu46 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu47 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu48 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu49 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu50 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu51 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu52 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu53 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu54 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu55 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu72 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu73 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu74 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu75 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu76 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu77 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu78 | 1 - - .../linux-deconfigured-cpus/node/node1/cpu79 | 1 - - .../linux-deconfigured-cpus/node/node1/meminfo | 29 ---------------------- - .../linux-deconfigured-cpus/node/node16/cpu104 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu105 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu106 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu107 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu108 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu109 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu110 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu111 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu112 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu113 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu114 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu115 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu116 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu117 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu118 | 1 - - .../linux-deconfigured-cpus/node/node16/cpu119 | 1 - - .../linux-deconfigured-cpus/node/node16/meminfo | 29 ---------------------- - .../linux-deconfigured-cpus/node/node17/cpu120 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu121 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu122 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu123 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu124 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu125 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu126 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu127 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu128 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu129 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu130 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu131 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu132 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu133 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu134 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu135 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu136 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu137 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu138 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu139 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu140 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu141 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu142 | 1 - - .../linux-deconfigured-cpus/node/node17/cpu143 | 1 - - .../linux-deconfigured-cpus/node/node17/meminfo | 29 ---------------------- - .../linux-deconfigured-cpus/node/online | 1 - - .../linux-deconfigured-cpus/node/possible | 1 - - tests/nodeinfotest.c | 2 +- - 783 files changed, 504 insertions(+), 504 deletions(-) - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu0/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu1/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu10/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu100/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu101/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu102/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu103/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu105/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu106/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu107/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu108/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu109/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu11/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu110/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu111/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu113/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu114/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu115/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu116/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu117/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu118/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu119/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu12/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu121/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu122/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu123/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu124/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu125/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu126/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu127/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu129/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu13/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu130/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu131/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu132/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu133/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu134/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu135/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu137/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu138/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu139/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu14/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu140/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu141/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu142/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu143/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu144/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu145/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu146/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu147/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu148/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu149/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu15/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu150/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu151/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu152/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu153/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu154/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu155/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu156/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu157/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu158/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu159/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu17/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu18/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu19/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu2/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu20/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu21/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu22/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu23/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu25/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu26/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu27/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu28/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu29/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu3/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu30/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu31/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu32/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu33/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu34/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu35/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu36/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu37/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu38/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu39/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu4/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu41/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu42/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu43/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu44/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu45/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu46/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu47/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu49/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu5/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu50/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu51/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu52/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu53/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu54/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu55/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu56/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu57/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu58/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu59/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu6/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu60/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu61/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu62/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu63/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu64/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu65/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu66/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu67/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu68/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu69/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu7/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu70/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu71/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu73/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu74/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu75/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu76/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu77/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu78/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu79/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu8/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu80/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu81/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu82/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu83/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu84/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu85/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu86/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu87/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu88/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu89/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu9/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu90/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu91/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu92/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu93/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu94/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu95/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu96/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu97/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu98/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/cpu99/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/kernel_max - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/offline - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/possible - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/cpu/present - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu0 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu1 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu10 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu100 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu101 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu102 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu103 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu11 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu12 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu13 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu14 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu144 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu145 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu146 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu147 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu148 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu149 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu15 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu150 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu151 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu152 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu153 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu154 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu155 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu156 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu157 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu158 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu159 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu16 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu17 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu18 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu19 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu2 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu20 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu21 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu22 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu23 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu24 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu25 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu26 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu27 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu28 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu29 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu3 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu30 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu31 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu32 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu33 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu34 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu35 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu36 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu37 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu38 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu39 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu4 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu5 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu56 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu57 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu58 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu59 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu6 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu60 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu61 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu62 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu63 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu64 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu65 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu66 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu67 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu68 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu69 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu7 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu70 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu71 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu8 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu80 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu81 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu82 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu83 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu84 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu85 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu86 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu87 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu88 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu89 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu9 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu90 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu91 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu92 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu93 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu94 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu95 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu96 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu97 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu98 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu99 - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/node/node0/meminfo - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu40 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu41 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu42 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu43 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu44 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu45 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu46 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu47 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu48 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu49 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu50 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu51 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu52 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu53 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu54 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu55 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu72 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu73 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu74 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu75 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu76 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu77 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu78 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu79 - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/node/node1/meminfo - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu104 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu105 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu106 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu107 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu108 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu109 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu110 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu111 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu112 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu113 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu114 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu115 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu116 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu117 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu118 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu119 - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/node/node16/meminfo - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu120 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu121 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu122 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu123 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu124 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu125 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu126 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu127 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu128 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu129 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu130 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu131 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu132 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu133 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu134 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu135 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu136 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu137 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu138 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu139 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu140 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu141 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu142 - create mode 120000 tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu143 - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/node/node17/meminfo - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/node/online - create mode 100644 tests/nodeinfodata/linux-deconf-cpus/node/possible - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/present - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 - delete mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/online - delete mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/possible - -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu0/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu0/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu0/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu1/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu1/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu1/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu10/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu10/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu10/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu100/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu100/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu100/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu101/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu101/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu101/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu102/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu102/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu102/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu103/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu103/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu103/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_id -new file mode 100644 -index 0000000..9bb71ca ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_id -@@ -0,0 +1 @@ -+2152 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings -new file mode 100644 -index 0000000..267b161 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings_list -new file mode 100644 -index 0000000..d11f5b7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/core_siblings_list -@@ -0,0 +1 @@ -+104,112 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings -new file mode 100644 -index 0000000..b4fa391 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings_list -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu104/topology/thread_siblings_list -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu105/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu105/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu105/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu106/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu106/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu106/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu107/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu107/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu107/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu108/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu108/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu108/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu109/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu109/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu109/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu11/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu11/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu11/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu110/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu110/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu110/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu111/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu111/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu111/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_id -new file mode 100644 -index 0000000..317509b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_id -@@ -0,0 +1 @@ -+2160 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings -new file mode 100644 -index 0000000..267b161 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings_list -new file mode 100644 -index 0000000..d11f5b7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/core_siblings_list -@@ -0,0 +1 @@ -+104,112 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings -new file mode 100644 -index 0000000..968e322 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings_list -new file mode 100644 -index 0000000..194b81c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu112/topology/thread_siblings_list -@@ -0,0 +1 @@ -+112 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu113/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu113/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu113/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu114/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu114/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu114/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu115/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu115/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu115/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu116/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu116/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu116/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu117/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu117/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu117/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu118/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu118/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu118/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu119/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu119/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu119/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu12/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu12/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu12/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_id -new file mode 100644 -index 0000000..b17e4bd ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_id -@@ -0,0 +1 @@ -+2208 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings -new file mode 100644 -index 0000000..99374e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings_list -new file mode 100644 -index 0000000..9764eab ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings -new file mode 100644 -index 0000000..13eaaf3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings_list -new file mode 100644 -index 0000000..52bd8e4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu120/topology/thread_siblings_list -@@ -0,0 +1 @@ -+120 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu121/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu121/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu121/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu122/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu122/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu122/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu123/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu123/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu123/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu124/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu124/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu124/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu125/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu125/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu125/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu126/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu126/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu126/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu127/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu127/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu127/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_id -new file mode 100644 -index 0000000..5c54d10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_id -@@ -0,0 +1 @@ -+2216 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings -new file mode 100644 -index 0000000..99374e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings_list -new file mode 100644 -index 0000000..9764eab ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings -new file mode 100644 -index 0000000..7e18bfb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings_list -new file mode 100644 -index 0000000..a949a93 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu128/topology/thread_siblings_list -@@ -0,0 +1 @@ -+128 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu129/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu129/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu129/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu13/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu13/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu13/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu130/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu130/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu130/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu131/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu131/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu131/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu132/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu132/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu132/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu133/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu133/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu133/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu134/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu134/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu134/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu135/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu135/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu135/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_id -new file mode 100644 -index 0000000..9813cea ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_id -@@ -0,0 +1 @@ -+2272 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings -new file mode 100644 -index 0000000..99374e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings_list -new file mode 100644 -index 0000000..9764eab ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings -new file mode 100644 -index 0000000..c05c51e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings_list -new file mode 100644 -index 0000000..7296f25 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu136/topology/thread_siblings_list -@@ -0,0 +1 @@ -+136 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu137/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu137/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu137/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu138/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu138/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu138/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu139/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu139/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu139/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu14/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu14/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu14/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu140/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu140/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu140/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu141/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu141/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu141/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu142/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu142/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu142/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu143/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu143/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu143/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu144/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu144/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu144/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu145/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu145/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu145/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu146/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu146/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu146/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu147/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu147/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu147/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu148/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu148/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu148/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu149/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu149/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu149/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu15/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu15/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu15/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu150/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu150/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu150/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu151/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu151/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu151/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu152/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu152/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu152/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu153/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu153/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu153/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu154/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu154/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu154/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu155/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu155/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu155/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu156/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu156/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu156/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu157/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu157/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu157/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu158/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu158/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu158/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu159/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu159/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu159/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_id -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_id -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings -new file mode 100644 -index 0000000..94bd366 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings_list -new file mode 100644 -index 0000000..2887d7b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/core_siblings_list -@@ -0,0 +1 @@ -+16,24 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings -new file mode 100644 -index 0000000..f15bff6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings_list -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu16/topology/thread_siblings_list -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu17/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu17/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu17/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu18/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu18/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu18/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu19/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu19/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu19/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu2/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu2/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu2/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu20/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu20/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu20/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu21/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu21/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu21/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu22/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu22/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu22/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu23/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu23/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu23/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_id -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_id -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings -new file mode 100644 -index 0000000..94bd366 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings_list -new file mode 100644 -index 0000000..2887d7b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/core_siblings_list -@@ -0,0 +1 @@ -+16,24 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings -new file mode 100644 -index 0000000..c20308b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings_list -new file mode 100644 -index 0000000..a45fd52 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu24/topology/thread_siblings_list -@@ -0,0 +1 @@ -+24 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu25/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu25/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu25/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu26/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu26/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu26/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu27/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu27/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu27/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu28/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu28/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu28/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu29/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu29/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu29/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu3/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu3/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu3/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu30/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu30/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu30/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu31/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu31/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu31/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu32/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu32/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu32/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu33/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu33/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu33/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu34/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu34/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu34/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu35/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu35/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu35/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu36/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu36/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu36/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu37/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu37/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu37/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu38/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu38/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu38/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu39/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu39/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu39/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu4/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu4/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu4/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_id -new file mode 100644 -index 0000000..a762560 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_id -@@ -0,0 +1 @@ -+160 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings -new file mode 100644 -index 0000000..24976fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings_list -new file mode 100644 -index 0000000..b7a5a65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,72 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings -new file mode 100644 -index 0000000..d98f0b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings_list -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu40/topology/thread_siblings_list -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu41/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu41/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu41/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu42/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu42/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu42/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu43/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu43/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu43/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu44/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu44/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu44/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu45/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu45/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu45/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu46/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu46/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu46/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu47/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu47/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu47/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_id -new file mode 100644 -index 0000000..de8febe ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_id -@@ -0,0 +1 @@ -+168 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings -new file mode 100644 -index 0000000..24976fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings_list -new file mode 100644 -index 0000000..b7a5a65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,72 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings -new file mode 100644 -index 0000000..943a83a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings_list -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu48/topology/thread_siblings_list -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu49/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu49/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu49/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu5/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu5/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu5/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu50/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu50/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu50/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu51/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu51/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu51/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu52/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu52/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu52/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu53/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu53/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu53/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu54/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu54/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu54/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu55/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu55/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu55/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu56/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu56/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu56/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu57/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu57/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu57/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu58/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu58/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu58/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu59/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu59/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu59/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu6/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu6/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu6/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu60/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu60/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu60/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu61/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu61/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu61/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu62/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu62/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu62/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu63/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu63/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu63/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu64/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu64/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu64/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu65/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu65/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu65/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu66/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu66/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu66/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu67/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu67/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu67/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu68/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu68/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu68/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu69/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu69/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu69/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu7/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu7/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu7/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu70/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu70/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu70/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu71/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu71/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu71/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_id -new file mode 100644 -index 0000000..7c022ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_id -@@ -0,0 +1 @@ -+232 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings -new file mode 100644 -index 0000000..24976fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings_list -new file mode 100644 -index 0000000..b7a5a65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,72 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/physical_package_id b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings -new file mode 100644 -index 0000000..b85a0fd ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings_list -new file mode 100644 -index 0000000..ea70ce0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu72/topology/thread_siblings_list -@@ -0,0 +1 @@ -+72 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu73/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu73/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu73/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu74/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu74/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu74/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu75/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu75/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu75/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu76/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu76/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu76/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu77/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu77/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu77/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu78/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu78/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu78/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu79/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu79/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu79/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu8/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu8/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu8/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu80/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu80/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu80/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu81/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu81/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu81/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu82/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu82/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu82/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu83/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu83/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu83/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu84/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu84/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu84/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu85/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu85/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu85/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu86/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu86/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu86/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu87/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu87/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu87/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu88/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu88/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu88/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu89/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu89/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu89/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu9/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu9/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu9/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu90/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu90/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu90/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu91/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu91/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu91/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu92/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu92/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu92/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu93/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu93/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu93/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu94/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu94/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu94/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu95/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu95/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu95/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu96/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu96/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu96/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu97/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu97/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu97/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu98/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu98/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu98/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu99/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu99/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/cpu99/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/kernel_max b/tests/nodeinfodata/linux-deconf-cpus/cpu/kernel_max -new file mode 100644 -index 0000000..b6ac305 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/kernel_max -@@ -0,0 +1 @@ -+2047 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/offline b/tests/nodeinfodata/linux-deconf-cpus/cpu/offline -new file mode 100644 -index 0000000..b74672a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/offline -@@ -0,0 +1 @@ -+0-15,17-23,25-39,41-47,49-71,73-103,105-111,113-119,121-127,129-135,137-159 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/online b/tests/nodeinfodata/linux-deconf-cpus/cpu/online -new file mode 100644 -index 0000000..dbb065f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/online -@@ -0,0 +1 @@ -+16,24,40,48,72,104,112,120,128,136 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/possible b/tests/nodeinfodata/linux-deconf-cpus/cpu/possible -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/possible -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/cpu/present b/tests/nodeinfodata/linux-deconf-cpus/cpu/present -new file mode 100644 -index 0000000..4acfa9b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/cpu/present -@@ -0,0 +1 @@ -+16-31,40-55,72-79,104-143 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu0 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu0 -new file mode 120000 -index 0000000..c841bea ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu0 -@@ -0,0 +1 @@ -+../../cpu/cpu0 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu1 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu1 -new file mode 120000 -index 0000000..5f45362 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu1 -@@ -0,0 +1 @@ -+../../cpu/cpu1 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu10 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu10 -new file mode 120000 -index 0000000..a6dc6bb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu10 -@@ -0,0 +1 @@ -+../../cpu/cpu10 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu100 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu100 -new file mode 120000 -index 0000000..ffb1446 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu100 -@@ -0,0 +1 @@ -+../../cpu/cpu100 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu101 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu101 -new file mode 120000 -index 0000000..2b399e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu101 -@@ -0,0 +1 @@ -+../../cpu/cpu101 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu102 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu102 -new file mode 120000 -index 0000000..f06eb7d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu102 -@@ -0,0 +1 @@ -+../../cpu/cpu102 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu103 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu103 -new file mode 120000 -index 0000000..722b506 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu103 -@@ -0,0 +1 @@ -+../../cpu/cpu103 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu11 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu11 -new file mode 120000 -index 0000000..e29d898 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu11 -@@ -0,0 +1 @@ -+../../cpu/cpu11 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu12 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu12 -new file mode 120000 -index 0000000..211519e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu12 -@@ -0,0 +1 @@ -+../../cpu/cpu12 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu13 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu13 -new file mode 120000 -index 0000000..52d3b69 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu13 -@@ -0,0 +1 @@ -+../../cpu/cpu13 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu14 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu14 -new file mode 120000 -index 0000000..24cb3b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu14 -@@ -0,0 +1 @@ -+../../cpu/cpu14 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu144 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu144 -new file mode 120000 -index 0000000..ccecb10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu144 -@@ -0,0 +1 @@ -+../../cpu/cpu144 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu145 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu145 -new file mode 120000 -index 0000000..00def86 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu145 -@@ -0,0 +1 @@ -+../../cpu/cpu145 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu146 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu146 -new file mode 120000 -index 0000000..6a13966 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu146 -@@ -0,0 +1 @@ -+../../cpu/cpu146 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu147 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu147 -new file mode 120000 -index 0000000..143c5a7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu147 -@@ -0,0 +1 @@ -+../../cpu/cpu147 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu148 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu148 -new file mode 120000 -index 0000000..21bae94 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu148 -@@ -0,0 +1 @@ -+../../cpu/cpu148 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu149 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu149 -new file mode 120000 -index 0000000..fdb0f17 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu149 -@@ -0,0 +1 @@ -+../../cpu/cpu149 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu15 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu15 -new file mode 120000 -index 0000000..e905d85 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu15 -@@ -0,0 +1 @@ -+../../cpu/cpu15 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu150 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu150 -new file mode 120000 -index 0000000..da363e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu150 -@@ -0,0 +1 @@ -+../../cpu/cpu150 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu151 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu151 -new file mode 120000 -index 0000000..069de6b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu151 -@@ -0,0 +1 @@ -+../../cpu/cpu151 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu152 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu152 -new file mode 120000 -index 0000000..0fb022e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu152 -@@ -0,0 +1 @@ -+../../cpu/cpu152 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu153 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu153 -new file mode 120000 -index 0000000..d7e0f9e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu153 -@@ -0,0 +1 @@ -+../../cpu/cpu153 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu154 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu154 -new file mode 120000 -index 0000000..0a6117a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu154 -@@ -0,0 +1 @@ -+../../cpu/cpu154 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu155 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu155 -new file mode 120000 -index 0000000..201f0f5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu155 -@@ -0,0 +1 @@ -+../../cpu/cpu155 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu156 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu156 -new file mode 120000 -index 0000000..da7f12b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu156 -@@ -0,0 +1 @@ -+../../cpu/cpu156 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu157 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu157 -new file mode 120000 -index 0000000..c2aa5c2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu157 -@@ -0,0 +1 @@ -+../../cpu/cpu157 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu158 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu158 -new file mode 120000 -index 0000000..4376692 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu158 -@@ -0,0 +1 @@ -+../../cpu/cpu158 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu159 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu159 -new file mode 120000 -index 0000000..852a0c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu159 -@@ -0,0 +1 @@ -+../../cpu/cpu159 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu16 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu16 -new file mode 120000 -index 0000000..445de40 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu16 -@@ -0,0 +1 @@ -+../../cpu/cpu16 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu17 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu17 -new file mode 120000 -index 0000000..13929db ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu17 -@@ -0,0 +1 @@ -+../../cpu/cpu17 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu18 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu18 -new file mode 120000 -index 0000000..3809adc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu18 -@@ -0,0 +1 @@ -+../../cpu/cpu18 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu19 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu19 -new file mode 120000 -index 0000000..c671083 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu19 -@@ -0,0 +1 @@ -+../../cpu/cpu19 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu2 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu2 -new file mode 120000 -index 0000000..2dcca33 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu2 -@@ -0,0 +1 @@ -+../../cpu/cpu2 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu20 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu20 -new file mode 120000 -index 0000000..a37c370 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu20 -@@ -0,0 +1 @@ -+../../cpu/cpu20 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu21 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu21 -new file mode 120000 -index 0000000..68a7cad ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu21 -@@ -0,0 +1 @@ -+../../cpu/cpu21 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu22 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu22 -new file mode 120000 -index 0000000..2c226ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu22 -@@ -0,0 +1 @@ -+../../cpu/cpu22 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu23 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu23 -new file mode 120000 -index 0000000..75c2f57 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu23 -@@ -0,0 +1 @@ -+../../cpu/cpu23 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu24 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu24 -new file mode 120000 -index 0000000..ad0a618 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu24 -@@ -0,0 +1 @@ -+../../cpu/cpu24 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu25 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu25 -new file mode 120000 -index 0000000..3145742 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu25 -@@ -0,0 +1 @@ -+../../cpu/cpu25 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu26 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu26 -new file mode 120000 -index 0000000..1dd180f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu26 -@@ -0,0 +1 @@ -+../../cpu/cpu26 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu27 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu27 -new file mode 120000 -index 0000000..74ced19 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu27 -@@ -0,0 +1 @@ -+../../cpu/cpu27 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu28 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu28 -new file mode 120000 -index 0000000..83269be ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu28 -@@ -0,0 +1 @@ -+../../cpu/cpu28 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu29 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu29 -new file mode 120000 -index 0000000..fa37dc6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu29 -@@ -0,0 +1 @@ -+../../cpu/cpu29 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu3 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu3 -new file mode 120000 -index 0000000..c7690e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu3 -@@ -0,0 +1 @@ -+../../cpu/cpu3 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu30 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu30 -new file mode 120000 -index 0000000..80226fa ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu30 -@@ -0,0 +1 @@ -+../../cpu/cpu30 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu31 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu31 -new file mode 120000 -index 0000000..6a9a569 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu31 -@@ -0,0 +1 @@ -+../../cpu/cpu31 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu32 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu32 -new file mode 120000 -index 0000000..bbca866 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu32 -@@ -0,0 +1 @@ -+../../cpu/cpu32 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu33 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu33 -new file mode 120000 -index 0000000..b7a9f8d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu33 -@@ -0,0 +1 @@ -+../../cpu/cpu33 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu34 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu34 -new file mode 120000 -index 0000000..0c0e738 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu34 -@@ -0,0 +1 @@ -+../../cpu/cpu34 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu35 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu35 -new file mode 120000 -index 0000000..47654d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu35 -@@ -0,0 +1 @@ -+../../cpu/cpu35 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu36 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu36 -new file mode 120000 -index 0000000..5e53f70 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu36 -@@ -0,0 +1 @@ -+../../cpu/cpu36 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu37 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu37 -new file mode 120000 -index 0000000..41b4ce7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu37 -@@ -0,0 +1 @@ -+../../cpu/cpu37 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu38 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu38 -new file mode 120000 -index 0000000..7231eb4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu38 -@@ -0,0 +1 @@ -+../../cpu/cpu38 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu39 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu39 -new file mode 120000 -index 0000000..d465480 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu39 -@@ -0,0 +1 @@ -+../../cpu/cpu39 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu4 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu4 -new file mode 120000 -index 0000000..9e77a64 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu4 -@@ -0,0 +1 @@ -+../../cpu/cpu4 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu5 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu5 -new file mode 120000 -index 0000000..cc07c3b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu5 -@@ -0,0 +1 @@ -+../../cpu/cpu5 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu56 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu56 -new file mode 120000 -index 0000000..586050f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu56 -@@ -0,0 +1 @@ -+../../cpu/cpu56 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu57 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu57 -new file mode 120000 -index 0000000..4276ac5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu57 -@@ -0,0 +1 @@ -+../../cpu/cpu57 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu58 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu58 -new file mode 120000 -index 0000000..3c10d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu58 -@@ -0,0 +1 @@ -+../../cpu/cpu58 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu59 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu59 -new file mode 120000 -index 0000000..06ddb97 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu59 -@@ -0,0 +1 @@ -+../../cpu/cpu59 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu6 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu6 -new file mode 120000 -index 0000000..2e75763 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu6 -@@ -0,0 +1 @@ -+../../cpu/cpu6 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu60 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu60 -new file mode 120000 -index 0000000..c062761 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu60 -@@ -0,0 +1 @@ -+../../cpu/cpu60 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu61 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu61 -new file mode 120000 -index 0000000..5a2c12f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu61 -@@ -0,0 +1 @@ -+../../cpu/cpu61 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu62 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu62 -new file mode 120000 -index 0000000..9056072 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu62 -@@ -0,0 +1 @@ -+../../cpu/cpu62 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu63 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu63 -new file mode 120000 -index 0000000..1511953 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu63 -@@ -0,0 +1 @@ -+../../cpu/cpu63 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu64 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu64 -new file mode 120000 -index 0000000..1664a2b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu64 -@@ -0,0 +1 @@ -+../../cpu/cpu64 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu65 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu65 -new file mode 120000 -index 0000000..52712cf ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu65 -@@ -0,0 +1 @@ -+../../cpu/cpu65 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu66 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu66 -new file mode 120000 -index 0000000..93a4f32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu66 -@@ -0,0 +1 @@ -+../../cpu/cpu66 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu67 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu67 -new file mode 120000 -index 0000000..db73e74 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu67 -@@ -0,0 +1 @@ -+../../cpu/cpu67 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu68 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu68 -new file mode 120000 -index 0000000..4f40eb8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu68 -@@ -0,0 +1 @@ -+../../cpu/cpu68 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu69 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu69 -new file mode 120000 -index 0000000..9f32d96 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu69 -@@ -0,0 +1 @@ -+../../cpu/cpu69 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu7 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu7 -new file mode 120000 -index 0000000..09e3f79 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu7 -@@ -0,0 +1 @@ -+../../cpu/cpu7 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu70 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu70 -new file mode 120000 -index 0000000..a0e8fd2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu70 -@@ -0,0 +1 @@ -+../../cpu/cpu70 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu71 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu71 -new file mode 120000 -index 0000000..898c9f2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu71 -@@ -0,0 +1 @@ -+../../cpu/cpu71 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu8 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu8 -new file mode 120000 -index 0000000..bda10cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu8 -@@ -0,0 +1 @@ -+../../cpu/cpu8 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu80 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu80 -new file mode 120000 -index 0000000..ce5ed81 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu80 -@@ -0,0 +1 @@ -+../../cpu/cpu80 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu81 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu81 -new file mode 120000 -index 0000000..dcd9a05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu81 -@@ -0,0 +1 @@ -+../../cpu/cpu81 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu82 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu82 -new file mode 120000 -index 0000000..c91ce01 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu82 -@@ -0,0 +1 @@ -+../../cpu/cpu82 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu83 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu83 -new file mode 120000 -index 0000000..22ba3c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu83 -@@ -0,0 +1 @@ -+../../cpu/cpu83 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu84 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu84 -new file mode 120000 -index 0000000..c7e4d26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu84 -@@ -0,0 +1 @@ -+../../cpu/cpu84 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu85 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu85 -new file mode 120000 -index 0000000..6779d27 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu85 -@@ -0,0 +1 @@ -+../../cpu/cpu85 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu86 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu86 -new file mode 120000 -index 0000000..9e777be ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu86 -@@ -0,0 +1 @@ -+../../cpu/cpu86 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu87 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu87 -new file mode 120000 -index 0000000..0359c58 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu87 -@@ -0,0 +1 @@ -+../../cpu/cpu87 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu88 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu88 -new file mode 120000 -index 0000000..3825c50 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu88 -@@ -0,0 +1 @@ -+../../cpu/cpu88 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu89 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu89 -new file mode 120000 -index 0000000..9a72211 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu89 -@@ -0,0 +1 @@ -+../../cpu/cpu89 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu9 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu9 -new file mode 120000 -index 0000000..1ec1db2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu9 -@@ -0,0 +1 @@ -+../../cpu/cpu9 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu90 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu90 -new file mode 120000 -index 0000000..75d10b3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu90 -@@ -0,0 +1 @@ -+../../cpu/cpu90 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu91 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu91 -new file mode 120000 -index 0000000..8e9e4a4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu91 -@@ -0,0 +1 @@ -+../../cpu/cpu91 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu92 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu92 -new file mode 120000 -index 0000000..f8d5f05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu92 -@@ -0,0 +1 @@ -+../../cpu/cpu92 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu93 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu93 -new file mode 120000 -index 0000000..5a302ad ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu93 -@@ -0,0 +1 @@ -+../../cpu/cpu93 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu94 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu94 -new file mode 120000 -index 0000000..9e6239f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu94 -@@ -0,0 +1 @@ -+../../cpu/cpu94 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu95 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu95 -new file mode 120000 -index 0000000..d87b5e3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu95 -@@ -0,0 +1 @@ -+../../cpu/cpu95 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu96 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu96 -new file mode 120000 -index 0000000..50d1edc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu96 -@@ -0,0 +1 @@ -+../../cpu/cpu96 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu97 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu97 -new file mode 120000 -index 0000000..38b5a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu97 -@@ -0,0 +1 @@ -+../../cpu/cpu97 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu98 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu98 -new file mode 120000 -index 0000000..df97c6c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu98 -@@ -0,0 +1 @@ -+../../cpu/cpu98 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu99 b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu99 -new file mode 120000 -index 0000000..a3a6164 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/cpu99 -@@ -0,0 +1 @@ -+../../cpu/cpu99 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node0/meminfo b/tests/nodeinfodata/linux-deconf-cpus/node/node0/meminfo -new file mode 100644 -index 0000000..0ecf45a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node0/meminfo -@@ -0,0 +1,29 @@ -+Node 0 MemTotal: 67108864 kB -+Node 0 MemFree: 61960640 kB -+Node 0 MemUsed: 5148224 kB -+Node 0 Active: 124864 kB -+Node 0 Inactive: 107584 kB -+Node 0 Active(anon): 83648 kB -+Node 0 Inactive(anon): 8768 kB -+Node 0 Active(file): 41216 kB -+Node 0 Inactive(file): 98816 kB -+Node 0 Unevictable: 0 kB -+Node 0 Mlocked: 0 kB -+Node 0 Dirty: 128 kB -+Node 0 Writeback: 0 kB -+Node 0 FilePages: 155008 kB -+Node 0 Mapped: 31552 kB -+Node 0 AnonPages: 77312 kB -+Node 0 Shmem: 15104 kB -+Node 0 KernelStack: 8992 kB -+Node 0 PageTables: 1728 kB -+Node 0 NFS_Unstable: 0 kB -+Node 0 Bounce: 0 kB -+Node 0 WritebackTmp: 0 kB -+Node 0 Slab: 151872 kB -+Node 0 SReclaimable: 27776 kB -+Node 0 SUnreclaim: 124096 kB -+Node 0 AnonHugePages: 0 kB -+Node 0 HugePages_Total: 0 -+Node 0 HugePages_Free: 0 -+Node 0 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu40 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu40 -new file mode 120000 -index 0000000..c727d46 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu40 -@@ -0,0 +1 @@ -+../../cpu/cpu40 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu41 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu41 -new file mode 120000 -index 0000000..cc0b78c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu41 -@@ -0,0 +1 @@ -+../../cpu/cpu41 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu42 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu42 -new file mode 120000 -index 0000000..8ebd18e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu42 -@@ -0,0 +1 @@ -+../../cpu/cpu42 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu43 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu43 -new file mode 120000 -index 0000000..03b2d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu43 -@@ -0,0 +1 @@ -+../../cpu/cpu43 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu44 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu44 -new file mode 120000 -index 0000000..859e4fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu44 -@@ -0,0 +1 @@ -+../../cpu/cpu44 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu45 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu45 -new file mode 120000 -index 0000000..58c3ca3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu45 -@@ -0,0 +1 @@ -+../../cpu/cpu45 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu46 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu46 -new file mode 120000 -index 0000000..55223e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu46 -@@ -0,0 +1 @@ -+../../cpu/cpu46 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu47 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu47 -new file mode 120000 -index 0000000..19407d4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu47 -@@ -0,0 +1 @@ -+../../cpu/cpu47 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu48 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu48 -new file mode 120000 -index 0000000..60a190c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu48 -@@ -0,0 +1 @@ -+../../cpu/cpu48 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu49 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu49 -new file mode 120000 -index 0000000..0ff1796 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu49 -@@ -0,0 +1 @@ -+../../cpu/cpu49 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu50 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu50 -new file mode 120000 -index 0000000..ddc5361 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu50 -@@ -0,0 +1 @@ -+../../cpu/cpu50 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu51 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu51 -new file mode 120000 -index 0000000..41163a9 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu51 -@@ -0,0 +1 @@ -+../../cpu/cpu51 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu52 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu52 -new file mode 120000 -index 0000000..be09dc8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu52 -@@ -0,0 +1 @@ -+../../cpu/cpu52 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu53 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu53 -new file mode 120000 -index 0000000..470ab22 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu53 -@@ -0,0 +1 @@ -+../../cpu/cpu53 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu54 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu54 -new file mode 120000 -index 0000000..5c11dfd ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu54 -@@ -0,0 +1 @@ -+../../cpu/cpu54 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu55 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu55 -new file mode 120000 -index 0000000..e858949 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu55 -@@ -0,0 +1 @@ -+../../cpu/cpu55 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu72 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu72 -new file mode 120000 -index 0000000..d731cf5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu72 -@@ -0,0 +1 @@ -+../../cpu/cpu72 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu73 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu73 -new file mode 120000 -index 0000000..99f1a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu73 -@@ -0,0 +1 @@ -+../../cpu/cpu73 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu74 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu74 -new file mode 120000 -index 0000000..84a3139 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu74 -@@ -0,0 +1 @@ -+../../cpu/cpu74 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu75 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu75 -new file mode 120000 -index 0000000..0693a99 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu75 -@@ -0,0 +1 @@ -+../../cpu/cpu75 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu76 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu76 -new file mode 120000 -index 0000000..5ff7021 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu76 -@@ -0,0 +1 @@ -+../../cpu/cpu76 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu77 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu77 -new file mode 120000 -index 0000000..05099c6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu77 -@@ -0,0 +1 @@ -+../../cpu/cpu77 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu78 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu78 -new file mode 120000 -index 0000000..20eb9cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu78 -@@ -0,0 +1 @@ -+../../cpu/cpu78 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu79 b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu79 -new file mode 120000 -index 0000000..4813a63 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/cpu79 -@@ -0,0 +1 @@ -+../../cpu/cpu79 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node1/meminfo b/tests/nodeinfodata/linux-deconf-cpus/node/node1/meminfo -new file mode 100644 -index 0000000..ef085b2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node1/meminfo -@@ -0,0 +1,29 @@ -+Node 1 MemTotal: 67108864 kB -+Node 1 MemFree: 66143552 kB -+Node 1 MemUsed: 965312 kB -+Node 1 Active: 125952 kB -+Node 1 Inactive: 255808 kB -+Node 1 Active(anon): 79808 kB -+Node 1 Inactive(anon): 448 kB -+Node 1 Active(file): 46144 kB -+Node 1 Inactive(file): 255360 kB -+Node 1 Unevictable: 0 kB -+Node 1 Mlocked: 0 kB -+Node 1 Dirty: 213760 kB -+Node 1 Writeback: 0 kB -+Node 1 FilePages: 310656 kB -+Node 1 Mapped: 27328 kB -+Node 1 AnonPages: 73856 kB -+Node 1 Shmem: 6336 kB -+Node 1 KernelStack: 4624 kB -+Node 1 PageTables: 512 kB -+Node 1 NFS_Unstable: 0 kB -+Node 1 Bounce: 0 kB -+Node 1 WritebackTmp: 0 kB -+Node 1 Slab: 130688 kB -+Node 1 SReclaimable: 21120 kB -+Node 1 SUnreclaim: 109568 kB -+Node 1 AnonHugePages: 0 kB -+Node 1 HugePages_Total: 0 -+Node 1 HugePages_Free: 0 -+Node 1 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu104 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu104 -new file mode 120000 -index 0000000..7692606 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu104 -@@ -0,0 +1 @@ -+../../cpu/cpu104 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu105 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu105 -new file mode 120000 -index 0000000..77d25d5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu105 -@@ -0,0 +1 @@ -+../../cpu/cpu105 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu106 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu106 -new file mode 120000 -index 0000000..f8bff26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu106 -@@ -0,0 +1 @@ -+../../cpu/cpu106 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu107 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu107 -new file mode 120000 -index 0000000..d475c15 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu107 -@@ -0,0 +1 @@ -+../../cpu/cpu107 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu108 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu108 -new file mode 120000 -index 0000000..4352ab8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu108 -@@ -0,0 +1 @@ -+../../cpu/cpu108 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu109 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu109 -new file mode 120000 -index 0000000..c74e8ec ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu109 -@@ -0,0 +1 @@ -+../../cpu/cpu109 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu110 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu110 -new file mode 120000 -index 0000000..fb66aa1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu110 -@@ -0,0 +1 @@ -+../../cpu/cpu110 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu111 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu111 -new file mode 120000 -index 0000000..b2da00c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu111 -@@ -0,0 +1 @@ -+../../cpu/cpu111 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu112 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu112 -new file mode 120000 -index 0000000..e65062a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu112 -@@ -0,0 +1 @@ -+../../cpu/cpu112 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu113 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu113 -new file mode 120000 -index 0000000..f8380bf ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu113 -@@ -0,0 +1 @@ -+../../cpu/cpu113 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu114 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu114 -new file mode 120000 -index 0000000..4c33e35 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu114 -@@ -0,0 +1 @@ -+../../cpu/cpu114 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu115 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu115 -new file mode 120000 -index 0000000..2b4fbce ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu115 -@@ -0,0 +1 @@ -+../../cpu/cpu115 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu116 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu116 -new file mode 120000 -index 0000000..7e07a2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu116 -@@ -0,0 +1 @@ -+../../cpu/cpu116 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu117 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu117 -new file mode 120000 -index 0000000..2d65930 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu117 -@@ -0,0 +1 @@ -+../../cpu/cpu117 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu118 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu118 -new file mode 120000 -index 0000000..b09093c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu118 -@@ -0,0 +1 @@ -+../../cpu/cpu118 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu119 b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu119 -new file mode 120000 -index 0000000..59a5bf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/cpu119 -@@ -0,0 +1 @@ -+../../cpu/cpu119 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node16/meminfo b/tests/nodeinfodata/linux-deconf-cpus/node/node16/meminfo -new file mode 100644 -index 0000000..09e3954 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node16/meminfo -@@ -0,0 +1,29 @@ -+Node 16 MemTotal: 67108864 kB -+Node 16 MemFree: 66573952 kB -+Node 16 MemUsed: 534912 kB -+Node 16 Active: 14272 kB -+Node 16 Inactive: 16832 kB -+Node 16 Active(anon): 6272 kB -+Node 16 Inactive(anon): 64 kB -+Node 16 Active(file): 8000 kB -+Node 16 Inactive(file): 16768 kB -+Node 16 Unevictable: 0 kB -+Node 16 Mlocked: 0 kB -+Node 16 Dirty: 0 kB -+Node 16 Writeback: 0 kB -+Node 16 FilePages: 26176 kB -+Node 16 Mapped: 384 kB -+Node 16 AnonPages: 4928 kB -+Node 16 Shmem: 1408 kB -+Node 16 KernelStack: 1968 kB -+Node 16 PageTables: 192 kB -+Node 16 NFS_Unstable: 0 kB -+Node 16 Bounce: 0 kB -+Node 16 WritebackTmp: 0 kB -+Node 16 Slab: 46336 kB -+Node 16 SReclaimable: 2688 kB -+Node 16 SUnreclaim: 43648 kB -+Node 16 AnonHugePages: 0 kB -+Node 16 HugePages_Total: 0 -+Node 16 HugePages_Free: 0 -+Node 16 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu120 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu120 -new file mode 120000 -index 0000000..17a18b1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu120 -@@ -0,0 +1 @@ -+../../cpu/cpu120 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu121 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu121 -new file mode 120000 -index 0000000..321bbc2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu121 -@@ -0,0 +1 @@ -+../../cpu/cpu121 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu122 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu122 -new file mode 120000 -index 0000000..e03f5a3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu122 -@@ -0,0 +1 @@ -+../../cpu/cpu122 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu123 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu123 -new file mode 120000 -index 0000000..3021e4f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu123 -@@ -0,0 +1 @@ -+../../cpu/cpu123 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu124 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu124 -new file mode 120000 -index 0000000..10b32dc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu124 -@@ -0,0 +1 @@ -+../../cpu/cpu124 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu125 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu125 -new file mode 120000 -index 0000000..9e06e6e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu125 -@@ -0,0 +1 @@ -+../../cpu/cpu125 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu126 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu126 -new file mode 120000 -index 0000000..2a4708a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu126 -@@ -0,0 +1 @@ -+../../cpu/cpu126 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu127 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu127 -new file mode 120000 -index 0000000..96b5143 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu127 -@@ -0,0 +1 @@ -+../../cpu/cpu127 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu128 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu128 -new file mode 120000 -index 0000000..3142217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu128 -@@ -0,0 +1 @@ -+../../cpu/cpu128 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu129 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu129 -new file mode 120000 -index 0000000..dc84401 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu129 -@@ -0,0 +1 @@ -+../../cpu/cpu129 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu130 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu130 -new file mode 120000 -index 0000000..59a50b8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu130 -@@ -0,0 +1 @@ -+../../cpu/cpu130 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu131 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu131 -new file mode 120000 -index 0000000..ca1f958 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu131 -@@ -0,0 +1 @@ -+../../cpu/cpu131 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu132 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu132 -new file mode 120000 -index 0000000..a1f7ea1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu132 -@@ -0,0 +1 @@ -+../../cpu/cpu132 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu133 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu133 -new file mode 120000 -index 0000000..89e453b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu133 -@@ -0,0 +1 @@ -+../../cpu/cpu133 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu134 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu134 -new file mode 120000 -index 0000000..a46c33e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu134 -@@ -0,0 +1 @@ -+../../cpu/cpu134 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu135 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu135 -new file mode 120000 -index 0000000..4efd76f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu135 -@@ -0,0 +1 @@ -+../../cpu/cpu135 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu136 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu136 -new file mode 120000 -index 0000000..cfd61b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu136 -@@ -0,0 +1 @@ -+../../cpu/cpu136 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu137 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu137 -new file mode 120000 -index 0000000..6a1ec92 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu137 -@@ -0,0 +1 @@ -+../../cpu/cpu137 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu138 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu138 -new file mode 120000 -index 0000000..890aad3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu138 -@@ -0,0 +1 @@ -+../../cpu/cpu138 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu139 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu139 -new file mode 120000 -index 0000000..afb925f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu139 -@@ -0,0 +1 @@ -+../../cpu/cpu139 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu140 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu140 -new file mode 120000 -index 0000000..2faf4c0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu140 -@@ -0,0 +1 @@ -+../../cpu/cpu140 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu141 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu141 -new file mode 120000 -index 0000000..6cf8cf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu141 -@@ -0,0 +1 @@ -+../../cpu/cpu141 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu142 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu142 -new file mode 120000 -index 0000000..fa73d61 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu142 -@@ -0,0 +1 @@ -+../../cpu/cpu142 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu143 b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu143 -new file mode 120000 -index 0000000..04dcaa4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/cpu143 -@@ -0,0 +1 @@ -+../../cpu/cpu143 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/node17/meminfo b/tests/nodeinfodata/linux-deconf-cpus/node/node17/meminfo -new file mode 100644 -index 0000000..1bddfb5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/node17/meminfo -@@ -0,0 +1,29 @@ -+Node 17 MemTotal: 67108864 kB -+Node 17 MemFree: 66334656 kB -+Node 17 MemUsed: 774208 kB -+Node 17 Active: 15936 kB -+Node 17 Inactive: 12416 kB -+Node 17 Active(anon): 10944 kB -+Node 17 Inactive(anon): 64 kB -+Node 17 Active(file): 4992 kB -+Node 17 Inactive(file): 12352 kB -+Node 17 Unevictable: 0 kB -+Node 17 Mlocked: 0 kB -+Node 17 Dirty: 0 kB -+Node 17 Writeback: 0 kB -+Node 17 FilePages: 17600 kB -+Node 17 Mapped: 768 kB -+Node 17 AnonPages: 10752 kB -+Node 17 Shmem: 256 kB -+Node 17 KernelStack: 3808 kB -+Node 17 PageTables: 128 kB -+Node 17 NFS_Unstable: 0 kB -+Node 17 Bounce: 0 kB -+Node 17 WritebackTmp: 0 kB -+Node 17 Slab: 25792 kB -+Node 17 SReclaimable: 3840 kB -+Node 17 SUnreclaim: 21952 kB -+Node 17 AnonHugePages: 0 kB -+Node 17 HugePages_Total: 0 -+Node 17 HugePages_Free: 0 -+Node 17 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/online b/tests/nodeinfodata/linux-deconf-cpus/node/online -new file mode 100644 -index 0000000..a41eb32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/online -@@ -0,0 +1 @@ -+0-1,16-17 -diff --git a/tests/nodeinfodata/linux-deconf-cpus/node/possible b/tests/nodeinfodata/linux-deconf-cpus/node/possible -new file mode 100644 -index 0000000..8d232c7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconf-cpus/node/possible -@@ -0,0 +1 @@ -+0-255 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id -deleted file mode 100644 -index 9bb71ca..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --2152 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings -deleted file mode 100644 -index 267b161..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list -deleted file mode 100644 -index d11f5b7..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --104,112 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id -deleted file mode 100644 -index b6a7d89..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --16 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings -deleted file mode 100644 -index b4fa391..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list -deleted file mode 100644 -index b16e5f7..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --104 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id -deleted file mode 100644 -index 317509b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --2160 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings -deleted file mode 100644 -index 267b161..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list -deleted file mode 100644 -index d11f5b7..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --104,112 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id -deleted file mode 100644 -index b6a7d89..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --16 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings -deleted file mode 100644 -index 968e322..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list -deleted file mode 100644 -index 194b81c..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --112 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id -deleted file mode 100644 -index b17e4bd..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --2208 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings -deleted file mode 100644 -index 99374e8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list -deleted file mode 100644 -index 9764eab..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id -deleted file mode 100644 -index 98d9bcb..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings -deleted file mode 100644 -index 13eaaf3..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list -deleted file mode 100644 -index 52bd8e4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --120 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -deleted file mode 100644 -index 5c54d10..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --2216 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings -deleted file mode 100644 -index 99374e8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list -deleted file mode 100644 -index 9764eab..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id -deleted file mode 100644 -index 98d9bcb..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings -deleted file mode 100644 -index 7e18bfb..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list -deleted file mode 100644 -index a949a93..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --128 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id -deleted file mode 100644 -index 9813cea..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --2272 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings -deleted file mode 100644 -index 99374e8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list -deleted file mode 100644 -index 9764eab..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id -deleted file mode 100644 -index 98d9bcb..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings -deleted file mode 100644 -index c05c51e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list -deleted file mode 100644 -index 7296f25..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -deleted file mode 100644 -index 21e72e8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --48 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings -deleted file mode 100644 -index 94bd366..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list -deleted file mode 100644 -index 2887d7b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --16,24 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings -deleted file mode 100644 -index f15bff6..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list -deleted file mode 100644 -index b6a7d89..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --16 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -deleted file mode 100644 -index f906e18..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --96 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings -deleted file mode 100644 -index 94bd366..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list -deleted file mode 100644 -index 2887d7b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --16,24 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings -deleted file mode 100644 -index c20308b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list -deleted file mode 100644 -index a45fd52..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --24 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id -deleted file mode 100644 -index a762560..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --160 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings -deleted file mode 100644 -index 24976fc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list -deleted file mode 100644 -index b7a5a65..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --40,48,72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings -deleted file mode 100644 -index d98f0b4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list -deleted file mode 100644 -index 425151f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --40 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -deleted file mode 100644 -index de8febe..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --168 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings -deleted file mode 100644 -index 24976fc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list -deleted file mode 100644 -index b7a5a65..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --40,48,72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings -deleted file mode 100644 -index 943a83a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list -deleted file mode 100644 -index 21e72e8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --48 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -deleted file mode 100644 -index 7c022ae..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -+++ /dev/null -@@ -1 +0,0 @@ --232 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings -deleted file mode 100644 -index 24976fc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list -deleted file mode 100644 -index b7a5a65..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --40,48,72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id -deleted file mode 100644 -index d00491f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id -+++ /dev/null -@@ -1 +0,0 @@ --1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings -deleted file mode 100644 -index b85a0fd..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings -+++ /dev/null -@@ -1 +0,0 @@ --00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list -deleted file mode 100644 -index ea70ce0..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list -+++ /dev/null -@@ -1 +0,0 @@ --72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online -deleted file mode 100644 -index 573541a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online -+++ /dev/null -@@ -1 +0,0 @@ --0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max -deleted file mode 100644 -index b6ac305..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max -+++ /dev/null -@@ -1 +0,0 @@ --2047 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline -deleted file mode 100644 -index b74672a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline -+++ /dev/null -@@ -1 +0,0 @@ --0-15,17-23,25-39,41-47,49-71,73-103,105-111,113-119,121-127,129-135,137-159 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/online -deleted file mode 100644 -index dbb065f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/online -+++ /dev/null -@@ -1 +0,0 @@ --16,24,40,48,72,104,112,120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible -deleted file mode 100644 -index 7a662d6..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible -+++ /dev/null -@@ -1 +0,0 @@ --0-159 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/present b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/present -deleted file mode 100644 -index 4acfa9b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/present -+++ /dev/null -@@ -1 +0,0 @@ --16-31,40-55,72-79,104-143 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 -deleted file mode 120000 -index c841bea..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu0 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 -deleted file mode 120000 -index 5f45362..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu1 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 -deleted file mode 120000 -index a6dc6bb..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu10 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 -deleted file mode 120000 -index ffb1446..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu100 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 -deleted file mode 120000 -index 2b399e6..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu101 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 -deleted file mode 120000 -index f06eb7d..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu102 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 -deleted file mode 120000 -index 722b506..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu103 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 -deleted file mode 120000 -index e29d898..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu11 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 -deleted file mode 120000 -index 211519e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu12 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 -deleted file mode 120000 -index 52d3b69..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu13 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 -deleted file mode 120000 -index 24cb3b4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu14 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 -deleted file mode 120000 -index ccecb10..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu144 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 -deleted file mode 120000 -index 00def86..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu145 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 -deleted file mode 120000 -index 6a13966..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu146 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 -deleted file mode 120000 -index 143c5a7..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu147 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 -deleted file mode 120000 -index 21bae94..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu148 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 -deleted file mode 120000 -index fdb0f17..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu149 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 -deleted file mode 120000 -index e905d85..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu15 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 -deleted file mode 120000 -index da363e5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu150 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 -deleted file mode 120000 -index 069de6b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu151 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 -deleted file mode 120000 -index 0fb022e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu152 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 -deleted file mode 120000 -index d7e0f9e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu153 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 -deleted file mode 120000 -index 0a6117a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu154 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 -deleted file mode 120000 -index 201f0f5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu155 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 -deleted file mode 120000 -index da7f12b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu156 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 -deleted file mode 120000 -index c2aa5c2..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu157 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 -deleted file mode 120000 -index 4376692..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu158 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 -deleted file mode 120000 -index 852a0c4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu159 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 -deleted file mode 120000 -index 445de40..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu16 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 -deleted file mode 120000 -index 13929db..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu17 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 -deleted file mode 120000 -index 3809adc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu18 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 -deleted file mode 120000 -index c671083..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu19 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 -deleted file mode 120000 -index 2dcca33..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu2 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 -deleted file mode 120000 -index a37c370..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu20 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 -deleted file mode 120000 -index 68a7cad..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu21 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 -deleted file mode 120000 -index 2c226ae..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu22 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 -deleted file mode 120000 -index 75c2f57..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu23 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 -deleted file mode 120000 -index ad0a618..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu24 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 -deleted file mode 120000 -index 3145742..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu25 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 -deleted file mode 120000 -index 1dd180f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu26 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 -deleted file mode 120000 -index 74ced19..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu27 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 -deleted file mode 120000 -index 83269be..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu28 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 -deleted file mode 120000 -index fa37dc6..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu29 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 -deleted file mode 120000 -index c7690e5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu3 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 -deleted file mode 120000 -index 80226fa..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu30 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 -deleted file mode 120000 -index 6a9a569..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu31 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 -deleted file mode 120000 -index bbca866..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu32 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 -deleted file mode 120000 -index b7a9f8d..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu33 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 -deleted file mode 120000 -index 0c0e738..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu34 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 -deleted file mode 120000 -index 47654d6..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu35 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 -deleted file mode 120000 -index 5e53f70..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu36 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 -deleted file mode 120000 -index 41b4ce7..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu37 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 -deleted file mode 120000 -index 7231eb4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu38 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 -deleted file mode 120000 -index d465480..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu39 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 -deleted file mode 120000 -index 9e77a64..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu4 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 -deleted file mode 120000 -index cc07c3b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu5 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 -deleted file mode 120000 -index 586050f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu56 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 -deleted file mode 120000 -index 4276ac5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu57 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 -deleted file mode 120000 -index 3c10d2d..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu58 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 -deleted file mode 120000 -index 06ddb97..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu59 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 -deleted file mode 120000 -index 2e75763..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu6 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 -deleted file mode 120000 -index c062761..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu60 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 -deleted file mode 120000 -index 5a2c12f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu61 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 -deleted file mode 120000 -index 9056072..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu62 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 -deleted file mode 120000 -index 1511953..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu63 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 -deleted file mode 120000 -index 1664a2b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu64 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 -deleted file mode 120000 -index 52712cf..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu65 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 -deleted file mode 120000 -index 93a4f32..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu66 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 -deleted file mode 120000 -index db73e74..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu67 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 -deleted file mode 120000 -index 4f40eb8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu68 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 -deleted file mode 120000 -index 9f32d96..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu69 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 -deleted file mode 120000 -index 09e3f79..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu7 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 -deleted file mode 120000 -index a0e8fd2..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu70 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 -deleted file mode 120000 -index 898c9f2..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu71 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 -deleted file mode 120000 -index bda10cc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu8 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 -deleted file mode 120000 -index ce5ed81..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu80 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 -deleted file mode 120000 -index dcd9a05..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu81 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 -deleted file mode 120000 -index c91ce01..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu82 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 -deleted file mode 120000 -index 22ba3c4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu83 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 -deleted file mode 120000 -index c7e4d26..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu84 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 -deleted file mode 120000 -index 6779d27..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu85 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 -deleted file mode 120000 -index 9e777be..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu86 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 -deleted file mode 120000 -index 0359c58..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu87 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 -deleted file mode 120000 -index 3825c50..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu88 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 -deleted file mode 120000 -index 9a72211..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu89 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 -deleted file mode 120000 -index 1ec1db2..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu9 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 -deleted file mode 120000 -index 75d10b3..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu90 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 -deleted file mode 120000 -index 8e9e4a4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu91 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 -deleted file mode 120000 -index f8d5f05..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu92 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 -deleted file mode 120000 -index 5a302ad..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu93 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 -deleted file mode 120000 -index 9e6239f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu94 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 -deleted file mode 120000 -index d87b5e3..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu95 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 -deleted file mode 120000 -index 50d1edc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu96 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 -deleted file mode 120000 -index 38b5a90..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu97 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 -deleted file mode 120000 -index df97c6c..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu98 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 -deleted file mode 120000 -index a3a6164..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu99 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -deleted file mode 100644 -index 0ecf45a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -+++ /dev/null -@@ -1,29 +0,0 @@ --Node 0 MemTotal: 67108864 kB --Node 0 MemFree: 61960640 kB --Node 0 MemUsed: 5148224 kB --Node 0 Active: 124864 kB --Node 0 Inactive: 107584 kB --Node 0 Active(anon): 83648 kB --Node 0 Inactive(anon): 8768 kB --Node 0 Active(file): 41216 kB --Node 0 Inactive(file): 98816 kB --Node 0 Unevictable: 0 kB --Node 0 Mlocked: 0 kB --Node 0 Dirty: 128 kB --Node 0 Writeback: 0 kB --Node 0 FilePages: 155008 kB --Node 0 Mapped: 31552 kB --Node 0 AnonPages: 77312 kB --Node 0 Shmem: 15104 kB --Node 0 KernelStack: 8992 kB --Node 0 PageTables: 1728 kB --Node 0 NFS_Unstable: 0 kB --Node 0 Bounce: 0 kB --Node 0 WritebackTmp: 0 kB --Node 0 Slab: 151872 kB --Node 0 SReclaimable: 27776 kB --Node 0 SUnreclaim: 124096 kB --Node 0 AnonHugePages: 0 kB --Node 0 HugePages_Total: 0 --Node 0 HugePages_Free: 0 --Node 0 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 -deleted file mode 120000 -index c727d46..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu40 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 -deleted file mode 120000 -index cc0b78c..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu41 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 -deleted file mode 120000 -index 8ebd18e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu42 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 -deleted file mode 120000 -index 03b2d2d..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu43 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 -deleted file mode 120000 -index 859e4fc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu44 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 -deleted file mode 120000 -index 58c3ca3..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu45 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 -deleted file mode 120000 -index 55223e0..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu46 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 -deleted file mode 120000 -index 19407d4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu47 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 -deleted file mode 120000 -index 60a190c..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu48 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 -deleted file mode 120000 -index 0ff1796..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu49 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 -deleted file mode 120000 -index ddc5361..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu50 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 -deleted file mode 120000 -index 41163a9..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu51 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 -deleted file mode 120000 -index be09dc8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu52 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 -deleted file mode 120000 -index 470ab22..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu53 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 -deleted file mode 120000 -index 5c11dfd..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu54 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 -deleted file mode 120000 -index e858949..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu55 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 -deleted file mode 120000 -index d731cf5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu72 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 -deleted file mode 120000 -index 99f1a90..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu73 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 -deleted file mode 120000 -index 84a3139..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu74 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 -deleted file mode 120000 -index 0693a99..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu75 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 -deleted file mode 120000 -index 5ff7021..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu76 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 -deleted file mode 120000 -index 05099c6..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu77 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 -deleted file mode 120000 -index 20eb9cc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu78 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 -deleted file mode 120000 -index 4813a63..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu79 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -deleted file mode 100644 -index ef085b2..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -+++ /dev/null -@@ -1,29 +0,0 @@ --Node 1 MemTotal: 67108864 kB --Node 1 MemFree: 66143552 kB --Node 1 MemUsed: 965312 kB --Node 1 Active: 125952 kB --Node 1 Inactive: 255808 kB --Node 1 Active(anon): 79808 kB --Node 1 Inactive(anon): 448 kB --Node 1 Active(file): 46144 kB --Node 1 Inactive(file): 255360 kB --Node 1 Unevictable: 0 kB --Node 1 Mlocked: 0 kB --Node 1 Dirty: 213760 kB --Node 1 Writeback: 0 kB --Node 1 FilePages: 310656 kB --Node 1 Mapped: 27328 kB --Node 1 AnonPages: 73856 kB --Node 1 Shmem: 6336 kB --Node 1 KernelStack: 4624 kB --Node 1 PageTables: 512 kB --Node 1 NFS_Unstable: 0 kB --Node 1 Bounce: 0 kB --Node 1 WritebackTmp: 0 kB --Node 1 Slab: 130688 kB --Node 1 SReclaimable: 21120 kB --Node 1 SUnreclaim: 109568 kB --Node 1 AnonHugePages: 0 kB --Node 1 HugePages_Total: 0 --Node 1 HugePages_Free: 0 --Node 1 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 -deleted file mode 120000 -index 7692606..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu104 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 -deleted file mode 120000 -index 77d25d5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu105 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 -deleted file mode 120000 -index f8bff26..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu106 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 -deleted file mode 120000 -index d475c15..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu107 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 -deleted file mode 120000 -index 4352ab8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu108 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 -deleted file mode 120000 -index c74e8ec..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu109 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 -deleted file mode 120000 -index fb66aa1..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu110 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 -deleted file mode 120000 -index b2da00c..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu111 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 -deleted file mode 120000 -index e65062a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu112 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 -deleted file mode 120000 -index f8380bf..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu113 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 -deleted file mode 120000 -index 4c33e35..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu114 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 -deleted file mode 120000 -index 2b4fbce..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu115 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 -deleted file mode 120000 -index 7e07a2d..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu116 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 -deleted file mode 120000 -index 2d65930..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu117 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 -deleted file mode 120000 -index b09093c..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu118 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 -deleted file mode 120000 -index 59a5bf1..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu119 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -deleted file mode 100644 -index 09e3954..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -+++ /dev/null -@@ -1,29 +0,0 @@ --Node 16 MemTotal: 67108864 kB --Node 16 MemFree: 66573952 kB --Node 16 MemUsed: 534912 kB --Node 16 Active: 14272 kB --Node 16 Inactive: 16832 kB --Node 16 Active(anon): 6272 kB --Node 16 Inactive(anon): 64 kB --Node 16 Active(file): 8000 kB --Node 16 Inactive(file): 16768 kB --Node 16 Unevictable: 0 kB --Node 16 Mlocked: 0 kB --Node 16 Dirty: 0 kB --Node 16 Writeback: 0 kB --Node 16 FilePages: 26176 kB --Node 16 Mapped: 384 kB --Node 16 AnonPages: 4928 kB --Node 16 Shmem: 1408 kB --Node 16 KernelStack: 1968 kB --Node 16 PageTables: 192 kB --Node 16 NFS_Unstable: 0 kB --Node 16 Bounce: 0 kB --Node 16 WritebackTmp: 0 kB --Node 16 Slab: 46336 kB --Node 16 SReclaimable: 2688 kB --Node 16 SUnreclaim: 43648 kB --Node 16 AnonHugePages: 0 kB --Node 16 HugePages_Total: 0 --Node 16 HugePages_Free: 0 --Node 16 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 -deleted file mode 120000 -index 17a18b1..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu120 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 -deleted file mode 120000 -index 321bbc2..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu121 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 -deleted file mode 120000 -index e03f5a3..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu122 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 -deleted file mode 120000 -index 3021e4f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu123 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 -deleted file mode 120000 -index 10b32dc..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu124 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 -deleted file mode 120000 -index 9e06e6e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu125 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 -deleted file mode 120000 -index 2a4708a..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu126 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 -deleted file mode 120000 -index 96b5143..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu127 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 -deleted file mode 120000 -index 3142217..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu128 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 -deleted file mode 120000 -index dc84401..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu129 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 -deleted file mode 120000 -index 59a50b8..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu130 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 -deleted file mode 120000 -index ca1f958..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu131 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 -deleted file mode 120000 -index a1f7ea1..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu132 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 -deleted file mode 120000 -index 89e453b..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu133 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 -deleted file mode 120000 -index a46c33e..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu134 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 -deleted file mode 120000 -index 4efd76f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu135 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 -deleted file mode 120000 -index cfd61b4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu136 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 -deleted file mode 120000 -index 6a1ec92..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu137 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 -deleted file mode 120000 -index 890aad3..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu138 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 -deleted file mode 120000 -index afb925f..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu139 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 -deleted file mode 120000 -index 2faf4c0..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu140 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 -deleted file mode 120000 -index 6cf8cf1..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu141 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 -deleted file mode 120000 -index fa73d61..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu142 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 -deleted file mode 120000 -index 04dcaa4..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 -+++ /dev/null -@@ -1 +0,0 @@ --../../cpu/cpu143 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -deleted file mode 100644 -index 1bddfb5..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -+++ /dev/null -@@ -1,29 +0,0 @@ --Node 17 MemTotal: 67108864 kB --Node 17 MemFree: 66334656 kB --Node 17 MemUsed: 774208 kB --Node 17 Active: 15936 kB --Node 17 Inactive: 12416 kB --Node 17 Active(anon): 10944 kB --Node 17 Inactive(anon): 64 kB --Node 17 Active(file): 4992 kB --Node 17 Inactive(file): 12352 kB --Node 17 Unevictable: 0 kB --Node 17 Mlocked: 0 kB --Node 17 Dirty: 0 kB --Node 17 Writeback: 0 kB --Node 17 FilePages: 17600 kB --Node 17 Mapped: 768 kB --Node 17 AnonPages: 10752 kB --Node 17 Shmem: 256 kB --Node 17 KernelStack: 3808 kB --Node 17 PageTables: 128 kB --Node 17 NFS_Unstable: 0 kB --Node 17 Bounce: 0 kB --Node 17 WritebackTmp: 0 kB --Node 17 Slab: 25792 kB --Node 17 SReclaimable: 3840 kB --Node 17 SUnreclaim: 21952 kB --Node 17 AnonHugePages: 0 kB --Node 17 HugePages_Total: 0 --Node 17 HugePages_Free: 0 --Node 17 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/online b/tests/nodeinfodata/linux-deconfigured-cpus/node/online -deleted file mode 100644 -index a41eb32..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/online -+++ /dev/null -@@ -1 +0,0 @@ --0-1,16-17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/possible b/tests/nodeinfodata/linux-deconfigured-cpus/node/possible -deleted file mode 100644 -index 8d232c7..0000000 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/possible -+++ /dev/null -@@ -1 +0,0 @@ --0-255 -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index 60467bc..3fffdb2 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -234,7 +234,7 @@ mymain(void) - {"raspberrypi", VIR_ARCH_ARMV6L}, - {"f21-mustang", VIR_ARCH_AARCH64}, - {"rhelsa-3.19.0-mustang", VIR_ARCH_AARCH64}, -- {"deconfigured-cpus", VIR_ARCH_PPC64}, -+ {"deconf-cpus", VIR_ARCH_PPC64}, - }; - - if (virInitialize() < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-Reserve-existing-USB-addresses.patch b/SOURCES/libvirt-Reserve-existing-USB-addresses.patch new file mode 100644 index 0000000..6a26e8b --- /dev/null +++ b/SOURCES/libvirt-Reserve-existing-USB-addresses.patch @@ -0,0 +1,232 @@ +From 5749f8cb78cea11e1247fdcd6108fc632c38a3bc Mon Sep 17 00:00:00 2001 +Message-Id: <5749f8cb78cea11e1247fdcd6108fc632c38a3bc@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:53 +0200 +Subject: [PATCH] Reserve existing USB addresses +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Check if they fit on the USB controllers the domain has, +and error out if two devices try to use the same address. + +(cherry picked from commit ddd31fd7dce3ffaf07d31502c57e1ca940f454fa) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/domain_addr.c | 42 ++++++++++++++++++++++ + src/conf/domain_addr.h | 4 +++ + src/libvirt_private.syms | 1 + + src/qemu/qemu_domain.c | 1 + + src/qemu/qemu_domain.h | 1 + + src/qemu/qemu_domain_address.c | 38 +++++++++++++++++++- + .../qemuxml2argv-usb-hub-conflict.xml | 22 ++++++++++++ + tests/qemuxml2argvtest.c | 3 ++ + 8 files changed, 111 insertions(+), 1 deletion(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-conflict.xml + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index ad20fef..bbac399 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1562,3 +1562,45 @@ virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, + } + return 0; + } ++ ++ ++int ++virDomainUSBAddressReserve(virDomainDeviceInfoPtr info, ++ void *data) ++{ ++ virDomainUSBAddressSetPtr addrs = data; ++ virDomainUSBAddressHubPtr targetHub = NULL; ++ char *portStr = NULL; ++ int ret = -1; ++ int targetPort; ++ ++ if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) ++ return 0; ++ ++ if (!virDomainUSBAddressPortIsValid(info->addr.usb.port)) ++ return 0; ++ ++ portStr = virDomainUSBAddressPortFormat(info->addr.usb.port); ++ if (!portStr) ++ goto cleanup; ++ VIR_DEBUG("Reserving USB address bus=%u port=%s", info->addr.usb.bus, portStr); ++ ++ if (!(targetHub = virDomainUSBAddressFindPort(addrs, info, &targetPort, ++ portStr))) ++ goto cleanup; ++ ++ if (virBitmapIsBitSet(targetHub->portmap, targetPort)) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("Duplicate USB address bus %u port %s"), ++ info->addr.usb.bus, portStr); ++ goto cleanup; ++ } ++ ++ ignore_value(virBitmapSetBit(targetHub->portmap, targetPort)); ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(portStr); ++ return ret; ++} +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index 2bd4a0d..a24d216 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -275,4 +275,8 @@ int virDomainUSBAddressSetAddControllers(virDomainUSBAddressSetPtr addrs, + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + void virDomainUSBAddressSetFree(virDomainUSBAddressSetPtr addrs); + ++int ++virDomainUSBAddressReserve(virDomainDeviceInfoPtr info, ++ void *data) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + #endif /* __DOMAIN_ADDR_H__ */ +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index f0fed8e..f66ccf5 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -110,6 +110,7 @@ virDomainPCIControllerModelToConnectType; + virDomainUSBAddressPortFormat; + virDomainUSBAddressPortFormatBuf; + virDomainUSBAddressPortIsValid; ++virDomainUSBAddressReserve; + virDomainUSBAddressSetAddControllers; + virDomainUSBAddressSetCreate; + virDomainUSBAddressSetFree; +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 5b4d7a3..8b0f847 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1244,6 +1244,7 @@ qemuDomainObjPrivateFree(void *data) + virDomainPCIAddressSetFree(priv->pciaddrs); + virDomainCCWAddressSetFree(priv->ccwaddrs); + virDomainVirtioSerialAddrSetFree(priv->vioserialaddrs); ++ virDomainUSBAddressSetFree(priv->usbaddrs); + virDomainChrSourceDefFree(priv->monConfig); + qemuDomainObjFreeJob(priv); + VIR_FREE(priv->vcpupids); +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index c87dcc7..b71a28d 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -190,6 +190,7 @@ struct _qemuDomainObjPrivate { + virDomainPCIAddressSetPtr pciaddrs; + virDomainCCWAddressSetPtr ccwaddrs; + virDomainVirtioSerialAddrSetPtr vioserialaddrs; ++ virDomainUSBAddressSetPtr usbaddrs; + + virQEMUCapsPtr qemuCaps; + char *lockState; +diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c +index ee44d45..f66b2f0 100644 +--- a/src/qemu/qemu_domain_address.c ++++ b/src/qemu/qemu_domain_address.c +@@ -1622,11 +1622,44 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, + } + + ++static int ++qemuDomainAssignUSBAddresses(virDomainDefPtr def, ++ virDomainObjPtr obj) ++{ ++ int ret = -1; ++ virDomainUSBAddressSetPtr addrs = NULL; ++ qemuDomainObjPrivatePtr priv = NULL; ++ ++ if (!(addrs = virDomainUSBAddressSetCreate())) ++ goto cleanup; ++ ++ if (virDomainUSBAddressSetAddControllers(addrs, def) < 0) ++ goto cleanup; ++ ++ if (virDomainUSBDeviceDefForeach(def, virDomainUSBAddressReserve, addrs, ++ true) < 0) ++ goto cleanup; ++ ++ VIR_DEBUG("Existing USB addresses have been reserved"); ++ ++ if (obj && obj->privateData) { ++ priv = obj->privateData; ++ priv->usbaddrs = addrs; ++ addrs = NULL; ++ } ++ ret = 0; ++ ++ cleanup: ++ virDomainUSBAddressSetFree(addrs); ++ return ret; ++} ++ ++ + int + qemuDomainAssignAddresses(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, + virDomainObjPtr obj, +- bool newDomain ATTRIBUTE_UNUSED) ++ bool newDomain) + { + if (qemuDomainAssignVirtioSerialAddresses(def, obj) < 0) + return -1; +@@ -1642,6 +1675,9 @@ qemuDomainAssignAddresses(virDomainDefPtr def, + if (qemuDomainAssignPCIAddresses(def, qemuCaps, obj) < 0) + return -1; + ++ if (newDomain && qemuDomainAssignUSBAddresses(def, obj) < 0) ++ return -1; ++ + return 0; + } + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-conflict.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-conflict.xml +new file mode 100644 +index 0000000..9a48ba0 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-conflict.xml +@@ -0,0 +1,22 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 4389e24..9c18989 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1159,6 +1159,9 @@ mymain(void) + DO_TEST("usb-hub", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); ++ DO_TEST_PARSE_ERROR("usb-hub-conflict", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, ++ QEMU_CAPS_NODEFCONFIG); + DO_TEST("usb-port-missing", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); +-- +2.9.2 + diff --git a/SOURCES/libvirt-Revert-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch b/SOURCES/libvirt-Revert-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch new file mode 100644 index 0000000..5795199 --- /dev/null +++ b/SOURCES/libvirt-Revert-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch @@ -0,0 +1,44 @@ +From 03832c723800e942e67bdc15595844b07422c147 Mon Sep 17 00:00:00 2001 +Message-Id: <03832c723800e942e67bdc15595844b07422c147@dist-git> +From: Erik Skultety +Date: Tue, 16 Aug 2016 13:06:01 +0200 +Subject: [PATCH] Revert "admin: Fix the default uri for session daemon to + libvirtd:///session" + +The problem is, that the patch fixed the issue in its own way because the +original upstream commit 30ce2f0e (which was an incorrect upstream fix anyway) +was dependent on commit f5da0d18 which wasn't backported, thus causing +conflicts. However, it turned out that f5da0d18 had to be backported +eventually, therefore the issue with session daemon uri for virt-admin can be +fixed by a proper backport of upstream commit 9e5e7f3a (that fixes 30ce2f0e in +upstream). + +https://bugzilla.redhat.com/show_bug.cgi?id=1367269 +Signed-off-by: Erik Skultety +--- + src/libvirt-admin.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c +index fb2f7b8..f07cb10 100644 +--- a/src/libvirt-admin.c ++++ b/src/libvirt-admin.c +@@ -181,13 +181,9 @@ virAdmGetDefaultURI(virConfPtr conf) + /* Since we can't probe connecting via any hypervisor driver as libvirt + * does, if no explicit URI was given and neither the environment + * variable, nor the configuration parameter had previously been set, +- * we set the default admin server URI to 'libvirtd:///system' or +- * 'libvirtd:///session' depending on the process's EUID. ++ * we set the default admin server URI to 'libvirtd://system'. + */ +- if (geteuid() == 0) +- uristr = "libvirtd:///system"; +- else +- uristr = "libvirtd:///session"; ++ uristr = "libvirtd:///system"; + } + + return uristr; +-- +2.9.2 + diff --git a/SOURCES/libvirt-Revert-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch b/SOURCES/libvirt-Revert-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch deleted file mode 100644 index fa789ef..0000000 --- a/SOURCES/libvirt-Revert-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch +++ /dev/null @@ -1,52 +0,0 @@ -From e70e020cf8c946d4f5df161d469d6e2b626cccd2 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Tue, 22 Sep 2015 11:02:05 -0400 -Subject: [PATCH] Revert "qemu: Fix integer/boolean logic in qemuSetUnprivSGIO" - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -This reverts commit 69b850fe2a19d0c32ae2f209e8d8463df6ead665. (upstream) -This reverts commit 8c46231056f7c633a9f8576018d764e3a0b7251f. (downstream) - -This change broke the ability to "clear" or reset unfiltered back -to filtered. - -(cherry picked from commit ec6754db57510173be372e3981ddb6a5cefbcce0) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 10 +++------- - 1 file changed, 3 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index 030261e..8abbb02 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1449,7 +1449,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - char *sysfs_path = NULL; - char *hostdev_path = NULL; - const char *path = NULL; -- bool val; -+ int val = -1; - int ret = -1; - - /* "sgio" is only valid for block disk; cdrom -@@ -1491,12 +1491,8 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - * whitelist is enabled. But if requesting unfiltered access, always call - * virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio. - */ -- if (!val || !virFileExists(sysfs_path)) { -- ret = 0; -- goto cleanup; -- } -- -- if (virSetDeviceUnprivSGIO(path, NULL, 1) < 0) -+ if ((virFileExists(sysfs_path) || val == 1) && -+ virSetDeviceUnprivSGIO(path, NULL, val) < 0) - goto cleanup; - - ret = 0; --- -2.5.3 - diff --git a/SOURCES/libvirt-Separate-isa-fdc-options-generation.patch b/SOURCES/libvirt-Separate-isa-fdc-options-generation.patch deleted file mode 100644 index 650a518..0000000 --- a/SOURCES/libvirt-Separate-isa-fdc-options-generation.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 699ce9cb3514bc0458ab61e4e82b725922011dbd Mon Sep 17 00:00:00 2001 -Message-Id: <699ce9cb3514bc0458ab61e4e82b725922011dbd@dist-git> -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -Date: Wed, 8 Jul 2015 15:56:46 +0200 -Subject: [PATCH] Separate isa-fdc options generation -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -https://bugzilla.redhat.com/show_bug.cgi?id=1227880 - -For the implicit controller, we set them via -global. -Separating them will allow reuse for explicit fdc controller as well. - -No functional impact apart from one extra allocation. - -(cherry picked from commit 4ef21ec192f0de6e638d22b6a406cd87744f6b99) -Signed-off-by: Ján Tomko -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 23 +++++++++++++++-------- - 1 file changed, 15 insertions(+), 8 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index ca14ffc..d8ce22f 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -9805,18 +9805,25 @@ qemuBuildCommandLine(virConnectPtr conn, - - if (withDeviceArg) { - if (disk->bus == VIR_DOMAIN_DISK_BUS_FDC) { -+ if (virAsprintf(&optstr, "drive%c=drive-%s", -+ disk->info.addr.drive.unit ? 'B' : 'A', -+ disk->info.alias) < 0) -+ goto error; -+ - virCommandAddArg(cmd, "-global"); -- virCommandAddArgFormat(cmd, "isa-fdc.drive%c=drive-%s", -- disk->info.addr.drive.unit -- ? 'B' : 'A', -- disk->info.alias); -+ virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr); -+ VIR_FREE(optstr); - - if (bootindex) { -+ if (virAsprintf(&optstr, "bootindex%c=%d", -+ disk->info.addr.drive.unit -+ ? 'B' : 'A', -+ bootindex) < 0) -+ goto error; -+ - virCommandAddArg(cmd, "-global"); -- virCommandAddArgFormat(cmd, "isa-fdc.bootindex%c=%d", -- disk->info.addr.drive.unit -- ? 'B' : 'A', -- bootindex); -+ virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr); -+ VIR_FREE(optstr); - } - } else { - virCommandAddArg(cmd, "-device"); --- -2.4.5 - diff --git a/SOURCES/libvirt-Start-daemon-only-after-filesystems-are-mounted.patch b/SOURCES/libvirt-Start-daemon-only-after-filesystems-are-mounted.patch deleted file mode 100644 index a2a58c7..0000000 --- a/SOURCES/libvirt-Start-daemon-only-after-filesystems-are-mounted.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 7020e2cb9168abfef903e7c9447430a2abe02981 Mon Sep 17 00:00:00 2001 -Message-Id: <7020e2cb9168abfef903e7c9447430a2abe02981@dist-git> -From: Martin Kletzander -Date: Wed, 26 Aug 2015 16:32:52 +0200 -Subject: [PATCH] Start daemon only after filesystems are mounted - -https://bugzilla.redhat.com/show_bug.cgi?id=1255228 - -When images are on mounted filesystems, there is no guarantee libvirtd -will start before they are mounted. Since we want to start after both -local and remote filesystems are mounted, we need to add both local-fs -and remote-fs as targets that should precede starting libvirtd service. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 3418e7815a9fc9245aa6476415a353790ed3cb8b) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - daemon/libvirtd.service.in | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/daemon/libvirtd.service.in b/daemon/libvirtd.service.in -index 1759ac8..9e67e43 100644 ---- a/daemon/libvirtd.service.in -+++ b/daemon/libvirtd.service.in -@@ -5,6 +5,8 @@ After=network.target - After=dbus.service - After=iscsid.service - After=apparmor.service -+After=local-fs.target -+After=remote-fs.target - Documentation=man:libvirtd(8) - Documentation=http://libvirt.org - --- -2.5.1 - diff --git a/SOURCES/libvirt-Store-USB-port-path-as-an-array-of-integers.patch b/SOURCES/libvirt-Store-USB-port-path-as-an-array-of-integers.patch new file mode 100644 index 0000000..c640541 --- /dev/null +++ b/SOURCES/libvirt-Store-USB-port-path-as-an-array-of-integers.patch @@ -0,0 +1,200 @@ +From 2debcb6bcdca2837ff5b44480d9f6addeaba76bc Mon Sep 17 00:00:00 2001 +Message-Id: <2debcb6bcdca2837ff5b44480d9f6addeaba76bc@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Thu, 21 Jul 2016 15:57:49 +0200 +Subject: [PATCH] Store USB port path as an array of integers +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In preparation to tracking which USB addresses are occupied. +Introduce two helper functions for printing the port path +as a string and appending it to a virBuffer. + +(cherry picked from commit f820d5bf6fafa2932ee6b21c34fee4c464500ef3) +Signed-off-by: Ján Tomko + +https://bugzilla.redhat.com/show_bug.cgi?id=1215968 +--- + src/conf/device_conf.h | 2 +- + src/conf/domain_addr.c | 33 +++++++++++++++++++++++++++++++++ + src/conf/domain_addr.h | 12 ++++++++++++ + src/conf/domain_conf.c | 20 ++++++++++---------- + src/libvirt_private.syms | 3 +++ + src/qemu/qemu_command.c | 5 ++++- + 6 files changed, 63 insertions(+), 12 deletions(-) + +diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h +index 9b79160..8443de6 100644 +--- a/src/conf/device_conf.h ++++ b/src/conf/device_conf.h +@@ -84,7 +84,7 @@ typedef struct _virDomainDeviceCcidAddress { + + typedef struct _virDomainDeviceUSBAddress { + unsigned int bus; +- char *port; ++ unsigned int port[VIR_DOMAIN_DEVICE_USB_MAX_PORT_DEPTH]; + } virDomainDeviceUSBAddress, *virDomainDeviceUSBAddressPtr; + + typedef struct _virDomainDeviceSpaprVioAddress { +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 794270d..741d045 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1251,3 +1251,36 @@ virDomainVirtioSerialAddrRelease(virDomainVirtioSerialAddrSetPtr addrs, + VIR_FREE(str); + return ret; + } ++ ++ ++bool ++virDomainUSBAddressPortIsValid(unsigned int *port) ++{ ++ return port[0] != 0; ++} ++ ++ ++void ++virDomainUSBAddressPortFormatBuf(virBufferPtr buf, ++ unsigned int *port) ++{ ++ size_t i; ++ ++ for (i = 0; i < VIR_DOMAIN_DEVICE_USB_MAX_PORT_DEPTH; i++) { ++ if (port[i] == 0) ++ break; ++ virBufferAsprintf(buf, "%u.", port[i]); ++ } ++ virBufferTrim(buf, ".", -1); ++} ++ ++ ++char * ++virDomainUSBAddressPortFormat(unsigned int *port) ++{ ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ virDomainUSBAddressPortFormatBuf(&buf, port); ++ if (virBufferCheckError(&buf) < 0) ++ return NULL; ++ return virBufferContentAndReset(&buf); ++} +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index f3eda89..cfc74d5 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -237,4 +237,16 @@ virDomainVirtioSerialAddrRelease(virDomainVirtioSerialAddrSetPtr addrs, + virDomainDeviceInfoPtr info) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + ++bool ++virDomainUSBAddressPortIsValid(unsigned int *port) ++ ATTRIBUTE_NONNULL(1); ++ ++void ++virDomainUSBAddressPortFormatBuf(virBufferPtr buf, ++ unsigned int *port) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++char * ++virDomainUSBAddressPortFormat(unsigned int *port) ++ ATTRIBUTE_NONNULL(1); ++ + #endif /* __DOMAIN_ADDR_H__ */ +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 0bd8a30..bc01633 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -32,6 +32,7 @@ + #include "internal.h" + #include "virerror.h" + #include "datatypes.h" ++#include "domain_addr.h" + #include "domain_conf.h" + #include "snapshot_conf.h" + #include "viralloc.h" +@@ -3313,8 +3314,6 @@ virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, + void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info) + { + VIR_FREE(info->alias); +- if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) +- VIR_FREE(info->addr.usb.port); + memset(&info->addr, 0, sizeof(info->addr)); + info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE; + VIR_FREE(info->romfile); +@@ -4860,7 +4859,11 @@ virDomainDeviceInfoFormat(virBufferPtr buf, + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB: + virBufferAsprintf(buf, " bus='%d'", info->addr.usb.bus); +- virBufferEscapeString(buf, " port='%s'", info->addr.usb.port); ++ if (virDomainUSBAddressPortIsValid(info->addr.usb.port)) { ++ virBufferAddLit(buf, " port='"); ++ virDomainUSBAddressPortFormatBuf(buf, info->addr.usb.port); ++ virBufferAddLit(buf, "'"); ++ } + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: +@@ -5092,14 +5095,14 @@ virDomainDeviceCcidAddressParseXML(xmlNodePtr node, + } + + static int +-virDomainDeviceUSBAddressParsePort(char *port) ++virDomainDeviceUSBAddressParsePort(virDomainDeviceUSBAddressPtr addr, ++ char *port) + { +- unsigned int p; + char *tmp = port; + size_t i; + + for (i = 0; i < VIR_DOMAIN_DEVICE_USB_MAX_PORT_DEPTH; i++) { +- if (virStrToLong_uip(tmp, &tmp, 10, &p) < 0) ++ if (virStrToLong_uip(tmp, &tmp, 10, &addr->port[i]) < 0) + break; + + if (*tmp == '\0') +@@ -5126,12 +5129,9 @@ virDomainDeviceUSBAddressParseXML(xmlNodePtr node, + port = virXMLPropString(node, "port"); + bus = virXMLPropString(node, "bus"); + +- if (port && virDomainDeviceUSBAddressParsePort(port) < 0) ++ if (port && virDomainDeviceUSBAddressParsePort(addr, port) < 0) + goto cleanup; + +- addr->port = port; +- port = NULL; +- + if (bus && + virStrToLong_uip(bus, NULL, 10, &addr->bus) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index de620a8..44b78e0 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -107,6 +107,9 @@ virDomainPCIAddressSetGrow; + virDomainPCIAddressSlotInUse; + virDomainPCIAddressValidate; + virDomainPCIControllerModelToConnectType; ++virDomainUSBAddressPortFormat; ++virDomainUSBAddressPortFormatBuf; ++virDomainUSBAddressPortIsValid; + virDomainVirtioSerialAddrAssign; + virDomainVirtioSerialAddrAutoAssign; + virDomainVirtioSerialAddrIsComplete; +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index af6146f..300c01c 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -376,7 +376,10 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, + info->addr.usb.bus))) + goto cleanup; + virBufferAsprintf(buf, ",bus=%s.0", contAlias); +- virBufferEscapeString(buf, ",port=%s", info->addr.usb.port); ++ if (virDomainUSBAddressPortIsValid(info->addr.usb.port)) { ++ virBufferAddLit(buf, ",port="); ++ virDomainUSBAddressPortFormatBuf(buf, info->addr.usb.port); ++ } + } else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) { + if (info->addr.spaprvio.has_reg) + virBufferAsprintf(buf, ",reg=0x%llx", info->addr.spaprvio.reg); +-- +2.9.2 + diff --git a/SOURCES/libvirt-admin-Fix-default-uri-config-option-name-s-admin_uri_default-uri_default.patch b/SOURCES/libvirt-admin-Fix-default-uri-config-option-name-s-admin_uri_default-uri_default.patch new file mode 100644 index 0000000..b296720 --- /dev/null +++ b/SOURCES/libvirt-admin-Fix-default-uri-config-option-name-s-admin_uri_default-uri_default.patch @@ -0,0 +1,79 @@ +From a13eac3b9909d824e1f821b869ae166a25479121 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Tue, 16 Aug 2016 13:06:03 +0200 +Subject: [PATCH] admin: Fix default uri config option name + s/admin_uri_default/uri_default + +The original name 'admin_uri_default' was introduced to our code by commit +dbecb87f. However, at that time we already had a separate config file for +admin library but the commit mentioned above didn't properly adjust the +config's option name. The result is that when we're loading the config, we +check a non-existent config option (there's not much to do with the URIs +anyway, since we only allow local connection). Additionally, virt-admin's man +page documents, that the default URI can be altered by setting +admin_uri_default option. So the fix proposed by this patch leaves the +libvirt-admin.conf as is and adjusts the naming in the code as well as in the +virt-admin's man page. + +Signed-off-by: Erik Skultety +(cherry picked from commit f5f32bcd1bb7d96b38c34a85658ac0996683f8bc) + +https://bugzilla.redhat.com/show_bug.cgi?id=1367269 +Signed-off-by: Erik Skultety + + Conflicts: + src/libvirt-admin.c - conflicts caused by downstream commit 00f1be9c + which had to be modified compared to its upstream original f5da0d18 + that was relying on some newly added accessors which were not + backported. +--- + src/libvirt-admin.c | 4 ++-- + tools/virt-admin.pod | 7 ++++--- + 2 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c +index c485752..f3bbe8c 100644 +--- a/src/libvirt-admin.c ++++ b/src/libvirt-admin.c +@@ -169,10 +169,10 @@ virAdmGetDefaultURI(virConfPtr conf, char **uristr) + return -1; + VIR_DEBUG("Using LIBVIRT_ADMIN_DEFAULT_URI '%s'", *uristr); + } else { +- if ((value = virConfGetValue(conf, "admin_uri_default"))) { ++ if ((value = virConfGetValue(conf, "uri_default"))) { + if (value->type != VIR_CONF_STRING) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("Expected a string for 'admin_uri_default' " ++ _("Expected a string for 'uri_default' " + "config parameter")); + return -1; + } +diff --git a/tools/virt-admin.pod b/tools/virt-admin.pod +index afc4689..49b267f 100644 +--- a/tools/virt-admin.pod ++++ b/tools/virt-admin.pod +@@ -127,7 +127,7 @@ Will print the current directory. + + (Re)-Connect to a daemon's administrating server. The I parameter + specifies how to connect to the administrating server. +-If I or I (see below) were set, ++If I or I (see below) were set, + I is automatically issued every time a command that requires an + active connection is executed. Note that this only applies if there is no + connection at all or there is an inactive one. +@@ -140,8 +140,9 @@ L on how to make URIs. + =item B + + Prints the administrating server canonical URI, can be useful in shell mode. If +-no I was specified, neither I or +-I were set, libvirtd:///system is used. ++no I was specified, neither I environment ++variable nor I option (libvirt-admin.conf) were set, ++libvirtd:///system is used. + + =back + +-- +2.9.2 + diff --git a/SOURCES/libvirt-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch b/SOURCES/libvirt-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch new file mode 100644 index 0000000..c2cc01f --- /dev/null +++ b/SOURCES/libvirt-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch @@ -0,0 +1,47 @@ +From eb41dae660606b398ee7366829f9f5a41c686887 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Tue, 9 Aug 2016 16:09:21 +0200 +Subject: [PATCH] admin: Fix the default uri for session daemon to + libvirtd:///session + +Just like we decide on which URI we go with based on EUID for qemu in remote +driver, do a similar thing for admin except we do not spawn a daemon in this +case. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1356858 + +Signed-off-by: Erik Skultety +(cherry picked from commit 30ce2f0e2ad1335df6e4c9053eae822963531f97) +Signed-off-by: Erik Skultety + + Conflicts: + src/libvirt-admin.c - conflict caused by commit f5da0d18 which changed + the returned type of virAdmGetDefaultURI but was not backported +--- + src/libvirt-admin.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c +index f07cb10..fb2f7b8 100644 +--- a/src/libvirt-admin.c ++++ b/src/libvirt-admin.c +@@ -181,9 +181,13 @@ virAdmGetDefaultURI(virConfPtr conf) + /* Since we can't probe connecting via any hypervisor driver as libvirt + * does, if no explicit URI was given and neither the environment + * variable, nor the configuration parameter had previously been set, +- * we set the default admin server URI to 'libvirtd://system'. ++ * we set the default admin server URI to 'libvirtd:///system' or ++ * 'libvirtd:///session' depending on the process's EUID. + */ +- uristr = "libvirtd:///system"; ++ if (geteuid() == 0) ++ uristr = "libvirtd:///system"; ++ else ++ uristr = "libvirtd:///session"; + } + + return uristr; +-- +2.9.2 + diff --git a/SOURCES/libvirt-admin-Retrieve-the-SASL-context-for-both-local-and-remote-connection.patch b/SOURCES/libvirt-admin-Retrieve-the-SASL-context-for-both-local-and-remote-connection.patch new file mode 100644 index 0000000..6973efb --- /dev/null +++ b/SOURCES/libvirt-admin-Retrieve-the-SASL-context-for-both-local-and-remote-connection.patch @@ -0,0 +1,54 @@ +From 342133607ff39eac851667f4a86abd9b97f3cf22 Mon Sep 17 00:00:00 2001 +Message-Id: <342133607ff39eac851667f4a86abd9b97f3cf22@dist-git> +From: Erik Skultety +Date: Tue, 2 Aug 2016 08:47:44 +0200 +Subject: [PATCH] admin: Retrieve the SASL context for both local and remote + connection + +When commit 4a0e9108 added a support for client information retrieval, it made +the API return SASL identity info only for clients connected remotely, yet SASL +can be happily used with UNIX sockets as well. + +Signed-off-by: Erik Skultety +(cherry picked from commit 385ec6280fdad8548b5997577b91931d1ed79aaa) + +https://bugzilla.redhat.com/show_bug.cgi?id=1361948 +Signed-off-by: Erik Skultety +--- + daemon/admin_server.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/daemon/admin_server.c b/daemon/admin_server.c +index 9f24f68..5bbf229 100644 +--- a/daemon/admin_server.c ++++ b/daemon/admin_server.c +@@ -237,19 +237,19 @@ adminClientGetInfo(virNetServerClientPtr client, + readonly) < 0) + goto cleanup; + ++ if (virIdentityGetSASLUserName(identity, &attr) < 0 || ++ (attr && ++ virTypedParamsAddString(&tmpparams, nparams, &maxparams, ++ VIR_CLIENT_INFO_SASL_USER_NAME, ++ attr) < 0)) ++ goto cleanup; ++ + if (!virNetServerClientIsLocal(client)) { + if (virTypedParamsAddString(&tmpparams, nparams, &maxparams, + VIR_CLIENT_INFO_SOCKET_ADDR, + sock_addr) < 0) + goto cleanup; + +- if (virIdentityGetSASLUserName(identity, &attr) < 0 || +- (attr && +- virTypedParamsAddString(&tmpparams, nparams, &maxparams, +- VIR_CLIENT_INFO_SASL_USER_NAME, +- attr) < 0)) +- goto cleanup; +- + if (virIdentityGetX509DName(identity, &attr) < 0 || + (attr && + virTypedParamsAddString(&tmpparams, nparams, &maxparams, +-- +2.9.2 + diff --git a/SOURCES/libvirt-admin-rpc-virnetserver-Fix-updating-of-the-client-limits.patch b/SOURCES/libvirt-admin-rpc-virnetserver-Fix-updating-of-the-client-limits.patch new file mode 100644 index 0000000..89a6c56 --- /dev/null +++ b/SOURCES/libvirt-admin-rpc-virnetserver-Fix-updating-of-the-client-limits.patch @@ -0,0 +1,40 @@ +From e9c3dd530daa481e2c3e5b63bf19c0360ee225c2 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Tue, 2 Aug 2016 15:20:53 +0200 +Subject: [PATCH] admin: rpc: virnetserver: Fix updating of the client limits + +Commit 2737aaaf changed our policy for accepting new clients in a way, that +instead of accepting new clients only to disconnect them immediately, since +that would overcommit the limit, we temporarily disable polling for the +dedicated file descriptor, so any new connection will queue on the socket. +Commit 8b1f0469 then added the possibility to change the limits during runtime +but it didn't re-enable polling for the previously disabled file descriptor, +thus any new connection would still continue to queue on the socket. This patch +forces an update of the services each time the limits were changed in some way. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1357776 + +Signed-off-by: Erik Skultety +(cherry picked from commit e9ce8a7d24a94f0be19705ae0e63aaa054c39e88) +Signed-off-by: Erik Skultety +--- + src/rpc/virnetserver.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c +index c5caef3..5b6bc4a 100644 +--- a/src/rpc/virnetserver.c ++++ b/src/rpc/virnetserver.c +@@ -1071,6 +1071,8 @@ virNetServerSetClientLimits(virNetServerPtr srv, + if (maxClientsUnauth >= 0) + srv->nclients_unauth_max = maxClientsUnauth; + ++ virNetServerCheckLimits(srv); ++ + ret = 0; + cleanup: + virObjectUnlock(srv); +-- +2.9.2 + diff --git a/SOURCES/libvirt-api-Adjust-comment-for-virDomainAddIOThread.patch b/SOURCES/libvirt-api-Adjust-comment-for-virDomainAddIOThread.patch deleted file mode 100644 index 3ed598b..0000000 --- a/SOURCES/libvirt-api-Adjust-comment-for-virDomainAddIOThread.patch +++ /dev/null @@ -1,43 +0,0 @@ -From eb4814f8a769829820cf97f959fded8dc6e03cef Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Tue, 18 Aug 2015 14:47:14 -0400 -Subject: [PATCH] api: Adjust comment for virDomainAddIOThread - -https://bugzilla.redhat.com/show_bug.cgi?id=1251886 - -The comment for the function indicated that iothread_id had to be -a positive non-zero value; however, that wasn't checked - that is -a value of 0 is/was allowed by the API and was left up to the -hypervisor to reject the value. - -More than likely this nuance was missed during the many "adjustments" -to the API in the review phase. - -(cherry picked from commit 53058e11aa1d5ba9e86153ed47e97c4988b5eef6) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/libvirt-domain.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c -index c4377bf..55ee28d 100644 ---- a/src/libvirt-domain.c -+++ b/src/libvirt-domain.c -@@ -7952,9 +7952,9 @@ virDomainPinIOThread(virDomainPtr domain, - * @iothread_id: the specific IOThread ID value to add - * @flags: bitwise-OR of virDomainModificationImpact - * -- * Dynamically add an IOThread to the domain. If @iothread_id is a positive -- * non-zero value, then attempt to add the specific IOThread ID and error -- * out if the iothread id already exists. -+ * Dynamically add an IOThread to the domain. It is left up to the -+ * underlying virtual hypervisor to determine the valid range for an -+ * @iothread_id and determining whether the @iothread_id already exists. - * - * Note that this call can fail if the underlying virtualization hypervisor - * does not support it or if growing the number is arbitrarily limited. --- -2.5.0 - diff --git a/SOURCES/libvirt-api-Remove-check-on-iothread_id-arg-in-virDomainPinIOThread.patch b/SOURCES/libvirt-api-Remove-check-on-iothread_id-arg-in-virDomainPinIOThread.patch deleted file mode 100644 index 7f346e1..0000000 --- a/SOURCES/libvirt-api-Remove-check-on-iothread_id-arg-in-virDomainPinIOThread.patch +++ /dev/null @@ -1,34 +0,0 @@ -From f5966b72599ddc1335403cff13159e872dd95007 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Tue, 18 Aug 2015 14:47:13 -0400 -Subject: [PATCH] api: Remove check on iothread_id arg in virDomainPinIOThread - -https://bugzilla.redhat.com/show_bug.cgi?id=1251886 - -Allow 0 as an iothread_id and force the hypervisor to handle. -The qemuDomainPinIOThread API will look up the iothread_id of -0 and not find it and message that anyway. - -(cherry picked from commit d64b81a8f0b0a4660691565cde65b13df2647391) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/libvirt-domain.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c -index 837933f..c4377bf 100644 ---- a/src/libvirt-domain.c -+++ b/src/libvirt-domain.c -@@ -7926,7 +7926,6 @@ virDomainPinIOThread(virDomainPtr domain, - conn = domain->conn; - - virCheckReadOnlyGoto(conn->flags, error); -- virCheckPositiveArgGoto(iothread_id, error); - virCheckNonNullArgGoto(cpumap, error); - virCheckPositiveArgGoto(maplen, error); - --- -2.5.0 - diff --git a/SOURCES/libvirt-audit-Audit-information-about-shmem-devices.patch b/SOURCES/libvirt-audit-Audit-information-about-shmem-devices.patch new file mode 100644 index 0000000..8a7d2c3 --- /dev/null +++ b/SOURCES/libvirt-audit-Audit-information-about-shmem-devices.patch @@ -0,0 +1,134 @@ +From 806108ea6df82f0702a5933feb75691828f9cabe Mon Sep 17 00:00:00 2001 +Message-Id: <806108ea6df82f0702a5933feb75691828f9cabe@dist-git> +From: Martin Kletzander +Date: Wed, 14 Sep 2016 12:49:18 +0200 +Subject: [PATCH] audit: Audit information about shmem devices + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1218603 + +Signed-off-by: Martin Kletzander +(cherry picked from commit 94e2be842411b9f8ec9165c8d25c93716c1b30ca) +Signed-off-by: Martin Kletzander +--- + docs/auditlog.html.in | 19 +++++++++++++++++++ + src/conf/domain_audit.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + src/conf/domain_audit.h | 4 ++++ + src/libvirt_private.syms | 1 + + 4 files changed, 66 insertions(+) + +diff --git a/docs/auditlog.html.in b/docs/auditlog.html.in +index 012d068..0c778aa 100644 +--- a/docs/auditlog.html.in ++++ b/docs/auditlog.html.in +@@ -352,5 +352,24 @@ +
The name of the cgroup controller
+ + ++ ++

Shared memory

++

++ The msg field will include the following sub-fields ++

++ ++
++
resrc
++
The type of resource assigned. Set to shmem
++
reason
++
The reason which caused the resource to be assigned to happen
++
size
++
The size of the shared memory region
++
shmem
++
Name of the shared memory region
++
source
++
Path of the backing character device for given emulated device
++
++ + + +diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c +index 6ad0acb..f0cc49c 100644 +--- a/src/conf/domain_audit.c ++++ b/src/conf/domain_audit.c +@@ -889,6 +889,9 @@ virDomainAuditStart(virDomainObjPtr vm, const char *reason, bool success) + if (vm->def->tpm) + virDomainAuditTPM(vm, vm->def->tpm, "start", true); + ++ for (i = 0; i < vm->def->nshmems; i++) ++ virDomainAuditShmem(vm, vm->def->shmems[i], "start", true); ++ + virDomainAuditMemory(vm, 0, virDomainDefGetMemoryTotal(vm->def), + "start", true); + virDomainAuditVcpu(vm, 0, virDomainDefGetVcpus(vm->def), "start", true); +@@ -963,3 +966,42 @@ virDomainAuditSecurityLabel(virDomainObjPtr vm, bool success) + + VIR_FREE(vmname); + } ++ ++void ++virDomainAuditShmem(virDomainObjPtr vm, ++ virDomainShmemDefPtr def, ++ const char *reason, bool success) ++{ ++ char uuidstr[VIR_UUID_STRING_BUFLEN]; ++ char *vmname = virAuditEncode("vm", vm->def->name); ++ const char *srcpath = virDomainAuditChardevPath(&def->server.chr); ++ char *src = virAuditEncode("server", VIR_AUDIT_STR(srcpath)); ++ char *shmem = virAuditEncode("shmem", VIR_AUDIT_STR(def->name)); ++ const char *virt = virDomainVirtTypeToString(vm->def->virtType); ++ char *size = NULL; ++ ++ virUUIDFormat(vm->def->uuid, uuidstr); ++ ++ if (!vmname || !src || !size || !shmem || ++ virAsprintfQuiet(&size, "%llu", def->size) < 0) { ++ VIR_WARN("OOM while encoding audit message"); ++ goto cleanup; ++ } ++ ++ if (!virt) { ++ VIR_WARN("Unexpected virt type %d while encoding audit message", ++ vm->def->virtType); ++ virt = "?"; ++ } ++ ++ VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success, ++ "virt=%s resrc=shmem reason=%s %s uuid=%s size=%s %s %s", ++ virt, reason, vmname, uuidstr, size ?: "?", shmem, src); ++ ++ cleanup: ++ VIR_FREE(vmname); ++ VIR_FREE(src); ++ VIR_FREE(size); ++ VIR_FREE(shmem); ++ return; ++} +diff --git a/src/conf/domain_audit.h b/src/conf/domain_audit.h +index 97dadca..8cb585d 100644 +--- a/src/conf/domain_audit.h ++++ b/src/conf/domain_audit.h +@@ -129,6 +129,10 @@ void virDomainAuditRNG(virDomainObjPtr vm, + const char *reason, + bool success) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4); ++void virDomainAuditShmem(virDomainObjPtr vm, ++ virDomainShmemDefPtr def, ++ const char *reason, bool success) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); + + + #endif /* __VIR_DOMAIN_AUDIT_H__ */ +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 92475a2..5878360 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -145,6 +145,7 @@ virDomainAuditNetDevice; + virDomainAuditRedirdev; + virDomainAuditRNG; + virDomainAuditSecurityLabel; ++virDomainAuditShmem; + virDomainAuditStart; + virDomainAuditStop; + virDomainAuditVcpu; +-- +2.10.0 + diff --git a/SOURCES/libvirt-bridge_driver-Introduce-networkBandwidthChangeAllowed.patch b/SOURCES/libvirt-bridge_driver-Introduce-networkBandwidthChangeAllowed.patch deleted file mode 100644 index 259ec78..0000000 --- a/SOURCES/libvirt-bridge_driver-Introduce-networkBandwidthChangeAllowed.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 3e1dd6eacd48107e7646c8346bca73e280692542 Mon Sep 17 00:00:00 2001 -Message-Id: <3e1dd6eacd48107e7646c8346bca73e280692542@dist-git> -From: Michal Privoznik -Date: Fri, 14 Aug 2015 16:06:31 +0200 -Subject: [PATCH] bridge_driver: Introduce networkBandwidthChangeAllowed - -https://bugzilla.redhat.com/show_bug.cgi?id=1252473 - -When a domain vNIC's bandwidth is to be changed (at runtime) it is -possible that guaranteed minimal bandwidth (@floor) will change too. -Well, so far it is, because we still don't have an implementation that -allows setting it dynamically, so it's effectively erased on: - - #virsh domiftune $dom vnet0 --inbound 0 - -However, that's slightly unfortunate. We do some checks on domain -startup to see if @floor can be guaranteed. We ought do the same if -QoS is changed at runtime. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 41a1531de54476310572f694c0b9cb9c63d4191d) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/network/bridge_driver.c | 78 ++++++++++++++++++++++++++++++++++++++++++--- - src/network/bridge_driver.h | 12 +++++++ - 2 files changed, 86 insertions(+), 4 deletions(-) - -diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c -index 17fc430..04602ed 100644 ---- a/src/network/bridge_driver.c -+++ b/src/network/bridge_driver.c -@@ -4686,9 +4686,18 @@ networkGetNetworkAddress(const char *netname, char **netaddr) - * networkCheckBandwidth: - * @net: network QoS - * @ifaceBand: interface QoS (may be NULL if no QoS) -+ * @oldBandwidth: new interface QoS (may be NULL if no QoS) - * @ifaceMac: interface MAC (used in error messages for identification) - * @new_rate: new rate for non guaranteed class - * -+ * Function checks if @ifaceBand can be satisfied on @net. However, sometimes it -+ * may happen that the interface that @ifaceBand corresponds to is already -+ * plugged into the @net and the bandwidth is to be updated. In that case we -+ * need to check if new bandwidth can be satisfied. If that's the case -+ * @ifaceBand should point to new bandwidth settings and @oldBandwidth to -+ * current ones. If you want to suppress this functionality just pass -+ * @oldBandwidth == NULL. -+ * - * Returns: -1 if plugging would overcommit network QoS - * 0 if plugging is safe (@new_rate updated) - * 1 if no QoS is set (@new_rate untouched) -@@ -4696,6 +4705,7 @@ networkGetNetworkAddress(const char *netname, char **netaddr) - static int - networkCheckBandwidth(virNetworkObjPtr net, - virNetDevBandwidthPtr ifaceBand, -+ virNetDevBandwidthPtr oldBandwidth, - virMacAddr ifaceMac, - unsigned long long *new_rate) - { -@@ -4716,14 +4726,18 @@ networkCheckBandwidth(virNetworkObjPtr net, - return -1; - } - -- if (!ifaceBand || !ifaceBand->in || !ifaceBand->in->floor || -+ if (((!ifaceBand || !ifaceBand->in || !ifaceBand->in->floor) && -+ (!oldBandwidth || !oldBandwidth->in || !oldBandwidth->in->floor)) || - !netBand || !netBand->in) { - /* no QoS required, claim success */ - return 1; - } - - tmp_new_rate = netBand->in->average; -- tmp_floor_sum += ifaceBand->in->floor; -+ if (oldBandwidth && oldBandwidth->in) -+ tmp_floor_sum -= oldBandwidth->in->floor; -+ if (ifaceBand && ifaceBand->in) -+ tmp_floor_sum += ifaceBand->in->floor; - - /* check against peak */ - if (netBand->in->peak) { -@@ -4749,7 +4763,8 @@ networkCheckBandwidth(virNetworkObjPtr net, - goto cleanup; - } - -- *new_rate = tmp_new_rate; -+ if (new_rate) -+ *new_rate = tmp_new_rate; - ret = 0; - - cleanup: -@@ -4791,7 +4806,7 @@ networkPlugBandwidth(virNetworkObjPtr net, - char ifmac[VIR_MAC_STRING_BUFLEN]; - virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); - -- if ((plug_ret = networkCheckBandwidth(net, ifaceBand, -+ if ((plug_ret = networkCheckBandwidth(net, ifaceBand, NULL, - iface->mac, &new_rate)) < 0) { - /* helper reported error */ - goto cleanup; -@@ -4917,3 +4932,58 @@ networkNetworkObjTaint(virNetworkObjPtr net, - virNetworkTaintTypeToString(taint)); - } - } -+ -+ -+static bool -+networkBandwidthGenericChecks(virDomainNetDefPtr iface, -+ virNetDevBandwidthPtr newBandwidth) -+{ -+ virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); -+ unsigned long long old_floor, new_floor; -+ -+ if (virDomainNetGetActualType(iface) != VIR_DOMAIN_NET_TYPE_NETWORK) { -+ /* This is not an interface that's plugged into a network. -+ * We don't care. Thus from our POV bandwidth change is allowed. */ -+ return false; -+ } -+ -+ old_floor = new_floor = 0; -+ -+ if (ifaceBand && ifaceBand->in) -+ old_floor = ifaceBand->in->floor; -+ if (newBandwidth && newBandwidth->in) -+ new_floor = newBandwidth->in->floor; -+ -+ return new_floor != old_floor; -+} -+ -+ -+bool -+networkBandwidthChangeAllowed(virDomainNetDefPtr iface, -+ virNetDevBandwidthPtr newBandwidth) -+{ -+ virNetworkDriverStatePtr driver = networkGetDriver(); -+ virNetworkObjPtr network = NULL; -+ virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); -+ bool ret = false; -+ -+ if (!networkBandwidthGenericChecks(iface, newBandwidth)) -+ return true; -+ -+ network = virNetworkObjFindByName(driver->networks, iface->data.network.name); -+ if (!network) { -+ virReportError(VIR_ERR_NO_NETWORK, -+ _("no network with matching name '%s'"), -+ iface->data.network.name); -+ return false; -+ } -+ -+ if (networkCheckBandwidth(network, newBandwidth, ifaceBand, iface->mac, NULL) < 0) -+ goto cleanup; -+ -+ ret = true; -+ -+ cleanup: -+ virNetworkObjEndAPI(&network); -+ return ret; -+} -diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h -index 513ccf7..cce9237 100644 ---- a/src/network/bridge_driver.h -+++ b/src/network/bridge_driver.h -@@ -52,6 +52,11 @@ int networkDnsmasqConfContents(virNetworkObjPtr network, - char **configstr, - dnsmasqContext *dctx, - dnsmasqCapsPtr caps); -+ -+bool networkBandwidthChangeAllowed(virDomainNetDefPtr iface, -+ virNetDevBandwidthPtr newBandwidth) -+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -+ - # else - /* Define no-op replacements that don't drag in any link dependencies. */ - # define networkAllocateActualDevice(dom, iface) 0 -@@ -73,6 +78,13 @@ networkReleaseActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED, - return 0; - } - -+static inline bool -+networkBandwidthChangeAllowed(virDomainNetDefPtr iface ATTRIBUTE_UNUSED, -+ virNetDevBandwidthPtr newBandwidth ATTRIBUTE_UNUSED) -+{ -+ return true; -+} -+ - # endif - - typedef char *(*networkDnsmasqLeaseFileNameFunc)(const char *netname); --- -2.5.0 - diff --git a/SOURCES/libvirt-bridge_driver-Introduce-networkBandwidthUpdate.patch b/SOURCES/libvirt-bridge_driver-Introduce-networkBandwidthUpdate.patch deleted file mode 100644 index 765e46e..0000000 --- a/SOURCES/libvirt-bridge_driver-Introduce-networkBandwidthUpdate.patch +++ /dev/null @@ -1,276 +0,0 @@ -From b80365f3a798bfc245d3db7d7586d2e82b38f68e Mon Sep 17 00:00:00 2001 -Message-Id: -From: Michal Privoznik -Date: Fri, 14 Aug 2015 16:06:32 +0200 -Subject: [PATCH] bridge_driver: Introduce networkBandwidthUpdate - -https://bugzilla.redhat.com/show_bug.cgi?id=1252473 - -So, if a domain vNIC's bandwidth has been successfully set, it's -possible that because @floor is set on network's bridge, this -part may need updating too. And that's exactly what this function -does. While the previous commit introduced a function to check if -@floor can be satisfied, this does all the hard work. In general, -there may be three, well four possibilities: - - 1) No change in @floor value (either it remain unset, or its - value hasn't changed) - - 2) The @floor value has changed from a non-zero to a non-zero - value - - 3) New @floor is to be set - - 4) Old @floor must be cleared out - -The difference between 2), 3) and 4) is, that while in 2) the QoS -tree on the network's bridge already has a special class for the -vNIC, in 3) the class must be created from scratch. In 4) it must -be removed. Fortunately, we have helpers for all three -interesting cases. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 812932bea2c703d4031f947096f8efaf21b662bf) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/network/bridge_driver.c | 163 ++++++++++++++++++++++++++++++++++++-------- - src/network/bridge_driver.h | 11 +++ - 2 files changed, 145 insertions(+), 29 deletions(-) - -diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c -index 04602ed..666078c 100644 ---- a/src/network/bridge_driver.c -+++ b/src/network/bridge_driver.c -@@ -4794,38 +4794,17 @@ networkNextClassID(virNetworkObjPtr net) - return ret; - } - -+ - static int --networkPlugBandwidth(virNetworkObjPtr net, -- virDomainNetDefPtr iface) -+networkPlugBandwidthImpl(virNetworkObjPtr net, -+ virDomainNetDefPtr iface, -+ virNetDevBandwidthPtr ifaceBand, -+ unsigned long long new_rate) - { - virNetworkDriverStatePtr driver = networkGetDriver(); -- int ret = -1; -- int plug_ret; -- unsigned long long new_rate = 0; - ssize_t class_id = 0; -- char ifmac[VIR_MAC_STRING_BUFLEN]; -- virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); -- -- if ((plug_ret = networkCheckBandwidth(net, ifaceBand, NULL, -- iface->mac, &new_rate)) < 0) { -- /* helper reported error */ -- goto cleanup; -- } -- -- if (plug_ret > 0) { -- /* no QoS needs to be set; claim success */ -- ret = 0; -- goto cleanup; -- } -- -- virMacAddrFormat(&iface->mac, ifmac); -- if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK || -- !iface->data.network.actual) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Cannot set bandwidth on interface '%s' of type %d"), -- ifmac, iface->type); -- goto cleanup; -- } -+ int plug_ret; -+ int ret = -1; - - /* generate new class_id */ - if ((class_id = networkNextClassID(net)) < 0) { -@@ -4861,6 +4840,46 @@ networkPlugBandwidth(virNetworkObjPtr net, - net->def->bridge); - - ret = 0; -+ cleanup: -+ return ret; -+} -+ -+ -+static int -+networkPlugBandwidth(virNetworkObjPtr net, -+ virDomainNetDefPtr iface) -+{ -+ int ret = -1; -+ int plug_ret; -+ unsigned long long new_rate = 0; -+ char ifmac[VIR_MAC_STRING_BUFLEN]; -+ virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); -+ -+ if ((plug_ret = networkCheckBandwidth(net, ifaceBand, NULL, -+ iface->mac, &new_rate)) < 0) { -+ /* helper reported error */ -+ goto cleanup; -+ } -+ -+ if (plug_ret > 0) { -+ /* no QoS needs to be set; claim success */ -+ ret = 0; -+ goto cleanup; -+ } -+ -+ virMacAddrFormat(&iface->mac, ifmac); -+ if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK || -+ !iface->data.network.actual) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Cannot set bandwidth on interface '%s' of type %d"), -+ ifmac, iface->type); -+ goto cleanup; -+ } -+ -+ if (networkPlugBandwidthImpl(net, iface, ifaceBand, new_rate) < 0) -+ goto cleanup; -+ -+ ret = 0; - - cleanup: - return ret; -@@ -4938,15 +4957,19 @@ static bool - networkBandwidthGenericChecks(virDomainNetDefPtr iface, - virNetDevBandwidthPtr newBandwidth) - { -- virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); -+ virNetDevBandwidthPtr ifaceBand; - unsigned long long old_floor, new_floor; - -+ if (!iface && !newBandwidth) -+ return false; -+ - if (virDomainNetGetActualType(iface) != VIR_DOMAIN_NET_TYPE_NETWORK) { - /* This is not an interface that's plugged into a network. - * We don't care. Thus from our POV bandwidth change is allowed. */ - return false; - } - -+ ifaceBand = virDomainNetGetActualBandwidth(iface); - old_floor = new_floor = 0; - - if (ifaceBand && ifaceBand->in) -@@ -4987,3 +5010,85 @@ networkBandwidthChangeAllowed(virDomainNetDefPtr iface, - virNetworkObjEndAPI(&network); - return ret; - } -+ -+ -+int -+networkBandwidthUpdate(virDomainNetDefPtr iface, -+ virNetDevBandwidthPtr newBandwidth) -+{ -+ virNetworkDriverStatePtr driver = networkGetDriver(); -+ virNetworkObjPtr network = NULL; -+ virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); -+ unsigned long long new_rate = 0; -+ int plug_ret; -+ int ret = -1; -+ -+ if (!networkBandwidthGenericChecks(iface, newBandwidth)) -+ return 0; -+ -+ network = virNetworkObjFindByName(driver->networks, iface->data.network.name); -+ if (!network) { -+ virReportError(VIR_ERR_NO_NETWORK, -+ _("no network with matching name '%s'"), -+ iface->data.network.name); -+ return ret; -+ } -+ -+ if ((plug_ret = networkCheckBandwidth(network, newBandwidth, ifaceBand, -+ iface->mac, &new_rate)) < 0) { -+ /* helper reported error */ -+ goto cleanup; -+ } -+ -+ if (plug_ret > 0) { -+ /* no QoS needs to be set; claim success */ -+ ret = 0; -+ goto cleanup; -+ } -+ -+ /* Okay, there are three possible scenarios: */ -+ -+ if (ifaceBand->in && ifaceBand->in->floor && -+ newBandwidth->in && newBandwidth->in->floor) { -+ /* Either we just need to update @floor .. */ -+ -+ if (virNetDevBandwidthUpdateRate(network->def->bridge, -+ iface->data.network.actual->class_id, -+ network->def->bandwidth, -+ newBandwidth->in->floor) < 0) -+ goto cleanup; -+ -+ network->floor_sum -= ifaceBand->in->floor; -+ network->floor_sum += newBandwidth->in->floor; -+ new_rate -= network->floor_sum; -+ -+ if (virNetDevBandwidthUpdateRate(network->def->bridge, 2, -+ network->def->bandwidth, new_rate) < 0 || -+ virNetworkSaveStatus(driver->stateDir, network) < 0) { -+ /* Ouch, rollback */ -+ network->floor_sum -= newBandwidth->in->floor; -+ network->floor_sum += ifaceBand->in->floor; -+ -+ ignore_value(virNetDevBandwidthUpdateRate(network->def->bridge, -+ iface->data.network.actual->class_id, -+ network->def->bandwidth, -+ ifaceBand->in->floor)); -+ goto cleanup; -+ } -+ } else if (newBandwidth->in && newBandwidth->in->floor) { -+ /* .. or we need to plug in new .. */ -+ -+ if (networkPlugBandwidthImpl(network, iface, newBandwidth, new_rate) < 0) -+ goto cleanup; -+ } else { -+ /* .. or unplug old. */ -+ -+ if (networkUnplugBandwidth(network, iface) < 0) -+ goto cleanup; -+ } -+ -+ ret = 0; -+ cleanup: -+ virNetworkObjEndAPI(&network); -+ return ret; -+} -diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h -index cce9237..7db2c90 100644 ---- a/src/network/bridge_driver.h -+++ b/src/network/bridge_driver.h -@@ -57,6 +57,10 @@ bool networkBandwidthChangeAllowed(virDomainNetDefPtr iface, - virNetDevBandwidthPtr newBandwidth) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); - -+int networkBandwidthUpdate(virDomainNetDefPtr iface, -+ virNetDevBandwidthPtr newBandwidth) -+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -+ - # else - /* Define no-op replacements that don't drag in any link dependencies. */ - # define networkAllocateActualDevice(dom, iface) 0 -@@ -85,6 +89,13 @@ networkBandwidthChangeAllowed(virDomainNetDefPtr iface ATTRIBUTE_UNUSED, - return true; - } - -+static inline int -+networkBandwidthUpdate(virDomainNetDefPtr iface ATTRIBUTE_UNUSED, -+ virNetDevBandwidthPtr newBandwidth ATTRIBUTE_UNUSED) -+{ -+ return 0; -+} -+ - # endif - - typedef char *(*networkDnsmasqLeaseFileNameFunc)(const char *netname); --- -2.5.0 - diff --git a/SOURCES/libvirt-cgroup-Drop-resource-partition-from-virSystemdMakeScopeName.patch b/SOURCES/libvirt-cgroup-Drop-resource-partition-from-virSystemdMakeScopeName.patch deleted file mode 100644 index cb05f96..0000000 --- a/SOURCES/libvirt-cgroup-Drop-resource-partition-from-virSystemdMakeScopeName.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 1934effeed51b631703bc7880c46a75afa065058 Mon Sep 17 00:00:00 2001 -Message-Id: <1934effeed51b631703bc7880c46a75afa065058@dist-git> -From: Peter Krempa -Date: Wed, 22 Jul 2015 07:24:17 +0200 -Subject: [PATCH] cgroup: Drop resource partition from virSystemdMakeScopeName - -The scope name, even according to our docs is -"machine-$DRIVER\x2d$VMNAME.scope" virSystemdMakeScopeName would use the -resource partition name instead of "machine-" if it was specified thus -creating invalid scope paths. - -This makes libvirt drop cgroups for a VM that uses custom resource -partition upon reconnecting since the detected scope name would not -match the expected name generated by virSystemdMakeScopeName. - -The error is exposed by the following log entry: - -debug : virCgroupValidateMachineGroup:302 : Name 'machine-qemu\x2dtestvm.scope' for controller 'cpu' does not match 'testvm', 'testvm.libvirt-qemu' or 'machine-test-qemu\x2dtestvm.scope' - -for a "/machine/test" resource and "testvm" vm. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238570 -(cherry picked from commit 88f6c007c3fb4324396ec397de57c8a80ba7b31d) - -Signed-off-by: Jiri Denemark ---- - src/lxc/lxc_process.c | 6 ------ - src/qemu/qemu_cgroup.c | 3 --- - src/util/vircgroup.c | 11 ++--------- - src/util/vircgroup.h | 1 - - src/util/virsystemd.c | 9 ++------- - src/util/virsystemd.h | 3 +-- - tests/virsystemdtest.c | 20 +++++++------------- - 7 files changed, 12 insertions(+), 41 deletions(-) - -diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c -index 2bdce3b..87ee484 100644 ---- a/src/lxc/lxc_process.c -+++ b/src/lxc/lxc_process.c -@@ -1319,9 +1319,6 @@ int virLXCProcessStart(virConnectPtr conn, - * more reliable way to kill everything off if something - * goes wrong from here onwards ... */ - if (virCgroupNewDetectMachine(vm->def->name, "lxc", vm->pid, -- vm->def->resource ? -- vm->def->resource->partition : -- NULL, - -1, &priv->cgroup) < 0) - goto cleanup; - -@@ -1505,9 +1502,6 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm, - goto error; - - if (virCgroupNewDetectMachine(vm->def->name, "lxc", vm->pid, -- vm->def->resource ? -- vm->def->resource->partition : -- NULL, - -1, &priv->cgroup) < 0) - goto error; - -diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c -index 8ed74ee..ab21e12 100644 ---- a/src/qemu/qemu_cgroup.c -+++ b/src/qemu/qemu_cgroup.c -@@ -855,9 +855,6 @@ qemuConnectCgroup(virQEMUDriverPtr driver, - if (virCgroupNewDetectMachine(vm->def->name, - "qemu", - vm->pid, -- vm->def->resource ? -- vm->def->resource->partition : -- NULL, - cfg->cgroupControllers, - &priv->cgroup) < 0) - goto cleanup; -diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c -index cbe0234..29b2ab9 100644 ---- a/src/util/vircgroup.c -+++ b/src/util/vircgroup.c -@@ -243,7 +243,6 @@ static bool - virCgroupValidateMachineGroup(virCgroupPtr group, - const char *name, - const char *drivername, -- const char *partition, - bool stripEmulatorSuffix) - { - size_t i; -@@ -258,10 +257,7 @@ virCgroupValidateMachineGroup(virCgroupPtr group, - if (virCgroupPartitionEscape(&partname) < 0) - goto cleanup; - -- if (!partition) -- partition = "/machine"; -- -- if (!(scopename = virSystemdMakeScopeName(name, drivername, partition))) -+ if (!(scopename = virSystemdMakeScopeName(name, drivername))) - goto cleanup; - - if (virCgroupPartitionEscape(&scopename) < 0) -@@ -1498,7 +1494,6 @@ int - virCgroupNewDetectMachine(const char *name, - const char *drivername, - pid_t pid, -- const char *partition, - int controllers, - virCgroupPtr *group) - { -@@ -1508,8 +1503,7 @@ virCgroupNewDetectMachine(const char *name, - return -1; - } - -- if (!virCgroupValidateMachineGroup(*group, name, drivername, partition, -- true)) { -+ if (!virCgroupValidateMachineGroup(*group, name, drivername, true)) { - VIR_DEBUG("Failed to validate machine name for '%s' driver '%s'", - name, drivername); - virCgroupFree(group); -@@ -4047,7 +4041,6 @@ int - virCgroupNewDetectMachine(const char *name ATTRIBUTE_UNUSED, - const char *drivername ATTRIBUTE_UNUSED, - pid_t pid ATTRIBUTE_UNUSED, -- const char *partition ATTRIBUTE_UNUSED, - int controllers ATTRIBUTE_UNUSED, - virCgroupPtr *group ATTRIBUTE_UNUSED) - { -diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h -index e75c522..675a185 100644 ---- a/src/util/vircgroup.h -+++ b/src/util/vircgroup.h -@@ -92,7 +92,6 @@ int virCgroupNewDetect(pid_t pid, - int virCgroupNewDetectMachine(const char *name, - const char *drivername, - pid_t pid, -- const char *partition, - int controllers, - virCgroupPtr *group); - -diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c -index 8cedf8d..54c409d 100644 ---- a/src/util/virsystemd.c -+++ b/src/util/virsystemd.c -@@ -80,16 +80,11 @@ static void virSystemdEscapeName(virBufferPtr buf, - - - char *virSystemdMakeScopeName(const char *name, -- const char *drivername, -- const char *partition) -+ const char *drivername) - { - virBuffer buf = VIR_BUFFER_INITIALIZER; - -- if (*partition == '/') -- partition++; -- -- virSystemdEscapeName(&buf, partition); -- virBufferAddChar(&buf, '-'); -+ virBufferAddLit(&buf, "machine-"); - virSystemdEscapeName(&buf, drivername); - virBufferAddLit(&buf, "\\x2d"); - virSystemdEscapeName(&buf, name); -diff --git a/src/util/virsystemd.h b/src/util/virsystemd.h -index 7a29dba..8af2169 100644 ---- a/src/util/virsystemd.h -+++ b/src/util/virsystemd.h -@@ -25,8 +25,7 @@ - # include "internal.h" - - char *virSystemdMakeScopeName(const char *name, -- const char *drivername, -- const char *slicename); -+ const char *drivername); - char *virSystemdMakeSliceName(const char *partition); - - char *virSystemdMakeMachineName(const char *name, -diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c -index 261c4cc..d0b9335 100644 ---- a/tests/virsystemdtest.c -+++ b/tests/virsystemdtest.c -@@ -340,7 +340,6 @@ static int testCreateNetwork(const void *opaque ATTRIBUTE_UNUSED) - - struct testScopeData { - const char *name; -- const char *partition; - const char *expected; - }; - -@@ -351,9 +350,7 @@ testScopeName(const void *opaque) - int ret = -1; - char *actual = NULL; - -- if (!(actual = virSystemdMakeScopeName(data->name, -- "lxc", -- data->partition))) -+ if (!(actual = virSystemdMakeScopeName(data->name, "lxc"))) - goto cleanup; - - if (STRNEQ(actual, data->expected)) { -@@ -472,22 +469,19 @@ mymain(void) - if (virtTestRun("Test create with network ", testCreateNetwork, NULL) < 0) - ret = -1; - --# define TEST_SCOPE(name, partition, unitname) \ -+# define TEST_SCOPE(name, unitname) \ - do { \ - struct testScopeData data = { \ -- name, partition, unitname \ -+ name, unitname \ - }; \ - if (virtTestRun("Test scopename", testScopeName, &data) < 0) \ - ret = -1; \ - } while (0) - -- TEST_SCOPE("demo", "/machine", "machine-lxc\\x2ddemo.scope"); -- TEST_SCOPE("demo-name", "/machine", "machine-lxc\\x2ddemo\\x2dname.scope"); -- TEST_SCOPE("demo!name", "/machine", "machine-lxc\\x2ddemo\\x21name.scope"); -- TEST_SCOPE(".demo", "/machine", "machine-lxc\\x2d\\x2edemo.scope"); -- TEST_SCOPE("demo", "/machine/eng-dept", "machine-eng\\x2ddept-lxc\\x2ddemo.scope"); -- TEST_SCOPE("demo", "/machine/eng-dept/testing!stuff", -- "machine-eng\\x2ddept-testing\\x21stuff-lxc\\x2ddemo.scope"); -+ TEST_SCOPE("demo", "machine-lxc\\x2ddemo.scope"); -+ TEST_SCOPE("demo-name", "machine-lxc\\x2ddemo\\x2dname.scope"); -+ TEST_SCOPE("demo!name", "machine-lxc\\x2ddemo\\x21name.scope"); -+ TEST_SCOPE(".demo", "machine-lxc\\x2d\\x2edemo.scope"); - - # define TESTS_PM_SUPPORT_HELPER(name, function) \ - do { \ --- -2.5.0 - diff --git a/SOURCES/libvirt-cmdVcpuPin-Remove-dead-code.patch b/SOURCES/libvirt-cmdVcpuPin-Remove-dead-code.patch deleted file mode 100644 index 57ad82b..0000000 --- a/SOURCES/libvirt-cmdVcpuPin-Remove-dead-code.patch +++ /dev/null @@ -1,43 +0,0 @@ -From aa17035794369f33a9e4c3a3c625fd65b36e3320 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Michal Privoznik -Date: Thu, 16 Jul 2015 13:45:52 +0200 -Subject: [PATCH] cmdVcpuPin: Remove dead code - -There's this condition: - -flags & VIR_DOMAIN_AFFECT_CURRENT && virDomainIsActive(dom) - -which can never be true since VIR_DOMAIN_AFFECT_CURRENT has hardcoded -value of zero. Therefore virDomainIsActive() is a dead code. However, -the condition could make sense if it is rewritten as the following: - -!(flags & VIR_DOMAIN_AFFECT_CONFIG) && virDomainIsActive(dom) - -Signed-off-by: Michal Privoznik -(cherry picked from commit 416d0e94181086e572107ab9c295b70d98f0782b) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1160559 - -Signed-off-by: Pavel Hrdina -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index ac04ded..f7edeeb 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -6499,7 +6499,7 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd) - - if (got_vcpu && vcpu >= ncpus) { - if (flags & VIR_DOMAIN_AFFECT_LIVE || -- (flags & VIR_DOMAIN_AFFECT_CURRENT && -+ (!(flags & VIR_DOMAIN_AFFECT_CONFIG) && - virDomainIsActive(dom) == 1)) - vshError(ctl, - _("vcpu %d is out of range of live cpu count %d"), --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-Add-IOThread-quota-and-period-scheduler-cputune-defs.patch b/SOURCES/libvirt-conf-Add-IOThread-quota-and-period-scheduler-cputune-defs.patch new file mode 100644 index 0000000..3c50720 --- /dev/null +++ b/SOURCES/libvirt-conf-Add-IOThread-quota-and-period-scheduler-cputune-defs.patch @@ -0,0 +1,280 @@ +From e40f868e4f974ea0bd7224f5d49e602cf2947570 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Tue, 6 Sep 2016 16:43:13 -0400 +Subject: [PATCH] conf: Add IOThread quota and period scheduler/cputune defs + +https://bugzilla.redhat.com/show_bug.cgi?id=1356937 + +Add the definitions to allow for viewing/setting cgroup period and quota +limits for IOThreads. + +This is similar to the work done for emulator quota and period by +commit ids 'b65dafa' and 'e051c482'. + +Being able to view/set the IOThread specific values is related to more +recent changes adding global period (commmit id '4d92d58f') and global +quota (commit id '55ecdae') definitions and qemu support (commit id +'4e17ff79' and 'fbcbd1b2'). With a global setting though, if somehow +the IOThread value in the cgroup hierarchy was set "outside of libvirt" +to a value that is incompatible with the global value. + +Allowing control over IOThread specific values provides the capability +to alter the IOThread values as necessary. + +(cherry picked from commit 2197ea56d77ad3da2e838115eed71d2ad393a082) +Signed-off-by: John Ferlan +--- + docs/formatdomain.html.in | 25 +++++++++++++ + docs/schemas/domaincommon.rng | 10 ++++++ + include/libvirt/libvirt-domain.h | 32 +++++++++++++++++ + src/conf/domain_conf.c | 42 ++++++++++++++++++++++ + src/conf/domain_conf.h | 2 ++ + tests/qemuxml2argvdata/qemuxml2argv-cputune.xml | 2 ++ + .../qemuxml2xmloutdata/qemuxml2xmlout-cputune.xml | 2 ++ + tools/virsh.pod | 9 ++--- + 8 files changed, 120 insertions(+), 4 deletions(-) + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index c080bdf..5b4f83e 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -665,6 +665,8 @@ + <quota>-1</quota> + <emulator_period>1000000</emulator_period> + <emulator_quota>-1</emulator_quota> ++ <iothread_period>1000000</iothread_period> ++ <iothread_quota>-1</iothread_quota> + <vcpusched vcpus='0-4,^3' scheduler='fifo' priority='1'/> + <iothreadsched iothreads='2' scheduler='batch'/> + </cputune> +@@ -769,6 +771,29 @@ + Only QEMU driver support since 0.10.0 + + ++
iothread_period
++
++ The optional iothread_period element specifies the ++ enforcement interval(unit: microseconds) for IOThreads. Within ++ iothread_period, each IOThread of the domain will ++ not be allowed to consume more than iothread_quota ++ worth of runtime. The value should be in range [1000, 1000000]. ++ An iothread_period with value 0 means no value. ++ Only QEMU driver support since 2.1.0 ++
++
iothread_quota
++
++ The optional iothread_quota element specifies the maximum ++ allowed bandwidth(unit: microseconds) for IOThreads. A domain with ++ iothread_quota as any negative value indicates that the ++ domain IOThreads have infinite bandwidth, which means that it is ++ not bandwidth controlled. The value should be in range ++ [1000, 18446744073709551] or less than 0. An iothread_quota ++ with value 0 means no value. You can use this feature to ensure that ++ all IOThreads run at the same speed. ++ Only QEMU driver support since 2.1.0 ++
++ +
vcpusched and iothreadsched
+
+ The optional vcpusched elements specifies the scheduler +diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index bf4d795..44e39c8 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -764,6 +764,16 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h +index 7ea93aa..af3ecae 100644 +--- a/include/libvirt/libvirt-domain.h ++++ b/include/libvirt/libvirt-domain.h +@@ -365,6 +365,22 @@ typedef enum { + # define VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA "emulator_quota" + + /** ++ * VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD: ++ * ++ * Macro represents the enforcement period for a quota, in microseconds, ++ * for IOThreads only, when using the posix scheduler, as a ullong. ++ */ ++# define VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD "iothread_period" ++ ++/** ++ * VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA: ++ * ++ * Macro represents the maximum bandwidth to be used within a period for ++ * IOThreads only, when using the posix scheduler, as an llong. ++ */ ++# define VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA "iothread_quota" ++ ++/** + * VIR_DOMAIN_SCHEDULER_WEIGHT: + * + * Macro represents the relative weight, when using the credit +@@ -3604,6 +3620,22 @@ typedef void (*virConnectDomainEventJobCompletedCallback)(virConnectPtr conn, + # define VIR_DOMAIN_TUNABLE_CPU_EMULATOR_QUOTA "cputune.emulator_quota" + + /** ++ * VIR_DOMAIN_TUNABLE_CPU_IOTHREAD_PERIOD: ++ * ++ * Macro represents the enforcement period for a quota, in microseconds, for ++ * iothreads only, when using the posix scheduler, as VIR_TYPED_PARAM_ULLONG. ++ */ ++# define VIR_DOMAIN_TUNABLE_CPU_IOTHREAD_PERIOD "cputune.iothread_period" ++ ++/** ++ * VIR_DOMAIN_TUNABLE_CPU_IOTHREAD_QUOTA: ++ * ++ * Macro represents the maximum bandwidth to be used within a period for ++ * iothreads only, when using the posix scheduler, as VIR_TYPED_PARAM_LLONG. ++ */ ++# define VIR_DOMAIN_TUNABLE_CPU_IOTHREAD_QUOTA "cputune.iothread_quota" ++ ++/** + * VIR_DOMAIN_TUNABLE_BLKDEV_DISK: + * + * Macro represents the name of guest disk for which the values are updated, +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 261684e..67c7971 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -16343,6 +16343,38 @@ virDomainDefParseXML(xmlDocPtr xml, + goto error; + } + ++ if (virXPathULongLong("string(./cputune/iothread_period[1])", ctxt, ++ &def->cputune.iothread_period) < -1) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("can't parse cputune iothread period value")); ++ goto error; ++ } ++ ++ if (def->cputune.iothread_period > 0 && ++ (def->cputune.iothread_period < 1000 || ++ def->cputune.iothread_period > 1000000)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Value of cputune iothread_period must be in range " ++ "[1000, 1000000]")); ++ goto error; ++ } ++ ++ if (virXPathLongLong("string(./cputune/iothread_quota[1])", ctxt, ++ &def->cputune.iothread_quota) < -1) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("can't parse cputune iothread quota value")); ++ goto error; ++ } ++ ++ if (def->cputune.iothread_quota > 0 && ++ (def->cputune.iothread_quota < 1000 || ++ def->cputune.iothread_quota > 18446744073709551LL)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Value of cputune iothread_quota must be in range " ++ "[1000, 18446744073709551]")); ++ goto error; ++ } ++ + if ((n = virXPathNodeSet("./cputune/vcpupin", ctxt, &nodes)) < 0) + goto error; + +@@ -22975,6 +23007,16 @@ virDomainCputuneDefFormat(virBufferPtr buf, + "\n", + def->cputune.emulator_quota); + ++ if (def->cputune.iothread_period) ++ virBufferAsprintf(&childrenBuf, "%llu" ++ "\n", ++ def->cputune.iothread_period); ++ ++ if (def->cputune.iothread_quota) ++ virBufferAsprintf(&childrenBuf, "%lld" ++ "\n", ++ def->cputune.iothread_quota); ++ + for (i = 0; i < def->maxvcpus; i++) { + char *cpumask; + virDomainVcpuDefPtr vcpu = def->vcpus[i]; +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 34da54c..61ca8bd 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2031,6 +2031,8 @@ struct _virDomainCputune { + long long global_quota; + unsigned long long emulator_period; + long long emulator_quota; ++ unsigned long long iothread_period; ++ long long iothread_quota; + virBitmapPtr emulatorpin; + }; + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cputune.xml b/tests/qemuxml2argvdata/qemuxml2argv-cputune.xml +index 9595903..e6ef51d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cputune.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cputune.xml +@@ -10,6 +10,8 @@ + -1 + 1000000 + -1 ++ 1000000 ++ -1 + + + +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-cputune.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cputune.xml +index baf1779..7a1f50d 100644 +--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-cputune.xml ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cputune.xml +@@ -10,6 +10,8 @@ + -1 + 1000000 + -1 ++ 1000000 ++ -1 + + + +diff --git a/tools/virsh.pod b/tools/virsh.pod +index 601cb44..5fef86b 100644 +--- a/tools/virsh.pod ++++ b/tools/virsh.pod +@@ -1906,7 +1906,7 @@ available for each hypervisor are: + LXC (posix scheduler) : cpu_shares, vcpu_period, vcpu_quota + + QEMU/KVM (posix scheduler): cpu_shares, vcpu_period, vcpu_quota, +-emulator_period, emulator_quota ++emulator_period, emulator_quota, iothread_quota, iothread_period + + Xen (credit scheduler): weight, cap + +@@ -1924,9 +1924,10 @@ values 0 and 1 are automatically converted to a minimal value of 2. + B: The weight and cap parameters are defined only for the + XEN_CREDIT scheduler and are now I. + +-B: The vcpu_period/emulator_period parameters have a valid value range +-of 1000-1000000 or 0, and the vcpu_quota/emulator_quota parameters have a +-valid value range of 1000-18446744073709551 or less than 0. The value 0 for ++B: The vcpu_period, emulator_period, and iothread_period parameters ++have a valid value range of 1000-1000000 or 0, and the vcpu_quota, ++emulator_quota, and iothread_quota parameters have a valid value range of ++1000-18446744073709551 or less than 0. The value 0 for + either parameter is the same as not specifying that parameter. + + =item B I [I] [I<--screen> B] +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Add-XML-for-individual-vCPU-hotplug.patch b/SOURCES/libvirt-conf-Add-XML-for-individual-vCPU-hotplug.patch new file mode 100644 index 0000000..c243c3b --- /dev/null +++ b/SOURCES/libvirt-conf-Add-XML-for-individual-vCPU-hotplug.patch @@ -0,0 +1,471 @@ +From c9fb2f1ef7a756909c705df0c6a323af826be139 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:33 -0400 +Subject: [PATCH] conf: Add XML for individual vCPU hotplug + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Individual vCPU hotplug requires us to track the state of any vCPU. To +allow this add the following XML: + + + ... + 3 + + + + + + ... + +The 'enabled' attribute allows to control the state of the vcpu. +'hotpluggable' controls whether given vcpu can be hotplugged and 'order' +allows to specify the order to add the vcpus. + +(cherry picked from commit 5847bc5c64f205a2f00315a2434e8a7bd48c5508) +--- + docs/formatdomain.html.in | 40 ++++++ + docs/schemas/domaincommon.rng | 25 ++++ + src/conf/domain_conf.c | 154 ++++++++++++++++++++- + src/conf/domain_conf.h | 6 + + src/qemu/qemu_domain.c | 11 +- + .../generic-vcpus-individual.xml | 23 +++ + tests/genericxml2xmltest.c | 2 + + tests/testutils.c | 4 +- + 8 files changed, 261 insertions(+), 4 deletions(-) + create mode 100644 tests/genericxml2xmlindata/generic-vcpus-individual.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index b74057f..252f91c 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -489,6 +489,10 @@ + <domain> + ... + <vcpu placement='static' cpuset="1-4,^3,6" current="1">2</vcpu> ++ <vcpus> ++ <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/> ++ <vcpu id='1' enabled='no' hotpluggable='yes'/> ++ </vcpus> + ... + </domain> + +@@ -542,6 +546,42 @@ +
+ + ++
vcpus
++
++ The vcpus element allows to control state of individual vcpus. ++ ++ The id attribute specifies the vCPU id as used by libvirt ++ in other places such as vcpu pinning, scheduler information and NUMA ++ assignment. Note that the vcpu ID as seen in the guest may differ from ++ libvirt ID in certain cases. Valid IDs are from 0 to the maximum vcpu ++ count as set by the vcpu element minus 1. ++ ++ The enabled attribute allows to control the state of the ++ vcpu. Valid values are yes and no. ++ ++ hotpluggable controls whether given vcpu can be hotplugged ++ and hotunplugged in cases when the cpu is enabled at boot. Note that ++ all disabled vcpus must be hotpluggable. Valid values are ++ yes and no. ++ ++ order allows to specify the order to add the vcpus. For ++ hypervisors/platforms that require to insert multiple vcpus at once ++ the order may be be duplicated accross all vcpus that need to be ++ enabled at once. Specifying order is not necessary, vcpus are then ++ added in an arbitrary order. ++ ++ Note that hypervisors may create hotpluggable vcpus differently from ++ boot vcpus thus special initialization may be necessary. ++ ++ Hypervisors may require that vcpus enabled on boot which are not ++ hotpluggable are clustered at the beginning starting with ID 0. It may ++ be also required that vcpu 0 is always present and non-hotpluggable. ++ ++ Note that providing state for individual cpus may be necessary to enable ++ support of addressable vCPU hotplug and this feature may not be ++ supported by all hypervisors. ++ Since 2.2.0 (QEMU only) ++
+ + +

IOThreads Allocation

+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index 497597c..bf4d795 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -583,6 +583,31 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 4e703d9..d3a0400 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -4425,6 +4425,13 @@ virDomainDefPostParseCheckFeatures(virDomainDefPtr def, + } + } + ++ if (UNSUPPORTED(VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS) && ++ def->individualvcpus) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("individual CPU state configuration is not supported")); ++ return -1; ++ } ++ + return 0; + } + +@@ -4499,6 +4506,43 @@ virDomainDefPostParseDeviceIterator(virDomainDefPtr def, + + + static int ++virDomainVcpuDefPostParse(virDomainDefPtr def) ++{ ++ virDomainVcpuDefPtr vcpu; ++ size_t maxvcpus = virDomainDefGetVcpusMax(def); ++ size_t i; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ ++ switch (vcpu->hotpluggable) { ++ case VIR_TRISTATE_BOOL_ABSENT: ++ if (vcpu->online) ++ vcpu->hotpluggable = VIR_TRISTATE_BOOL_NO; ++ else ++ vcpu->hotpluggable = VIR_TRISTATE_BOOL_YES; ++ break; ++ ++ case VIR_TRISTATE_BOOL_NO: ++ if (!vcpu->online) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("vcpu '%zu' is both offline and not " ++ "hotpluggable"), i); ++ return -1; ++ } ++ break; ++ ++ case VIR_TRISTATE_BOOL_YES: ++ case VIR_TRISTATE_BOOL_LAST: ++ break; ++ } ++ } ++ ++ return 0; ++} ++ ++ ++static int + virDomainDefPostParseInternal(virDomainDefPtr def, + struct virDomainDefPostParseDeviceIteratorData *data) + { +@@ -4509,6 +4553,9 @@ virDomainDefPostParseInternal(virDomainDefPtr def, + return -1; + } + ++ if (virDomainVcpuDefPostParse(def) < 0) ++ return -1; ++ + if (virDomainDefPostParseMemory(def, data->parseFlags) < 0) + return -1; + +@@ -15590,6 +15637,8 @@ virDomainVcpuParse(virDomainDefPtr def, + virDomainXMLOptionPtr xmlopt) + { + int n; ++ xmlNodePtr *nodes = NULL; ++ size_t i; + char *tmp = NULL; + unsigned int maxvcpus; + unsigned int vcpus; +@@ -15618,8 +15667,6 @@ virDomainVcpuParse(virDomainDefPtr def, + vcpus = maxvcpus; + } + +- if (virDomainDefSetVcpus(def, vcpus) < 0) +- goto cleanup; + + tmp = virXPathString("string(./vcpu[1]/@placement)", ctxt); + if (tmp) { +@@ -15651,9 +15698,82 @@ virDomainVcpuParse(virDomainDefPtr def, + } + } + ++ if ((n = virXPathNodeSet("./vcpus/vcpu", ctxt, &nodes)) < 0) ++ goto cleanup; ++ ++ if (n) { ++ /* if individual vcpu states are provided take them as master */ ++ def->individualvcpus = true; ++ ++ for (i = 0; i < n; i++) { ++ virDomainVcpuDefPtr vcpu; ++ int state; ++ unsigned int id; ++ unsigned int order; ++ ++ if (!(tmp = virXMLPropString(nodes[i], "id")) || ++ virStrToLong_uip(tmp, NULL, 10, &id) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("missing or invalid vcpu id")); ++ goto cleanup; ++ } ++ ++ VIR_FREE(tmp); ++ ++ if (id >= def->maxvcpus) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("vcpu id '%u' is out of range of maximum " ++ "vcpu count"), id); ++ goto cleanup; ++ } ++ ++ vcpu = virDomainDefGetVcpu(def, id); ++ ++ if (!(tmp = virXMLPropString(nodes[i], "enabled"))) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("missing vcpu enabled state")); ++ goto cleanup; ++ } ++ ++ if ((state = virTristateBoolTypeFromString(tmp)) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("invalid vcpu 'enabled' value '%s'"), tmp); ++ goto cleanup; ++ } ++ VIR_FREE(tmp); ++ ++ vcpu->online = state == VIR_TRISTATE_BOOL_YES; ++ ++ if ((tmp = virXMLPropString(nodes[i], "hotpluggable"))) { ++ int hotpluggable; ++ if ((hotpluggable = virTristateBoolTypeFromString(tmp)) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("invalid vcpu 'hotpluggable' value '%s'"), tmp); ++ goto cleanup; ++ } ++ vcpu->hotpluggable = hotpluggable; ++ VIR_FREE(tmp); ++ } ++ ++ if ((tmp = virXMLPropString(nodes[i], "order"))) { ++ if (virStrToLong_uip(tmp, NULL, 10, &order) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("invalid vcpu order")); ++ goto cleanup; ++ } ++ vcpu->order = order; ++ VIR_FREE(tmp); ++ } ++ } ++ } else { ++ if (virDomainDefSetVcpus(def, vcpus) < 0) ++ goto cleanup; ++ } ++ + ret = 0; + + cleanup: ++ VIR_FREE(nodes); + VIR_FREE(tmp); + + return ret; +@@ -18679,6 +18799,13 @@ virDomainDefVcpuCheckAbiStability(virDomainDefPtr src, + "destination definitions"), i); + return false; + } ++ ++ if (svcpu->order != dvcpu->order) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("vcpu enable order of vCPU '%zu' differs between " ++ "source and destination definitions"), i); ++ return false; ++ } + } + + return true; +@@ -22921,6 +23048,8 @@ static int + virDomainCpuDefFormat(virBufferPtr buf, + const virDomainDef *def) + { ++ virDomainVcpuDefPtr vcpu; ++ size_t i; + char *cpumask = NULL; + int ret = -1; + +@@ -22937,6 +23066,27 @@ virDomainCpuDefFormat(virBufferPtr buf, + virBufferAsprintf(buf, " current='%u'", virDomainDefGetVcpus(def)); + virBufferAsprintf(buf, ">%u\n", virDomainDefGetVcpusMax(def)); + ++ if (def->individualvcpus) { ++ virBufferAddLit(buf, "\n"); ++ virBufferAdjustIndent(buf, 2); ++ for (i = 0; i < def->maxvcpus; i++) { ++ vcpu = def->vcpus[i]; ++ ++ virBufferAsprintf(buf, "online ? "yes" : "no"); ++ if (vcpu->hotpluggable) ++ virBufferAsprintf(buf, " hotpluggable='%s'", ++ virTristateBoolTypeToString(vcpu->hotpluggable)); ++ ++ if (vcpu->order != 0) ++ virBufferAsprintf(buf, " order='%d'", vcpu->order); ++ ++ virBufferAddLit(buf, "/>\n"); ++ } ++ virBufferAdjustIndent(buf, -2); ++ virBufferAddLit(buf, "\n"); ++ } ++ + ret = 0; + + cleanup: +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index e7ff401..34da54c 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2040,6 +2040,9 @@ typedef virDomainVcpuDef *virDomainVcpuDefPtr; + + struct _virDomainVcpuDef { + bool online; ++ virTristateBool hotpluggable; ++ unsigned int order; ++ + virBitmapPtr cpumask; + + virDomainThreadSchedParam sched; +@@ -2136,6 +2139,8 @@ struct _virDomainDef { + + virDomainVcpuDefPtr *vcpus; + size_t maxvcpus; ++ /* set if the vcpu definition was specified individually */ ++ bool individualvcpus; + int placement_mode; + virBitmapPtr cpumask; + +@@ -2338,6 +2343,7 @@ typedef enum { + VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG = (1 << 1), + VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN = (1 << 2), + VIR_DOMAIN_DEF_FEATURE_NAME_SLASH = (1 << 3), ++ VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS = (1 << 4), + } virDomainDefFeatures; + + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index add8379..7a71bfb 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5796,8 +5796,17 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + VIR_STEAL_PTR(vcpupriv->alias, info[i].alias); + vcpupriv->enable_id = info[i].id; + +- if (hotplug && state) ++ if (hotplug && state) { + vcpu->online = !!info[i].qom_path; ++ ++ /* mark cpus that don't have an alias as non-hotpluggable */ ++ if (vcpu->online) { ++ if (vcpupriv->alias) ++ vcpu->hotpluggable = VIR_TRISTATE_BOOL_YES; ++ else ++ vcpu->hotpluggable = VIR_TRISTATE_BOOL_NO; ++ } ++ } + } + + ret = 0; +diff --git a/tests/genericxml2xmlindata/generic-vcpus-individual.xml b/tests/genericxml2xmlindata/generic-vcpus-individual.xml +new file mode 100644 +index 0000000..cbcf8fd +--- /dev/null ++++ b/tests/genericxml2xmlindata/generic-vcpus-individual.xml +@@ -0,0 +1,23 @@ ++ ++ foobar ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 4 ++ ++ ++ ++ ++ ++ ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ ++ +diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c +index a487727..2ea2396 100644 +--- a/tests/genericxml2xmltest.c ++++ b/tests/genericxml2xmltest.c +@@ -97,6 +97,8 @@ mymain(void) + + DO_TEST("perf"); + ++ DO_TEST("vcpus-individual"); ++ + virObjectUnref(caps); + virObjectUnref(xmlopt); + +diff --git a/tests/testutils.c b/tests/testutils.c +index be61e4d..2daad43 100644 +--- a/tests/testutils.c ++++ b/tests/testutils.c +@@ -1075,7 +1075,9 @@ virCapsPtr virTestGenericCapsInit(void) + return NULL; + } + +-static virDomainDefParserConfig virTestGenericDomainDefParserConfig; ++static virDomainDefParserConfig virTestGenericDomainDefParserConfig = { ++ .features = VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS, ++}; + static virDomainXMLPrivateDataCallbacks virTestGenericPrivateDataCallbacks; + + virDomainXMLOptionPtr virTestGenericDomainXMLConfInit(void) +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Add-XML-parser-flag-that-will-allow-us-to-do-incompatible-updates.patch b/SOURCES/libvirt-conf-Add-XML-parser-flag-that-will-allow-us-to-do-incompatible-updates.patch deleted file mode 100644 index 679c609..0000000 --- a/SOURCES/libvirt-conf-Add-XML-parser-flag-that-will-allow-us-to-do-incompatible-updates.patch +++ /dev/null @@ -1,99 +0,0 @@ -From fd2d738d9c12aeea42167e0de3662af5a64d93d5 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:41 +0200 -Subject: [PATCH] conf: Add XML parser flag that will allow us to do - incompatible updates - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -Add a new parser flag that will mark code paths that parse XML files -wich will not be used with existing VM state so that post parse -callbacks can possibly do ABI incompatible changes if needed. - -(cherry picked from commit 59173c3dd94fc090d2776be3986a1014ddbf2396) - -Conflicts: - src/qemu/qemu_driver.c - context - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.h | 2 ++ - src/qemu/qemu_driver.c | 12 ++++++++---- - src/qemu/qemu_migration.c | 3 ++- - 3 files changed, 12 insertions(+), 5 deletions(-) - -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 63685c6..bac64b3 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2613,6 +2613,8 @@ typedef enum { - /* don't validate os.type and arch against capabilities. Prevents - * VMs from disappearing when qemu is removed and libvirtd is restarted */ - VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS = 1 << 8, -+ /* allow updates in post parse callback that would break ABI otherwise */ -+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE = 1 << 9, - } virDomainDefParseFlags; - - typedef enum { -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 0f3e987..f15b14a 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -1714,7 +1714,8 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn, - unsigned int start_flags = VIR_QEMU_PROCESS_START_COLD; - virQEMUCapsPtr qemuCaps = NULL; - virCapsPtr caps = NULL; -- unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE; -+ unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE | -+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE; - - virCheckFlags(VIR_DOMAIN_START_PAUSED | - VIR_DOMAIN_START_AUTODESTROY | -@@ -7179,7 +7180,8 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn, - goto cleanup; - - def = virDomainDefParseString(xmlData, caps, driver->xmlopt, -- VIR_DOMAIN_DEF_PARSE_INACTIVE); -+ VIR_DOMAIN_DEF_PARSE_INACTIVE | -+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE); - if (!def) - goto cleanup; - -@@ -7494,7 +7496,8 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml - virQEMUCapsPtr qemuCaps = NULL; - virQEMUDriverConfigPtr cfg; - virCapsPtr caps = NULL; -- unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE; -+ unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE | -+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE; - - virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL); - -@@ -8449,7 +8452,8 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, - virDomainDefPtr vmdef = NULL; - virDomainDeviceDefPtr dev = NULL, dev_copy = NULL; - int ret = -1; -- unsigned int affect, parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE; -+ unsigned int affect, parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE | -+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE; - virQEMUCapsPtr qemuCaps = NULL; - qemuDomainObjPrivatePtr priv; - virQEMUDriverConfigPtr cfg = NULL; -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 93f561f..cb82687 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -1257,7 +1257,8 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig, - } - mig->persistent = virDomainDefParseNode(doc, nodes[0], - caps, driver->xmlopt, -- VIR_DOMAIN_DEF_PARSE_INACTIVE); -+ VIR_DOMAIN_DEF_PARSE_INACTIVE | -+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE); - if (!mig->persistent) { - /* virDomainDefParseNode already reported - * an error for us */ --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Add-getter-for-network-routes.patch b/SOURCES/libvirt-conf-Add-getter-for-network-routes.patch deleted file mode 100644 index 50a94b9..0000000 --- a/SOURCES/libvirt-conf-Add-getter-for-network-routes.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 4db05578f2b40f0374477bccf85a492a7e8ee8fc Mon Sep 17 00:00:00 2001 -Message-Id: <4db05578f2b40f0374477bccf85a492a7e8ee8fc@dist-git> -From: Martin Kletzander -Date: Thu, 6 Aug 2015 13:10:23 +0200 -Subject: [PATCH] conf: Add getter for network routes - -https://bugzilla.redhat.com/show_bug.cgi?id=1094205 - -Add virNetworkDefGetRouteByIndex() similarly to -virNetworkDefGetIpByIndex(), but for routes. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 0f10eb6a289502b295b56bc0925cf05cfa32193d) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/conf/network_conf.c | 26 ++++++++++++++++++++++++++ - src/conf/network_conf.h | 3 +++ - src/libvirt_private.syms | 1 + - 3 files changed, 30 insertions(+) - -diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c -index 31d4463..72006e9 100644 ---- a/src/conf/network_conf.c -+++ b/src/conf/network_conf.c -@@ -803,6 +803,32 @@ virNetworkDefGetIpByIndex(const virNetworkDef *def, - return NULL; - } - -+/* return routes[index], or NULL if there aren't enough routes */ -+virNetworkRouteDefPtr -+virNetworkDefGetRouteByIndex(const virNetworkDef *def, -+ int family, size_t n) -+{ -+ size_t i; -+ -+ if (!def->routes || n >= def->nroutes) -+ return NULL; -+ -+ if (family == AF_UNSPEC) -+ return def->routes[n]; -+ -+ /* find the nth route of type "family" */ -+ for (i = 0; i < def->nroutes; i++) { -+ virSocketAddrPtr addr = virNetworkRouteDefGetAddress(def->routes[i]); -+ if (VIR_SOCKET_ADDR_IS_FAMILY(addr, family) -+ && (n-- <= 0)) { -+ return def->routes[i]; -+ } -+ } -+ -+ /* failed to find enough of the right family */ -+ return NULL; -+} -+ - /* return number of 1 bits in netmask for the network's ipAddress, - * or -1 on error - */ -diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h -index 9411a02..1cd5100 100644 ---- a/src/conf/network_conf.h -+++ b/src/conf/network_conf.h -@@ -360,6 +360,9 @@ virPortGroupDefPtr virPortGroupFindByName(virNetworkDefPtr net, - virNetworkIpDefPtr - virNetworkDefGetIpByIndex(const virNetworkDef *def, - int family, size_t n); -+virNetworkRouteDefPtr -+virNetworkDefGetRouteByIndex(const virNetworkDef *def, -+ int family, size_t n); - int virNetworkIpDefPrefix(const virNetworkIpDef *def); - int virNetworkIpDefNetmask(const virNetworkIpDef *def, - virSocketAddrPtr netmask); -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index a6b523a..46e535e 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -597,6 +597,7 @@ virNetworkDefFormat; - virNetworkDefFormatBuf; - virNetworkDefFree; - virNetworkDefGetIpByIndex; -+virNetworkDefGetRouteByIndex; - virNetworkDefParseFile; - virNetworkDefParseNode; - virNetworkDefParseString; --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-Add-helper-to-determine-whether-memory-hotplug-is-enabled-for-a-vm.patch b/SOURCES/libvirt-conf-Add-helper-to-determine-whether-memory-hotplug-is-enabled-for-a-vm.patch deleted file mode 100644 index aaa52e6..0000000 --- a/SOURCES/libvirt-conf-Add-helper-to-determine-whether-memory-hotplug-is-enabled-for-a-vm.patch +++ /dev/null @@ -1,130 +0,0 @@ -From b0dc796ccdf858a0fdb22a811fd28b4ed3d6dce5 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:37 +0200 -Subject: [PATCH] conf: Add helper to determine whether memory hotplug is - enabled for a vm - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -Add a simple helper so that the code doesn't have to rewrite the same -condition multiple times. - -(cherry picked from commit 1891cad5420a3a1727177d1c762b23104c9ccc6d) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 11 +++++++++-- - src/conf/domain_conf.h | 1 + - src/libvirt_private.syms | 1 + - src/qemu/qemu_command.c | 2 +- - src/qemu/qemu_domain.c | 2 +- - src/qemu/qemu_migration.c | 5 ++--- - 6 files changed, 15 insertions(+), 7 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 15d3a5e..2dc5912 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -1141,7 +1141,7 @@ int - virDomainDefCheckUnsupportedMemoryHotplug(virDomainDefPtr def) - { - /* memory hotplug tunables are not supported by this driver */ -- if (def->mem.max_memory > 0 || def->mem.memory_slots > 0) { -+ if (virDomainDefHasMemoryHotplug(def)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("memory hotplug tunables are not " - "supported by this hypervisor driver")); -@@ -7637,6 +7637,13 @@ virDomainParseMemoryLimit(const char *xpath, - } - - -+bool -+virDomainDefHasMemoryHotplug(const virDomainDef *def) -+{ -+ return def->mem.memory_slots > 0 || def->mem.max_memory > 0; -+} -+ -+ - /** - * virDomainDefGetMemoryInitial: - * @def: domain definition -@@ -21342,7 +21349,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, - xmlIndentTreeOutput = oldIndentTreeOutput; - } - -- if (def->mem.max_memory) { -+ if (virDomainDefHasMemoryHotplug(def)) { - virBufferAsprintf(buf, - "%llu\n", - def->mem.memory_slots, def->mem.max_memory); -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 3040ddc..902dfb9 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2288,6 +2288,7 @@ struct _virDomainDef { - unsigned long long virDomainDefGetMemoryInitial(virDomainDefPtr def); - void virDomainDefSetMemoryInitial(virDomainDefPtr def, unsigned long long size); - unsigned long long virDomainDefGetMemoryActual(virDomainDefPtr def); -+bool virDomainDefHasMemoryHotplug(const virDomainDef *def); - - typedef enum { - VIR_DOMAIN_KEY_WRAP_CIPHER_NAME_AES, -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 9332194..335f8d0 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -215,6 +215,7 @@ virDomainDefGetMemoryActual; - virDomainDefGetMemoryInitial; - virDomainDefGetSecurityLabelDef; - virDomainDefHasDeviceAddress; -+virDomainDefHasMemoryHotplug; - virDomainDefMaybeAddController; - virDomainDefMaybeAddInput; - virDomainDefNeedsPlacementAdvice; -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 47d91c6..ade75e3 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -9045,7 +9045,7 @@ qemuBuildCommandLine(virConnectPtr conn, - - virCommandAddArg(cmd, "-m"); - -- if (def->mem.max_memory) { -+ if (virDomainDefHasMemoryHotplug(def)) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PC_DIMM)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("memory hotplug isn't supported by this QEMU binary")); -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index e4a9c55..9d9fb06 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -1347,7 +1347,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, - } - - if (dev->type == VIR_DOMAIN_DEVICE_MEMORY && -- def->mem.max_memory == 0) { -+ !virDomainDefHasMemoryHotplug(def)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("maxMemory has to be specified when using memory " - "devices ")); -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 58fcb94..93f561f 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -2988,10 +2988,9 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver, - } - } - -- if (vm->def->mem.max_memory || -+ if (virDomainDefHasMemoryHotplug(vm->def) || - ((flags & VIR_MIGRATE_PERSIST_DEST) && -- vm->newDef && -- vm->newDef->mem.max_memory)) -+ vm->newDef && virDomainDefHasMemoryHotplug(vm->newDef))) - cookieFlags |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG; - - if (!(mig = qemuMigrationEatCookie(driver, vm, NULL, 0, 0))) --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Add-ioeventfd-option-for-controllers.patch b/SOURCES/libvirt-conf-Add-ioeventfd-option-for-controllers.patch deleted file mode 100644 index d9f76e7..0000000 --- a/SOURCES/libvirt-conf-Add-ioeventfd-option-for-controllers.patch +++ /dev/null @@ -1,192 +0,0 @@ -From 77f59c5205af71af094a1a87b2502a8e286369ef Mon Sep 17 00:00:00 2001 -Message-Id: <77f59c5205af71af094a1a87b2502a8e286369ef@dist-git> -From: Martin Kletzander -Date: Thu, 3 Sep 2015 15:55:43 +0200 -Subject: [PATCH] conf: Add ioeventfd option for controllers - -https://bugzilla.redhat.com/show_bug.cgi?id=1150484 - -This will be used with a virtio-scsi controller later on. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 35eecddee3fd822285a4ac619ac972f3714e8edc) -Signed-off-by: Martin Kletzander - - Conflicts: - src/conf/domain_conf.c -- controller (sub)models -Signed-off-by: Jiri Denemark ---- - docs/formatdomain.html.in | 8 ++++++ - docs/schemas/domaincommon.rng | 3 +++ - src/conf/domain_conf.c | 20 +++++++++++++-- - src/conf/domain_conf.h | 1 + - .../qemuxml2argv-disk-virtio-scsi-ioeventfd.xml | 29 ++++++++++++++++++++++ - tests/qemuxml2xmltest.c | 1 + - 6 files changed, 60 insertions(+), 2 deletions(-) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.xml - -diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in -index cb11b1f..0bf5845 100644 ---- a/docs/formatdomain.html.in -+++ b/docs/formatdomain.html.in -@@ -3000,6 +3000,14 @@ - a sector is 512 bytes. - Since 1.2.7 (QEMU and KVM only) - -+
ioeventfd
-+
-+ The optional ioeventfd attribute specifies -+ whether the controller should use -+ -+ I/O asynchronous handling or not. Accepted values are -+ "on" and "off". Since 1.2.18 -+
- -

- USB companion controllers have an optional -diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng -index 1120003..1739015 100644 ---- a/docs/schemas/domaincommon.rng -+++ b/docs/schemas/domaincommon.rng -@@ -1790,6 +1790,9 @@ - - - -+ -+ -+ - - - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index b4503c3..15d3a5e 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -7734,6 +7734,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, - char *queues = NULL; - char *cmd_per_lun = NULL; - char *max_sectors = NULL; -+ char *ioeventfd = NULL; - xmlNodePtr saved = ctxt->node; - int rc; - -@@ -7779,6 +7780,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, - queues = virXMLPropString(cur, "queues"); - cmd_per_lun = virXMLPropString(cur, "cmd_per_lun"); - max_sectors = virXMLPropString(cur, "max_sectors"); -+ ioeventfd = virXMLPropString(cur, "ioeventfd"); - } - } - cur = cur->next; -@@ -7802,6 +7804,13 @@ virDomainControllerDefParseXML(xmlNodePtr node, - goto error; - } - -+ if (ioeventfd && -+ (def->ioeventfd = virTristateSwitchTypeFromString(ioeventfd)) < 0) { -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Malformed 'ioeventfd' value %s'"), max_sectors); -+ goto error; -+ } -+ - if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_USB && - def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) { - VIR_DEBUG("Ignoring device address for none model usb controller"); -@@ -7915,6 +7924,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, - VIR_FREE(queues); - VIR_FREE(cmd_per_lun); - VIR_FREE(max_sectors); -+ VIR_FREE(ioeventfd); - - return def; - -@@ -18980,12 +18990,13 @@ virDomainControllerDefFormat(virBufferPtr buf, - break; - } - -- if (def->queues || def->cmd_per_lun || def->max_sectors || -+ if (def->queues || def->cmd_per_lun || def->max_sectors || def->ioeventfd || - virDomainDeviceInfoNeedsFormat(&def->info, flags) || pcihole64) { - virBufferAddLit(buf, ">\n"); - virBufferAdjustIndent(buf, 2); - -- if (def->queues || def->cmd_per_lun || def->max_sectors) { -+ if (def->queues || def->cmd_per_lun || -+ def->max_sectors || def->ioeventfd) { - virBufferAddLit(buf, "queues) - virBufferAsprintf(buf, " queues='%u'", def->queues); -@@ -18995,6 +19006,11 @@ virDomainControllerDefFormat(virBufferPtr buf, - - if (def->max_sectors) - virBufferAsprintf(buf, " max_sectors='%u'", def->max_sectors); -+ -+ if (def->ioeventfd) { -+ virBufferAsprintf(buf, " ioeventfd='%s'", -+ virTristateSwitchTypeToString(def->ioeventfd)); -+ } - virBufferAddLit(buf, "/>\n"); - } - -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index ed0ccba..3040ddc 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -807,6 +807,7 @@ struct _virDomainControllerDef { - unsigned int queues; - unsigned int cmd_per_lun; - unsigned int max_sectors; -+ int ioeventfd; /* enum virTristateSwitch */ - union { - virDomainVirtioSerialOpts vioserial; - virDomainPCIControllerOpts pciopts; -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.xml -new file mode 100644 -index 0000000..f4487eb ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.xml -@@ -0,0 +1,29 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 8 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+

-+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c -index 09806b2..5f88c5d 100644 ---- a/tests/qemuxml2xmltest.c -+++ b/tests/qemuxml2xmltest.c -@@ -421,6 +421,7 @@ mymain(void) - DO_TEST("disk-virtio-scsi-num_queues"); - DO_TEST("disk-virtio-scsi-cmd_per_lun"); - DO_TEST("disk-virtio-scsi-max_sectors"); -+ DO_TEST("disk-virtio-scsi-ioeventfd"); - DO_TEST("disk-scsi-megasas"); - DO_TEST_DIFFERENT("disk-mirror-old"); - DO_TEST_FULL("disk-mirror", false, WHEN_ACTIVE); --- -2.5.1 - diff --git a/SOURCES/libvirt-conf-Add-private-data-for-virDomainVcpuDef.patch b/SOURCES/libvirt-conf-Add-private-data-for-virDomainVcpuDef.patch new file mode 100644 index 0000000..f1a291f --- /dev/null +++ b/SOURCES/libvirt-conf-Add-private-data-for-virDomainVcpuDef.patch @@ -0,0 +1,598 @@ +From cb7f9ed96f81aebcade2c42cbdb1bacf97bb611b Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:48 -0400 +Subject: [PATCH] conf: Add private data for virDomainVcpuDef + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Allow to store driver specific data on a per-vcpu basis. + +Move of the virDomainDef*Vcpus* functions was necessary as +virDomainXMLOptionPtr was declared below this block and I didn't want to +split the function headers. + +(cherry picked from commit 5fe0b6b0a7e0c900ab51927ee859c2c92cc92e5d) + + Conflicts: + src/bhyve/bhyve_parse_command.c: file missing +--- + src/conf/domain_conf.c | 30 ++++++++++++++++++++++-------- + src/conf/domain_conf.h | 22 ++++++++++++++-------- + src/hyperv/hyperv_driver.c | 3 ++- + src/libxl/libxl_driver.c | 4 ++-- + src/lxc/lxc_native.c | 2 +- + src/openvz/openvz_conf.c | 2 +- + src/openvz/openvz_driver.c | 16 ++++++++++------ + src/phyp/phyp_driver.c | 2 +- + src/qemu/qemu_driver.c | 2 +- + src/qemu/qemu_parse_command.c | 9 +++++---- + src/test/test_driver.c | 4 +++- + src/vbox/vbox_common.c | 4 ++-- + src/vmx/vmx.c | 2 +- + src/vz/vz_sdk.c | 7 ++++--- + src/xen/xm_internal.c | 2 +- + src/xenapi/xenapi_driver.c | 2 +- + src/xenconfig/xen_common.c | 13 ++++++++----- + src/xenconfig/xen_common.h | 3 ++- + src/xenconfig/xen_sxpr.c | 2 +- + src/xenconfig/xen_xl.c | 3 ++- + src/xenconfig/xen_xm.c | 3 ++- + 21 files changed, 86 insertions(+), 51 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 6d0f967..384059d 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -1313,12 +1313,23 @@ void virDomainLeaseDefFree(virDomainLeaseDefPtr def) + + + static virDomainVcpuDefPtr +-virDomainVcpuDefNew(void) ++virDomainVcpuDefNew(virDomainXMLOptionPtr xmlopt) + { +- virDomainVcpuDefPtr ret; ++ virObjectPtr priv = NULL; ++ virDomainVcpuDefPtr ret = NULL; + +- ignore_value(VIR_ALLOC(ret)); ++ if (xmlopt && xmlopt->privateData.vcpuNew && ++ !(priv = xmlopt->privateData.vcpuNew())) ++ goto cleanup; + ++ if (VIR_ALLOC(ret) < 0) ++ goto cleanup; ++ ++ ret->privateData = priv; ++ priv = NULL; ++ ++ cleanup: ++ virObjectUnref(priv); + return ret; + } + +@@ -1331,13 +1342,15 @@ virDomainVcpuDefFree(virDomainVcpuDefPtr info) + + virBitmapFree(info->cpumask); + info->cpumask = NULL; ++ virObjectUnref(info->privateData); + VIR_FREE(info); + } + + + int + virDomainDefSetVcpusMax(virDomainDefPtr def, +- unsigned int maxvcpus) ++ unsigned int maxvcpus, ++ virDomainXMLOptionPtr xmlopt) + { + size_t oldmax = def->maxvcpus; + size_t i; +@@ -1350,7 +1363,7 @@ virDomainDefSetVcpusMax(virDomainDefPtr def, + return -1; + + for (i = oldmax; i < def->maxvcpus; i++) { +- if (!(def->vcpus[i] = virDomainVcpuDefNew())) ++ if (!(def->vcpus[i] = virDomainVcpuDefNew(xmlopt))) + return -1; + } + } else { +@@ -15569,7 +15582,8 @@ virDomainIOThreadSchedParse(xmlNodePtr node, + + static int + virDomainVcpuParse(virDomainDefPtr def, +- xmlXPathContextPtr ctxt) ++ xmlXPathContextPtr ctxt, ++ virDomainXMLOptionPtr xmlopt) + { + int n; + char *tmp = NULL; +@@ -15587,7 +15601,7 @@ virDomainVcpuParse(virDomainDefPtr def, + maxvcpus = 1; + } + +- if (virDomainDefSetVcpusMax(def, maxvcpus) < 0) ++ if (virDomainDefSetVcpusMax(def, maxvcpus, xmlopt) < 0) + goto cleanup; + + if ((n = virXPathUInt("string(./vcpu[1]/@current)", ctxt, &vcpus)) < 0) { +@@ -16056,7 +16070,7 @@ virDomainDefParseXML(xmlDocPtr xml, + &def->mem.swap_hard_limit) < 0) + goto error; + +- if (virDomainVcpuParse(def, ctxt) < 0) ++ if (virDomainVcpuParse(def, ctxt, xmlopt) < 0) + goto error; + + /* Optional - iothreads */ +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index ac37382..e7ff401 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2043,6 +2043,8 @@ struct _virDomainVcpuDef { + virBitmapPtr cpumask; + + virDomainThreadSchedParam sched; ++ ++ virObjectPtr privateData; + }; + + typedef struct _virDomainBlkiotune virDomainBlkiotune; +@@ -2261,14 +2263,6 @@ struct _virDomainDef { + xmlNodePtr metadata; + }; + +-int virDomainDefSetVcpusMax(virDomainDefPtr def, unsigned int vcpus); +-bool virDomainDefHasVcpusOffline(const virDomainDef *def); +-unsigned int virDomainDefGetVcpusMax(const virDomainDef *def); +-int virDomainDefSetVcpus(virDomainDefPtr def, unsigned int vcpus); +-unsigned int virDomainDefGetVcpus(const virDomainDef *def); +-virBitmapPtr virDomainDefGetOnlineVcpumap(const virDomainDef *def); +-virDomainVcpuDefPtr virDomainDefGetVcpu(virDomainDefPtr def, unsigned int vcpu) +- ATTRIBUTE_RETURN_CHECK; + + unsigned long long virDomainDefGetMemoryInitial(const virDomainDef *def); + void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size); +@@ -2422,6 +2416,7 @@ struct _virDomainXMLPrivateDataCallbacks { + virDomainXMLPrivateDataFreeFunc free; + virDomainXMLPrivateDataNewFunc diskNew; + virDomainXMLPrivateDataNewFunc hostdevNew; ++ virDomainXMLPrivateDataNewFunc vcpuNew; + virDomainXMLPrivateDataFormatFunc format; + virDomainXMLPrivateDataParseFunc parse; + }; +@@ -2453,6 +2448,17 @@ virDomainObjIsActive(virDomainObjPtr dom) + return dom->def->id != -1; + } + ++int virDomainDefSetVcpusMax(virDomainDefPtr def, ++ unsigned int vcpus, ++ virDomainXMLOptionPtr xmlopt); ++bool virDomainDefHasVcpusOffline(const virDomainDef *def); ++unsigned int virDomainDefGetVcpusMax(const virDomainDef *def); ++int virDomainDefSetVcpus(virDomainDefPtr def, unsigned int vcpus); ++unsigned int virDomainDefGetVcpus(const virDomainDef *def); ++virBitmapPtr virDomainDefGetOnlineVcpumap(const virDomainDef *def); ++virDomainVcpuDefPtr virDomainDefGetVcpu(virDomainDefPtr def, unsigned int vcpu) ++ ATTRIBUTE_RETURN_CHECK; ++ + virDomainObjPtr virDomainObjNew(virDomainXMLOptionPtr caps) + ATTRIBUTE_NONNULL(1); + +diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c +index 9c7faf0..b642a02 100644 +--- a/src/hyperv/hyperv_driver.c ++++ b/src/hyperv/hyperv_driver.c +@@ -876,7 +876,8 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) + def->mem.cur_balloon = memorySettingData->data->VirtualQuantity * 1024; /* megabyte to kilobyte */ + + if (virDomainDefSetVcpusMax(def, +- processorSettingData->data->VirtualQuantity) < 0) ++ processorSettingData->data->VirtualQuantity, ++ NULL) < 0) + goto cleanup; + + if (virDomainDefSetVcpus(def, +diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c +index be6017a..711e801 100644 +--- a/src/libxl/libxl_driver.c ++++ b/src/libxl/libxl_driver.c +@@ -557,7 +557,7 @@ libxlAddDom0(libxlDriverPrivatePtr driver) + def = NULL; + + virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED); +- if (virDomainDefSetVcpusMax(vm->def, d_info.vcpu_max_id + 1)) ++ if (virDomainDefSetVcpusMax(vm->def, d_info.vcpu_max_id + 1, driver->xmlopt)) + goto cleanup; + + if (virDomainDefSetVcpus(vm->def, d_info.vcpu_online) < 0) +@@ -2152,7 +2152,7 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + + switch (flags) { + case VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_CONFIG: +- if (virDomainDefSetVcpusMax(def, nvcpus) < 0) ++ if (virDomainDefSetVcpusMax(def, nvcpus, driver->xmlopt) < 0) + goto cleanup; + break; + +diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c +index acbc20b..a34204e 100644 +--- a/src/lxc/lxc_native.c ++++ b/src/lxc/lxc_native.c +@@ -1020,7 +1020,7 @@ lxcParseConfigString(const char *config, + + /* Value not handled by the LXC driver, setting to + * minimum required to make XML parsing pass */ +- if (virDomainDefSetVcpusMax(vmdef, 1) < 0) ++ if (virDomainDefSetVcpusMax(vmdef, 1, xmlopt) < 0) + goto error; + + if (virDomainDefSetVcpus(vmdef, 1) < 0) +diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c +index 50f4902..99ce95c 100644 +--- a/src/openvz/openvz_conf.c ++++ b/src/openvz/openvz_conf.c +@@ -572,7 +572,7 @@ int openvzLoadDomains(struct openvz_driver *driver) + if (ret == 0 || vcpus == 0) + vcpus = openvzGetNodeCPUs(); + +- if (virDomainDefSetVcpusMax(def, vcpus) < 0) ++ if (virDomainDefSetVcpusMax(def, vcpus, driver->xmlopt) < 0) + goto cleanup; + + if (virDomainDefSetVcpus(def, vcpus) < 0) +diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c +index 48c264b..78c91da 100644 +--- a/src/openvz/openvz_driver.c ++++ b/src/openvz/openvz_driver.c +@@ -70,7 +70,8 @@ static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid); + static int openvzConnectGetMaxVcpus(virConnectPtr conn, const char *type); + static int openvzDomainGetMaxVcpus(virDomainPtr dom); + static int openvzDomainSetVcpusInternal(virDomainObjPtr vm, +- unsigned int nvcpus); ++ unsigned int nvcpus, ++ virDomainXMLOptionPtr xmlopt); + static int openvzDomainSetMemoryInternal(virDomainObjPtr vm, + unsigned long long memory); + static int openvzGetVEStatus(virDomainObjPtr vm, int *status, int *reason); +@@ -1032,7 +1033,8 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla + goto cleanup; + } + if (virDomainDefGetVcpusMax(vm->def)) { +- if (openvzDomainSetVcpusInternal(vm, virDomainDefGetVcpusMax(vm->def)) < 0) { ++ if (openvzDomainSetVcpusInternal(vm, virDomainDefGetVcpusMax(vm->def), ++ driver->xmlopt) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not set number of vCPUs")); + goto cleanup; +@@ -1130,7 +1132,8 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml, + virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED); + + if (virDomainDefGetVcpusMax(vm->def) > 0) { +- if (openvzDomainSetVcpusInternal(vm, virDomainDefGetVcpusMax(vm->def)) < 0) { ++ if (openvzDomainSetVcpusInternal(vm, virDomainDefGetVcpusMax(vm->def), ++ driver->xmlopt) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not set number of vCPUs")); + goto cleanup; +@@ -1347,7 +1350,8 @@ static int openvzDomainGetMaxVcpus(virDomainPtr dom) + } + + static int openvzDomainSetVcpusInternal(virDomainObjPtr vm, +- unsigned int nvcpus) ++ unsigned int nvcpus, ++ virDomainXMLOptionPtr xmlopt) + { + char str_vcpus[32]; + const char *prog[] = { VZCTL, "--quiet", "set", PROGRAM_SENTINEL, +@@ -1364,7 +1368,7 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm, + if (virRun(prog, NULL) < 0) + return -1; + +- if (virDomainDefSetVcpusMax(vm->def, nvcpus) < 0) ++ if (virDomainDefSetVcpusMax(vm->def, nvcpus, xmlopt) < 0) + return -1; + + if (virDomainDefSetVcpus(vm->def, nvcpus) < 0) +@@ -1402,7 +1406,7 @@ static int openvzDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + goto cleanup; + } + +- if (openvzDomainSetVcpusInternal(vm, nvcpus) < 0) { ++ if (openvzDomainSetVcpusInternal(vm, nvcpus, driver->xmlopt) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not set number of vCPUs")); + goto cleanup; +diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c +index dce20bc..3dd8927 100644 +--- a/src/phyp/phyp_driver.c ++++ b/src/phyp/phyp_driver.c +@@ -3296,7 +3296,7 @@ phypDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) + goto err; + } + +- if (virDomainDefSetVcpusMax(&def, vcpus) < 0) ++ if (virDomainDefSetVcpusMax(&def, vcpus, phyp_driver->xmlopt) < 0) + goto err; + + if (virDomainDefSetVcpus(&def, vcpus) < 0) +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 71f2fb6..d3cf267 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4863,7 +4863,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + goto endjob; + } + +- if (virDomainDefSetVcpusMax(persistentDef, nvcpus) < 0) ++ if (virDomainDefSetVcpusMax(persistentDef, nvcpus, driver->xmlopt) < 0) + goto endjob; + } else { + if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0) +diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c +index b1d8a1d..0bcd1ad 100644 +--- a/src/qemu/qemu_parse_command.c ++++ b/src/qemu/qemu_parse_command.c +@@ -1659,7 +1659,8 @@ qemuParseCommandLineMem(virDomainDefPtr dom, + + static int + qemuParseCommandLineSmp(virDomainDefPtr dom, +- const char *val) ++ const char *val, ++ virDomainXMLOptionPtr xmlopt) + { + unsigned int sockets = 0; + unsigned int cores = 0; +@@ -1701,7 +1702,7 @@ qemuParseCommandLineSmp(virDomainDefPtr dom, + if (maxcpus == 0) + maxcpus = vcpus; + +- if (virDomainDefSetVcpusMax(dom, maxcpus) < 0) ++ if (virDomainDefSetVcpusMax(dom, maxcpus, xmlopt) < 0) + goto error; + + if (virDomainDefSetVcpus(dom, vcpus) < 0) +@@ -1819,7 +1820,7 @@ qemuParseCommandLine(virCapsPtr caps, + def->id = -1; + def->mem.cur_balloon = 64 * 1024; + virDomainDefSetMemoryTotal(def, def->mem.cur_balloon); +- if (virDomainDefSetVcpusMax(def, 1) < 0) ++ if (virDomainDefSetVcpusMax(def, 1, xmlopt) < 0) + goto error; + if (virDomainDefSetVcpus(def, 1) < 0) + goto error; +@@ -1899,7 +1900,7 @@ qemuParseCommandLine(virCapsPtr caps, + goto error; + } else if (STREQ(arg, "-smp")) { + WANT_VALUE(); +- if (qemuParseCommandLineSmp(def, val) < 0) ++ if (qemuParseCommandLineSmp(def, val, xmlopt) < 0) + goto error; + } else if (STREQ(arg, "-uuid")) { + WANT_VALUE(); +diff --git a/src/test/test_driver.c b/src/test/test_driver.c +index e7bca81..36bbd7f 100644 +--- a/src/test/test_driver.c ++++ b/src/test/test_driver.c +@@ -2336,6 +2336,7 @@ static int + testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus, + unsigned int flags) + { ++ testDriverPtr driver = domain->conn->privateData; + virDomainObjPtr privdom = NULL; + virDomainDefPtr def; + virDomainDefPtr persistentDef; +@@ -2383,7 +2384,8 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus, + + if (persistentDef) { + if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { +- if (virDomainDefSetVcpusMax(persistentDef, nrCpus) < 0) ++ if (virDomainDefSetVcpusMax(persistentDef, nrCpus, ++ driver->xmlopt) < 0) + goto cleanup; + } else { + if (virDomainDefSetVcpus(persistentDef, nrCpus) < 0) +diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c +index 8e49268..a14ab67 100644 +--- a/src/vbox/vbox_common.c ++++ b/src/vbox/vbox_common.c +@@ -3885,7 +3885,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) + virDomainDefSetMemoryTotal(def, memorySize * 1024); + + gVBoxAPI.UIMachine.GetCPUCount(machine, &CPUCount); +- if (virDomainDefSetVcpusMax(def, CPUCount) < 0) ++ if (virDomainDefSetVcpusMax(def, CPUCount, data->xmlopt) < 0) + goto cleanup; + + if (virDomainDefSetVcpus(def, CPUCount) < 0) +@@ -6044,7 +6044,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, + def->dom->os.type = VIR_DOMAIN_OSTYPE_HVM; + def->dom->os.arch = virArchFromHost(); + gVBoxAPI.UIMachine.GetCPUCount(machine, &CPUCount); +- if (virDomainDefSetVcpusMax(def->dom, CPUCount) < 0) ++ if (virDomainDefSetVcpusMax(def->dom, CPUCount, data->xmlopt) < 0) + goto cleanup; + + if (virDomainDefSetVcpus(def->dom, CPUCount) < 0) +diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c +index d443dd0..0f557a8 100644 +--- a/src/vmx/vmx.c ++++ b/src/vmx/vmx.c +@@ -1457,7 +1457,7 @@ virVMXParseConfig(virVMXContext *ctx, + goto cleanup; + } + +- if (virDomainDefSetVcpusMax(def, numvcpus) < 0) ++ if (virDomainDefSetVcpusMax(def, numvcpus, xmlopt) < 0) + goto cleanup; + + if (virDomainDefSetVcpus(def, numvcpus) < 0) +diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c +index 9d0bc0d..7871230 100644 +--- a/src/vz/vz_sdk.c ++++ b/src/vz/vz_sdk.c +@@ -1309,7 +1309,8 @@ prlsdkConvertDomainState(VIRTUAL_MACHINE_STATE domainState, + + static int + prlsdkConvertCpuInfo(PRL_HANDLE sdkdom, +- virDomainDefPtr def) ++ virDomainDefPtr def, ++ virDomainXMLOptionPtr xmlopt) + { + char *buf; + int hostcpus; +@@ -1327,7 +1328,7 @@ prlsdkConvertCpuInfo(PRL_HANDLE sdkdom, + if (cpuCount > hostcpus) + cpuCount = hostcpus; + +- if (virDomainDefSetVcpusMax(def, cpuCount) < 0) ++ if (virDomainDefSetVcpusMax(def, cpuCount, xmlopt) < 0) + goto cleanup; + + if (virDomainDefSetVcpus(def, cpuCount) < 0) +@@ -1706,7 +1707,7 @@ prlsdkLoadDomain(vzDriverPtr driver, virDomainObjPtr dom) + convert to Kbytes */ + def->mem.cur_balloon = ram << 10; + +- if (prlsdkConvertCpuInfo(sdkdom, def) < 0) ++ if (prlsdkConvertCpuInfo(sdkdom, def, driver->xmlopt) < 0) + goto error; + + if (prlsdkConvertCpuMode(sdkdom, def) < 0) +diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c +index 3c34652..8335078 100644 +--- a/src/xen/xm_internal.c ++++ b/src/xen/xm_internal.c +@@ -700,7 +700,7 @@ xenXMDomainSetVcpusFlags(virConnectPtr conn, + } + + if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { +- if (virDomainDefSetVcpusMax(entry->def, vcpus) < 0) ++ if (virDomainDefSetVcpusMax(entry->def, vcpus, priv->xmlopt) < 0) + goto cleanup; + } else { + if (virDomainDefSetVcpus(entry->def, vcpus) < 0) +diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c +index 676ed5b..9a861c1 100644 +--- a/src/xenapi/xenapi_driver.c ++++ b/src/xenapi/xenapi_driver.c +@@ -1505,7 +1505,7 @@ xenapiDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) + + vcpus = xenapiDomainGetMaxVcpus(dom); + +- if (virDomainDefSetVcpusMax(defPtr, vcpus) < 0) ++ if (virDomainDefSetVcpusMax(defPtr, vcpus, priv->xmlopt) < 0) + goto error; + + if (virDomainDefSetVcpus(defPtr, vcpus) < 0) +diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c +index f62a5b1..8365a2c 100644 +--- a/src/xenconfig/xen_common.c ++++ b/src/xenconfig/xen_common.c +@@ -483,7 +483,9 @@ xenParsePCI(virConfPtr conf, virDomainDefPtr def) + + + static int +-xenParseCPUFeatures(virConfPtr conf, virDomainDefPtr def) ++xenParseCPUFeatures(virConfPtr conf, ++ virDomainDefPtr def, ++ virDomainXMLOptionPtr xmlopt) + { + unsigned long count = 0; + const char *str = NULL; +@@ -492,7 +494,7 @@ xenParseCPUFeatures(virConfPtr conf, virDomainDefPtr def) + if (xenConfigGetULong(conf, "vcpus", &count, 1) < 0) + return -1; + +- if (virDomainDefSetVcpusMax(def, count) < 0) ++ if (virDomainDefSetVcpusMax(def, count, xmlopt) < 0) + return -1; + + if (virDomainDefSetVcpus(def, count) < 0) +@@ -502,7 +504,7 @@ xenParseCPUFeatures(virConfPtr conf, virDomainDefPtr def) + if (xenConfigGetULong(conf, "maxvcpus", &count, 0) < 0) + return -1; + +- if (virDomainDefSetVcpusMax(def, count) < 0) ++ if (virDomainDefSetVcpusMax(def, count, xmlopt) < 0) + return -1; + } + +@@ -1051,7 +1053,8 @@ int + xenParseConfigCommon(virConfPtr conf, + virDomainDefPtr def, + virCapsPtr caps, +- const char *nativeFormat) ++ const char *nativeFormat, ++ virDomainXMLOptionPtr xmlopt) + { + if (xenParseGeneralMeta(conf, def, caps) < 0) + return -1; +@@ -1062,7 +1065,7 @@ xenParseConfigCommon(virConfPtr conf, + if (xenParseEventsActions(conf, def) < 0) + return -1; + +- if (xenParseCPUFeatures(conf, def) < 0) ++ if (xenParseCPUFeatures(conf, def, xmlopt) < 0) + return -1; + + if (xenParseTimeOffset(conf, def) < 0) +diff --git a/src/xenconfig/xen_common.h b/src/xenconfig/xen_common.h +index 1c74bee..9055692 100644 +--- a/src/xenconfig/xen_common.h ++++ b/src/xenconfig/xen_common.h +@@ -59,7 +59,8 @@ int xenConfigCopyStringOpt(virConfPtr conf, + int xenParseConfigCommon(virConfPtr conf, + virDomainDefPtr def, + virCapsPtr caps, +- const char *nativeFormat); ++ const char *nativeFormat, ++ virDomainXMLOptionPtr xmlopt); + + int xenFormatConfigCommon(virConfPtr conf, + virDomainDefPtr def, +diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c +index ea6c177..40dc53c 100644 +--- a/src/xenconfig/xen_sxpr.c ++++ b/src/xenconfig/xen_sxpr.c +@@ -1233,7 +1233,7 @@ xenParseSxpr(const struct sexpr *root, + } + } + +- if (virDomainDefSetVcpusMax(def, sexpr_int(root, "domain/vcpus")) < 0) ++ if (virDomainDefSetVcpusMax(def, sexpr_int(root, "domain/vcpus"), xmlopt) < 0) + goto error; + + vcpus = count_one_bits_l(sexpr_u64(root, "domain/vcpu_avail")); +diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c +index f8cebd2..25a3621 100644 +--- a/src/xenconfig/xen_xl.c ++++ b/src/xenconfig/xen_xl.c +@@ -594,7 +594,8 @@ xenParseXL(virConfPtr conf, + def->virtType = VIR_DOMAIN_VIRT_XEN; + def->id = -1; + +- if (xenParseConfigCommon(conf, def, caps, XEN_CONFIG_FORMAT_XL) < 0) ++ if (xenParseConfigCommon(conf, def, caps, XEN_CONFIG_FORMAT_XL, ++ xmlopt) < 0) + goto cleanup; + + if (xenParseXLOS(conf, def, caps) < 0) +diff --git a/src/xenconfig/xen_xm.c b/src/xenconfig/xen_xm.c +index 1023ed2..124c94a 100644 +--- a/src/xenconfig/xen_xm.c ++++ b/src/xenconfig/xen_xm.c +@@ -447,7 +447,8 @@ xenParseXM(virConfPtr conf, + def->virtType = VIR_DOMAIN_VIRT_XEN; + def->id = -1; + +- if (xenParseConfigCommon(conf, def, caps, XEN_CONFIG_FORMAT_XM) < 0) ++ if (xenParseConfigCommon(conf, def, caps, XEN_CONFIG_FORMAT_XM, ++ xmlopt) < 0) + goto cleanup; + + if (xenParseXMOS(conf, def) < 0) +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Add-support-for-virtio-net.rx_queue_size.patch b/SOURCES/libvirt-conf-Add-support-for-virtio-net.rx_queue_size.patch new file mode 100644 index 0000000..8508eae --- /dev/null +++ b/SOURCES/libvirt-conf-Add-support-for-virtio-net.rx_queue_size.patch @@ -0,0 +1,317 @@ +From bf9cd171c0979ae6a2eee0bee7841c23c69a1f42 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Privoznik +Date: Sat, 10 Sep 2016 08:25:09 +0200 +Subject: [PATCH] conf: Add support for virtio-net.rx_queue_size + +https://bugzilla.redhat.com/show_bug.cgi?id=1366989 + +QEMU added another virtio-net tunable [1]. It basically allows +users to set the size of RX virtio ring. But because virtio-net +uses two separate ring buffers to pass data from/to guest they +named it explicitly rx_queue_size. We should expose it in our XML +too. + +1: http://lists.nongnu.org/archive/html/qemu-devel/2016-08/msg02029.html + +Conflicts: tests/qemuxml2xmltest.c - there are more tests in +upstream. + +Signed-off-by: Michal Privoznik +(cherry picked from commit c56cdf25935e0e7fe6b0e803d62fec223b9a0df2) +Signed-off-by: Michal Privoznik +--- + docs/formatdomain.html.in | 16 ++++++++- + docs/schemas/domaincommon.rng | 5 +++ + src/conf/domain_conf.c | 16 +++++++++ + src/conf/domain_conf.h | 1 + + src/qemu/qemu_domain.c | 7 ++++ + ...ml2argv-net-virtio-rxqueuesize-invalid-size.xml | 29 +++++++++++++++ + .../qemuxml2argv-net-virtio-rxqueuesize.xml | 29 +++++++++++++++ + tests/qemuxml2argvtest.c | 1 + + .../qemuxml2xmlout-net-virtio-rxqueuesize.xml | 41 ++++++++++++++++++++++ + tests/qemuxml2xmltest.c | 1 + + 10 files changed, 145 insertions(+), 1 deletion(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize-invalid-size.xml + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml + create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-net-virtio-rxqueuesize.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index 5b4f83e..4970d61 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -4648,7 +4648,7 @@ qemu-kvm -net nic,model=? /dev/null + <source network='default'/> + <target dev='vnet1'/> + <model type='virtio'/> +- <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'> ++ <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5' rx_queue_size='256'> + <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/> + <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/> + </driver> +@@ -4764,6 +4764,20 @@ qemu-kvm -net nic,model=? /dev/null + virtio-net since 1.0.6 (QEMU and KVM only) + vhost-user since 1.2.17 (QEMU and KVM only) + ++
rx_queue_size
++
++ The optional rx_queue_size attribute controls ++ the size of virtio ring for each queue as described above. ++ The default value is hypervisor dependent and may change ++ across its releases. Moreover, some hypervisors may pose ++ some restrictions on actual value. For instance, latest ++ QEMU (as of 2016-09-01) requires value to be a power of two ++ from [256, 1024] range. ++ Since 2.3.0 (QEMU and KVM only)

++ ++ In general you should leave this option alone, unless you ++ are very certain you know what you are doing. ++
+ +

+ Offloading options for the host and guest can be configured using +diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index 44e39c8..6935b0d 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -2530,6 +2530,11 @@ + + + ++ ++ ++ ++ ++ + + + iothread +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index edf5de2..caa9ce0 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -9059,6 +9059,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, + char *ioeventfd = NULL; + char *event_idx = NULL; + char *queues = NULL; ++ char *rx_queue_size = NULL; + char *str = NULL; + char *filter = NULL; + char *internal = NULL; +@@ -9222,6 +9223,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, + ioeventfd = virXMLPropString(cur, "ioeventfd"); + event_idx = virXMLPropString(cur, "event_idx"); + queues = virXMLPropString(cur, "queues"); ++ rx_queue_size = virXMLPropString(cur, "rx_queue_size"); + } else if (xmlStrEqual(cur->name, BAD_CAST "filterref")) { + if (filter) { + virReportError(VIR_ERR_XML_ERROR, "%s", +@@ -9605,6 +9607,16 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, + if (q > 1) + def->driver.virtio.queues = q; + } ++ if (rx_queue_size) { ++ unsigned int q; ++ if (virStrToLong_uip(rx_queue_size, NULL, 10, &q) < 0) { ++ virReportError(VIR_ERR_XML_DETAIL, ++ _("'rx_queue_size' attribute must be positive number: %s"), ++ rx_queue_size); ++ goto error; ++ } ++ def->driver.virtio.rx_queue_size = q; ++ } + if ((str = virXPathString("string(./driver/host/@csum)", ctxt))) { + if ((val = virTristateSwitchTypeFromString(str)) <= 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +@@ -9785,6 +9797,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, + VIR_FREE(ioeventfd); + VIR_FREE(event_idx); + VIR_FREE(queues); ++ VIR_FREE(rx_queue_size); + VIR_FREE(str); + VIR_FREE(filter); + VIR_FREE(type); +@@ -20964,6 +20977,9 @@ virDomainVirtioNetDriverFormat(char **outstr, + } + if (def->driver.virtio.queues) + virBufferAsprintf(&buf, "queues='%u' ", def->driver.virtio.queues); ++ if (def->driver.virtio.rx_queue_size) ++ virBufferAsprintf(&buf, "rx_queue_size='%u' ", ++ def->driver.virtio.rx_queue_size); + + virBufferTrim(&buf, " ", -1); + +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 305ae96..c674796 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -903,6 +903,7 @@ struct _virDomainNetDef { + virTristateSwitch ioeventfd; + virTristateSwitch event_idx; + unsigned int queues; /* Multiqueue virtio-net */ ++ unsigned int rx_queue_size; + struct { + virTristateSwitch csum; + virTristateSwitch gso; +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 989baa5..f001c6e 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -2469,6 +2469,13 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, + "not supported by QEMU")); + goto cleanup; + } ++ ++ if (STREQ_NULLABLE(net->model, "virtio") && ++ net->driver.virtio.rx_queue_size & (net->driver.virtio.rx_queue_size - 1)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("rx_queue_size has to be a power of two")); ++ goto cleanup; ++ } + } + + ret = 0; +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize-invalid-size.xml b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize-invalid-size.xml +new file mode 100644 +index 0000000..d308bc1 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize-invalid-size.xml +@@ -0,0 +1,29 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml +new file mode 100644 +index 0000000..cfb4742 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml +@@ -0,0 +1,29 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 9de2f94..f4054e7 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1040,6 +1040,7 @@ mymain(void) + QEMU_CAPS_VIRTIO_S390); + DO_TEST("net-virtio-ccw", + QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); ++ DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE); + DO_TEST("net-eth", NONE); + DO_TEST("net-eth-ifname", NONE); + DO_TEST("net-eth-names", NONE); +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-virtio-rxqueuesize.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-virtio-rxqueuesize.xml +new file mode 100644 +index 0000000..5b41936 +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-virtio-rxqueuesize.xml +@@ -0,0 +1,41 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++

++ ++ ++
++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index 639494b..5458361 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -518,6 +518,7 @@ mymain(void) + DO_TEST("net-eth"); + DO_TEST("net-eth-ifname"); + DO_TEST("net-virtio-network-portgroup"); ++ DO_TEST("net-virtio-rxqueuesize"); + DO_TEST("net-hostdev"); + DO_TEST("net-hostdev-vfio"); + DO_TEST("net-midonet"); +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Allow-error-reporting-in-virDomainDiskSourceIsBlockType.patch b/SOURCES/libvirt-conf-Allow-error-reporting-in-virDomainDiskSourceIsBlockType.patch deleted file mode 100644 index 5f07124..0000000 --- a/SOURCES/libvirt-conf-Allow-error-reporting-in-virDomainDiskSourceIsBlockType.patch +++ /dev/null @@ -1,168 +0,0 @@ -From c98b451c7f34d5884a59ae5514cd6334065362b2 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Tue, 4 Aug 2015 08:05:52 -0400 -Subject: [PATCH] conf: Allow error reporting in virDomainDiskSourceIsBlockType - -https://bugzilla.redhat.com/show_bug.cgi?id=1238545 - -Rather than provide a somewhat generic error message when the API -returns false, allow the caller to supply a "report = true" option -in order to cause virReportError's to describe which of the 3 paths -that can cause failure. - -Some callers don't care about what caused the failure, they just want -to have a true/false - for those, calling with report = false should -be sufficient. - -(cherry picked from commit 36025c552cae6c79ab9e54f65e758907845846ac) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 21 ++++++++++++++++++--- - src/conf/domain_conf.h | 2 +- - src/lxc/lxc_cgroup.c | 2 +- - src/lxc/lxc_driver.c | 6 ++---- - src/qemu/qemu_command.c | 5 +---- - src/qemu/qemu_conf.c | 6 +++--- - 6 files changed, 26 insertions(+), 16 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index d990180..72d87dd 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -23812,10 +23812,16 @@ virDomainDefFindDevice(virDomainDefPtr def, - * Return true if its source is block type, or false otherwise. - */ - bool --virDomainDiskSourceIsBlockType(virStorageSourcePtr src) -+virDomainDiskSourceIsBlockType(virStorageSourcePtr src, -+ bool report) - { -- if (!src->path) -+ if (!src->path) { -+ if (report) -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("source path not found for device='lun' " -+ "using type='%d'"), src->type); - return false; -+ } - - if (src->type == VIR_STORAGE_TYPE_BLOCK) - return true; -@@ -23831,11 +23837,20 @@ virDomainDiskSourceIsBlockType(virStorageSourcePtr src) - * (e.g. set sgio=filtered|unfiltered for it) in libvirt. - */ - if (src->srcpool->pooltype == VIR_STORAGE_POOL_ISCSI && -- src->srcpool->mode == VIR_STORAGE_SOURCE_POOL_MODE_DIRECT) -+ src->srcpool->mode == VIR_STORAGE_SOURCE_POOL_MODE_DIRECT) { -+ if (report) -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("disk device='lun' for iSCSI is not " -+ "supported with mode='direct'.")); - return false; -+ } - - return true; - } -+ if (report) -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("disk device='lun' is only valid for block " -+ "type disk source")); - return false; - } - -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 0adaefc..604d0b8 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -3126,7 +3126,7 @@ int virDomainDefFindDevice(virDomainDefPtr def, - virDomainDeviceDefPtr dev, - bool reportError); - --bool virDomainDiskSourceIsBlockType(virStorageSourcePtr src) -+bool virDomainDiskSourceIsBlockType(virStorageSourcePtr src, bool report) - ATTRIBUTE_NONNULL(1); - - void virDomainChrSourceDefClear(virDomainChrSourceDefPtr def); -diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c -index 507d567..e9caa3e 100644 ---- a/src/lxc/lxc_cgroup.c -+++ b/src/lxc/lxc_cgroup.c -@@ -382,7 +382,7 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def, - - VIR_DEBUG("Allowing any disk block devs"); - for (i = 0; i < def->ndisks; i++) { -- if (!virDomainDiskSourceIsBlockType(def->disks[i]->src)) -+ if (!virDomainDiskSourceIsBlockType(def->disks[i]->src, false)) - continue; - - if (virCgroupAllowDevicePath(cgroup, -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index cc1277b..5ecfc7a 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -4069,11 +4069,9 @@ lxcDomainAttachDeviceDiskLive(virLXCDriverPtr driver, - goto cleanup; - } - -- if (!virDomainDiskSourceIsBlockType(def->src)) { -- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -- _("Can't setup disk for non-block device")); -+ if (!virDomainDiskSourceIsBlockType(def->src, true)) - goto cleanup; -- } -+ - src = virDomainDiskGetSource(def); - if (src == NULL) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 48d2ee0..feba308 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -3453,10 +3453,7 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk) - virStorageNetProtocolTypeToString(disk->src->protocol)); - goto error; - } -- } else if (!virDomainDiskSourceIsBlockType(disk->src)) { -- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -- _("disk device='lun' is only valid for block " -- "type disk source")); -+ } else if (!virDomainDiskSourceIsBlockType(disk->src, true)) { - goto error; - } - if (disk->wwn) { -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index d521886..7c2947c 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1178,7 +1178,7 @@ qemuAddSharedDisk(virQEMUDriverPtr driver, - char *key = NULL; - int ret = -1; - -- if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src)) -+ if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src, false)) - return 0; - - qemuDriverLock(driver); -@@ -1315,7 +1315,7 @@ qemuRemoveSharedDisk(virQEMUDriverPtr driver, - char *key = NULL; - int ret = -1; - -- if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src)) -+ if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src, false)) - return 0; - - qemuDriverLock(driver); -@@ -1400,7 +1400,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - disk = dev->data.disk; - - if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN || -- !virDomainDiskSourceIsBlockType(disk->src)) -+ !virDomainDiskSourceIsBlockType(disk->src, false)) - return 0; - - path = virDomainDiskGetSource(disk); --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-Check-for-attach-disk-usage-of-iothread-0.patch b/SOURCES/libvirt-conf-Check-for-attach-disk-usage-of-iothread-0.patch deleted file mode 100644 index 3d4a7bf..0000000 --- a/SOURCES/libvirt-conf-Check-for-attach-disk-usage-of-iothread-0.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 17254fa42facf18071c99604472aa0b878ac904a Mon Sep 17 00:00:00 2001 -Message-Id: <17254fa42facf18071c99604472aa0b878ac904a@dist-git> -From: John Ferlan -Date: Thu, 20 Aug 2015 12:23:49 -0400 -Subject: [PATCH] conf: Check for attach disk usage of iothread=0 - -https://bugzilla.redhat.com/show_bug.cgi?id=1253108 - -Since iothreadid = 0 is invalid, we need to check for it when attempting -to add a disk; otherwise, someone would think/believe their attempt to -add an IOThread to the disk would succeed. Luckily other code ignored -things when ->iothread == 0... - -(cherry picked from commit cb5d0193aa13bf922136bb0fc7520f97b0af52f9) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 9aee04f..b4503c3 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -7321,7 +7321,8 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, - } - - if (driverIOThread) { -- if (virStrToLong_uip(driverIOThread, NULL, 10, &def->iothread) < 0) { -+ if (virStrToLong_uip(driverIOThread, NULL, 10, &def->iothread) < 0 || -+ def->iothread == 0) { - virReportError(VIR_ERR_XML_ERROR, - _("Invalid iothread attribute in disk driver " - "element: %s"), driverIOThread); --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-Document-all-VIR_DOMAIN_DEF_PARSE_-flags.patch b/SOURCES/libvirt-conf-Document-all-VIR_DOMAIN_DEF_PARSE_-flags.patch deleted file mode 100644 index 2503310..0000000 --- a/SOURCES/libvirt-conf-Document-all-VIR_DOMAIN_DEF_PARSE_-flags.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 1a3e9b5e8b750025aa2c51ae5dd1cd2f98278340 Mon Sep 17 00:00:00 2001 -Message-Id: <1a3e9b5e8b750025aa2c51ae5dd1cd2f98278340@dist-git> -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:40 +0200 -Subject: [PATCH] conf: Document all VIR_DOMAIN_DEF_PARSE_* flags - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -(cherry picked from commit 24e3b0eda1373608c1c4f1176530d324418ae82b) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.h | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index e0102db..63685c6 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2593,19 +2593,25 @@ void virDomainObjListRemoveLocked(virDomainObjListPtr doms, - typedef enum { - /* parse internal domain status information */ - VIR_DOMAIN_DEF_PARSE_STATUS = 1 << 0, -+ /* Parse only parts of the XML that would be present in an inactive libvirt -+ * XML. Note that the flag does not imply that ABI incompatible -+ * transformations can be used, since it's used to strip runtime info when -+ * restoring save images/migration. */ - VIR_DOMAIN_DEF_PARSE_INACTIVE = 1 << 1, - /* parse element */ - VIR_DOMAIN_DEF_PARSE_ACTUAL_NET = 1 << 2, - /* parse original states of host PCI device */ - VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES = 1 << 3, -+ /* internal flag passed to device info sub-parser to allow using */ - VIR_DOMAIN_DEF_PARSE_ALLOW_ROM = 1 << 4, -+ /* internal flag passed to device info sub-parser to allow specifying boot order */ - VIR_DOMAIN_DEF_PARSE_ALLOW_BOOT = 1 << 5, - /* parse only source half of */ - VIR_DOMAIN_DEF_PARSE_DISK_SOURCE = 1 << 6, -+ /* perform RNG schema validation on the passed XML document */ - VIR_DOMAIN_DEF_PARSE_VALIDATE = 1 << 7, - /* don't validate os.type and arch against capabilities. Prevents -- * VMs from disappearing when qemu is removed and libvirtd is restarted -- */ -+ * VMs from disappearing when qemu is removed and libvirtd is restarted */ - VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS = 1 << 8, - } virDomainDefParseFlags; - --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Don-t-allow-duplicated-target-names-regardless-of-bus.patch b/SOURCES/libvirt-conf-Don-t-allow-duplicated-target-names-regardless-of-bus.patch deleted file mode 100644 index a17e7de..0000000 --- a/SOURCES/libvirt-conf-Don-t-allow-duplicated-target-names-regardless-of-bus.patch +++ /dev/null @@ -1,96 +0,0 @@ -From fbced70807b7564359803a3877fa796c90b32f9f Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Thu, 9 Jul 2015 08:45:36 -0400 -Subject: [PATCH] conf: Don't allow duplicated target names regardless of bus - -https://bugzilla.redhat.com/show_bug.cgi?id=1142631 - -Commit id 'e0e290552' added a check to determine if the same bus -had the same target value. It seems that's not quite good enough -as the check should check the target name value regardless of bus type. - -Also added a DO_TEST_DIFFERENT to exhibit the issue - -(cherry picked from commit 2e09729b1c1cc0096be4edd2d939bf1044aec506) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 3 +- - .../qemuxml2argv-disk-same-targets.xml | 35 ++++++++++++++++++++++ - tests/qemuxml2argvtest.c | 3 ++ - 3 files changed, 39 insertions(+), 2 deletions(-) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-same-targets.xml - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 006e04e..f3416cf 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -12656,8 +12656,7 @@ virDomainDiskDefDstDuplicates(virDomainDefPtr def) - - for (i = 1; i < def->ndisks; i++) { - for (j = 0; j < i; j++) { -- if (def->disks[i]->bus == def->disks[j]->bus && -- STREQ(def->disks[i]->dst, def->disks[j]->dst)) { -+ if (STREQ(def->disks[i]->dst, def->disks[j]->dst)) { - virReportError(VIR_ERR_XML_ERROR, - _("target '%s' duplicated for disk sources " - "'%s' and '%s'"), -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-same-targets.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-same-targets.xml -new file mode 100644 -index 0000000..3276ce5 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-same-targets.xml -@@ -0,0 +1,35 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c -index bee6637..4290c06 100644 ---- a/tests/qemuxml2argvtest.c -+++ b/tests/qemuxml2argvtest.c -@@ -903,6 +903,9 @@ mymain(void) - QEMU_CAPS_DEVICE); - DO_TEST("disk-snapshot", - QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT); -+ DO_TEST_FAILURE("disk-same-targets", -+ QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_SCSI_LSI, -+ QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG); - DO_TEST("event_idx", - QEMU_CAPS_DRIVE, - QEMU_CAPS_VIRTIO_BLK_EVENT_IDX, --- -2.4.5 - diff --git a/SOURCES/libvirt-conf-Don-t-always-recalculate-initial-memory-size-from-NUMA-size-totals.patch b/SOURCES/libvirt-conf-Don-t-always-recalculate-initial-memory-size-from-NUMA-size-totals.patch deleted file mode 100644 index 1e87d36..0000000 --- a/SOURCES/libvirt-conf-Don-t-always-recalculate-initial-memory-size-from-NUMA-size-totals.patch +++ /dev/null @@ -1,151 +0,0 @@ -From ab98ed58d652aff099c8ed1269d01ed23ea81342 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:45 +0200 -Subject: [PATCH] conf: Don't always recalculate initial memory size from NUMA - size totals - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -When implementing memory hotplug I've opted to recalculate the initial -memory size (contents of the element) as a sum of the sizes of -NUMA nodes when NUMA was enabled. This was based on an assumption that -qemu did not allow starting when the NUMA node size total didn't equal -to the initial memory size. Unfortunately the check was introduced to -qemu just lately. - -This patch uses the new XML parser flag to decide whether it's safe to -update the memory size total from the NUMA cell sizes or not. - -As an additional improvement we now report an error in case when the -size of hotplug memory would exceed the total memory size. - -The rest of the changes assures that the function is called with correct -flags. - -(cherry picked from commit 0fed5a7bc79865fe00fd5a328a2e520934c52ff7) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 37 +++++++++++++++++++++++++++++-------- - src/conf/domain_conf.h | 1 + - src/qemu/qemu_command.c | 3 ++- - 3 files changed, 32 insertions(+), 9 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 3625310..f5320fe 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -3640,15 +3640,34 @@ virDomainDefRemoveDuplicateMetadata(virDomainDefPtr def) - - - static int --virDomainDefPostParseMemory(virDomainDefPtr def) -+virDomainDefPostParseMemory(virDomainDefPtr def, -+ unsigned int parseFlags) - { - size_t i; -+ unsigned long long numaMemory = 0; -+ unsigned long long hotplugMemory = 0; - -- if ((def->mem.initial_memory = virDomainNumaGetMemorySize(def->numa)) == 0) { -- def->mem.initial_memory = def->mem.total_memory; -+ /* Attempt to infer the initial memory size from the sum NUMA memory sizes -+ * in case ABI updates are allowed or the element wasn't specified */ -+ if (def->mem.total_memory == 0 || -+ parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) -+ numaMemory = virDomainNumaGetMemorySize(def->numa); - -+ if (numaMemory) { -+ virDomainDefSetMemoryInitial(def, numaMemory); -+ } else { -+ /* calculate the sizes of hotplug memory */ - for (i = 0; i < def->nmems; i++) -- def->mem.initial_memory -= def->mems[i]->size; -+ hotplugMemory += def->mems[i]->size; -+ -+ if (hotplugMemory > def->mem.total_memory) { -+ virReportError(VIR_ERR_XML_ERROR, "%s", -+ _("Total size of memory devices exceeds the total " -+ "memory size")); -+ return -1; -+ } -+ -+ virDomainDefSetMemoryInitial(def, def->mem.total_memory - hotplugMemory); - } - - if (virDomainDefGetMemoryInitial(def) == 0) { -@@ -3684,7 +3703,8 @@ virDomainDefPostParseMemory(virDomainDefPtr def) - - static int - virDomainDefPostParseInternal(virDomainDefPtr def, -- virCapsPtr caps ATTRIBUTE_UNUSED) -+ virCapsPtr caps ATTRIBUTE_UNUSED, -+ unsigned int parseFlags) - { - size_t i; - -@@ -3695,7 +3715,7 @@ virDomainDefPostParseInternal(virDomainDefPtr def, - return -1; - } - -- if (virDomainDefPostParseMemory(def) < 0) -+ if (virDomainDefPostParseMemory(def, parseFlags) < 0) - return -1; - - /* -@@ -3993,6 +4013,7 @@ virDomainDefPostParseDeviceIterator(virDomainDefPtr def ATTRIBUTE_UNUSED, - int - virDomainDefPostParse(virDomainDefPtr def, - virCapsPtr caps, -+ unsigned int parseFlags, - virDomainXMLOptionPtr xmlopt) - { - int ret; -@@ -4018,7 +4039,7 @@ virDomainDefPostParse(virDomainDefPtr def, - return ret; - - -- if ((ret = virDomainDefPostParseInternal(def, caps)) < 0) -+ if ((ret = virDomainDefPostParseInternal(def, caps, parseFlags)) < 0) - return ret; - - return 0; -@@ -16278,7 +16299,7 @@ virDomainDefParseXML(xmlDocPtr xml, - goto error; - - /* callback to fill driver specific domain aspects */ -- if (virDomainDefPostParse(def, caps, xmlopt) < 0) -+ if (virDomainDefPostParse(def, caps, flags, xmlopt) < 0) - goto error; - - /* Auto-add any implied controllers which aren't present */ -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 61bf963..e322adf 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2423,6 +2423,7 @@ virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt) - int - virDomainDefPostParse(virDomainDefPtr def, - virCapsPtr caps, -+ unsigned int parseFlags, - virDomainXMLOptionPtr xmlopt); - - static inline bool -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 3fd695b..701ccc3 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -13672,7 +13672,8 @@ qemuParseCommandLine(virCapsPtr qemuCaps, - if (virDomainDefAddImplicitControllers(def) < 0) - goto error; - -- if (virDomainDefPostParse(def, qemuCaps, xmlopt) < 0) -+ if (virDomainDefPostParse(def, qemuCaps, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, -+ xmlopt) < 0) - goto error; - - if (cmd->num_args || cmd->num_env) { --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Don-t-report-errors-from-virDomainDefGetVcpu.patch b/SOURCES/libvirt-conf-Don-t-report-errors-from-virDomainDefGetVcpu.patch new file mode 100644 index 0000000..021f218 --- /dev/null +++ b/SOURCES/libvirt-conf-Don-t-report-errors-from-virDomainDefGetVcpu.patch @@ -0,0 +1,76 @@ +From 5304cda0dc6e8f370a1f80050e03fdc4d6479d06 Mon Sep 17 00:00:00 2001 +Message-Id: <5304cda0dc6e8f370a1f80050e03fdc4d6479d06@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:45 -0400 +Subject: [PATCH] conf: Don't report errors from virDomainDefGetVcpu + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Most callers make sure that it's never called with an out of range vCPU. +Every other caller reports a different error explicitly. Drop the error +reporting and clean up some dead code paths. + +(cherry picked from commit 9cc931f0bbfc4529b3d07b4226af7b218624858d) +--- + src/conf/domain_conf.c | 6 +----- + src/qemu/qemu_driver.c | 10 ++-------- + 2 files changed, 3 insertions(+), 13 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index a923b60..7a12462 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -1433,12 +1433,8 @@ virDomainVcpuDefPtr + virDomainDefGetVcpu(virDomainDefPtr def, + unsigned int vcpu) + { +- if (vcpu >= def->maxvcpus) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +- _("vCPU '%u' is not present in domain definition"), +- vcpu); ++ if (vcpu >= def->maxvcpus) + return NULL; +- } + + return &def->vcpus[vcpu]; + } +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index b4ab095..71f2fb6 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4620,14 +4620,11 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + unsigned int vcpu) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- virDomainVcpuDefPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); + int ret = -1; + int rc; + int oldvcpus = virDomainDefGetVcpus(vm->def); + +- if (!(vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu))) +- return -1; +- + if (vcpuinfo->online) { + virReportError(VIR_ERR_INVALID_ARG, + _("vCPU '%u' is already online"), vcpu); +@@ -4672,14 +4669,11 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, + unsigned int vcpu) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- virDomainVcpuDefPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); + int ret = -1; + int rc; + int oldvcpus = virDomainDefGetVcpus(vm->def); + +- if (!(vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu))) +- return -1; +- + if (!vcpuinfo->online) { + virReportError(VIR_ERR_INVALID_ARG, + _("vCPU '%u' is already offline"), vcpu); +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Don-t-try-formating-non-existing-addresses.patch b/SOURCES/libvirt-conf-Don-t-try-formating-non-existing-addresses.patch deleted file mode 100644 index 3b58561..0000000 --- a/SOURCES/libvirt-conf-Don-t-try-formating-non-existing-addresses.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 82e798b603e50a2177f485294cb984590627c504 Mon Sep 17 00:00:00 2001 -Message-Id: <82e798b603e50a2177f485294cb984590627c504@dist-git> -From: Martin Kletzander -Date: Tue, 11 Aug 2015 13:13:13 -0400 -Subject: [PATCH] conf: Don't try formating non-existing addresses - -Commit a6f9af8292b6 added checking for address colisions between -starting and ending addresses of forwarding addresses, but forgot that -there might be no addresses set at all. - -This fixes an error in the original patch for: - - https://bugzilla.redhat.com/show_bug.cgi?id=985653 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 1f24c1494a85d663fa36047922a7974a292a46a7) -Signed-off-by: Jiri Denemark ---- - src/conf/network_conf.c | 23 ++++++++++++++++--- - .../nat-network-forward-nat-no-address.xml | 25 +++++++++++++++++++++ - .../nat-network-forward-nat-no-address.xml | 26 ++++++++++++++++++++++ - tests/networkxml2xmltest.c | 1 + - 4 files changed, 72 insertions(+), 3 deletions(-) - create mode 100644 tests/networkxml2xmlin/nat-network-forward-nat-no-address.xml - create mode 100644 tests/networkxml2xmlout/nat-network-forward-nat-no-address.xml - -diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c -index b03c2fd..e765c65 100644 ---- a/src/conf/network_conf.c -+++ b/src/conf/network_conf.c -@@ -1729,9 +1729,26 @@ virNetworkForwardNatDefParseXML(const char *networkName, - goto cleanup; - } - -- /* verify that start <= end */ -- if (virSocketAddrGetRange(&def->addr.start, &def->addr.end, NULL, 0) < 0) -- goto cleanup; -+ if (addrStart && addrEnd) { -+ /* verify that start <= end */ -+ if (virSocketAddrGetRange(&def->addr.start, &def->addr.end, NULL, 0) < 0) -+ goto cleanup; -+ } else { -+ if (addrStart) { -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Only start address '%s' specified in in " -+ " in network '%s'"), -+ addrStart, networkName); -+ goto cleanup; -+ } -+ if (addrEnd) { -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Only end address '%s' specified in in " -+ " in network '%s'"), -+ addrEnd, networkName); -+ goto cleanup; -+ } -+ } - - /* ports for SNAT and MASQUERADE */ - nNatPorts = virXPathNodeSet("./port", ctxt, &natPortNodes); -diff --git a/tests/networkxml2xmlin/nat-network-forward-nat-no-address.xml b/tests/networkxml2xmlin/nat-network-forward-nat-no-address.xml -new file mode 100644 -index 0000000..97a6452 ---- /dev/null -+++ b/tests/networkxml2xmlin/nat-network-forward-nat-no-address.xml -@@ -0,0 +1,25 @@ -+ -+ default -+ 81ff0d90-c91e-6742-64da-4a736edb9a9b -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/networkxml2xmlout/nat-network-forward-nat-no-address.xml b/tests/networkxml2xmlout/nat-network-forward-nat-no-address.xml -new file mode 100644 -index 0000000..f19e34d ---- /dev/null -+++ b/tests/networkxml2xmlout/nat-network-forward-nat-no-address.xml -@@ -0,0 +1,26 @@ -+ -+ default -+ 81ff0d90-c91e-6742-64da-4a736edb9a9b -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c -index 290336e..8d60aa8 100644 ---- a/tests/networkxml2xmltest.c -+++ b/tests/networkxml2xmltest.c -@@ -99,6 +99,7 @@ mymain(void) - DO_TEST("nat-network-dns-forward-plain"); - DO_TEST("nat-network-dns-forwarders"); - DO_TEST("nat-network-forward-nat-address"); -+ DO_TEST("nat-network-forward-nat-no-address"); - DO_TEST("8021Qbh-net"); - DO_TEST("direct-net"); - DO_TEST("host-bridge-net"); --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-Don-t-validate-vcpu-count-in-XML-parser.patch b/SOURCES/libvirt-conf-Don-t-validate-vcpu-count-in-XML-parser.patch new file mode 100644 index 0000000..49a1d37 --- /dev/null +++ b/SOURCES/libvirt-conf-Don-t-validate-vcpu-count-in-XML-parser.patch @@ -0,0 +1,47 @@ +From 892ee6bfd6f0a459b16c9bede5a4af83f76ccd22 Mon Sep 17 00:00:00 2001 +Message-Id: <892ee6bfd6f0a459b16c9bede5a4af83f76ccd22@dist-git> +From: Peter Krempa +Date: Fri, 26 Aug 2016 15:45:26 -0400 +Subject: [PATCH] conf: Don't validate vcpu count in XML parser + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Validating the vcpu count is more intricate and doing it in the XML +parser will make previously valid configs (with older qemus) vanish. + +Now that we have a very similar check in the qemu domain validation +callback we can do it in a more appropriate place. + +This basically reverts commit b54de0830a. + +Partially resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1370066 + +(cherry picked from commit c9cb35c255222be7c972f1e049e297517aa84b42) +--- + src/conf/domain_conf.c | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index d3a0400..9c49ba7 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -16413,15 +16413,6 @@ virDomainDefParseXML(xmlDocPtr xml, + + if (def->cpu == NULL) + goto error; +- +- if (def->cpu->sockets && +- virDomainDefGetVcpusMax(def) > +- def->cpu->sockets * def->cpu->cores * def->cpu->threads) { +- virReportError(VIR_ERR_XML_DETAIL, "%s", +- _("Maximum CPUs greater than topology limit")); +- goto error; +- } +- + } + + if (virDomainNumaDefCPUParseXML(def->numa, ctxt) < 0) +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Drop-VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST-flag.patch b/SOURCES/libvirt-conf-Drop-VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST-flag.patch deleted file mode 100644 index 5000cd8..0000000 --- a/SOURCES/libvirt-conf-Drop-VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST-flag.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 73ef3128010cfa342184fd47c798673b072cecf4 Mon Sep 17 00:00:00 2001 -Message-Id: <73ef3128010cfa342184fd47c798673b072cecf4@dist-git> -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:39 +0200 -Subject: [PATCH] conf: Drop VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST flag - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -The flag was used only for formatting the XML and once the parser and -formatter flags were split in 0ecd6851093945dd5ddc78266c61b577c65394ae -it doesn't make sense any more to have it. - -(cherry picked from commit ed94ad9e40a029d552c005a5d5f214af5fc43558) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 1 - - src/conf/domain_conf.h | 7 +++---- - tests/qemuxml2xmltest.c | 3 +-- - 3 files changed, 4 insertions(+), 7 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 2dc5912..3a3c238 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -22521,7 +22521,6 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms, - VIR_DOMAIN_DEF_PARSE_STATUS | - VIR_DOMAIN_DEF_PARSE_ACTUAL_NET | - VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES | -- VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST | - VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS))) - goto error; - -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 902dfb9..e0102db 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2600,14 +2600,13 @@ typedef enum { - VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES = 1 << 3, - VIR_DOMAIN_DEF_PARSE_ALLOW_ROM = 1 << 4, - VIR_DOMAIN_DEF_PARSE_ALLOW_BOOT = 1 << 5, -- VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST = 1 << 6, - /* parse only source half of */ -- VIR_DOMAIN_DEF_PARSE_DISK_SOURCE = 1 << 7, -- VIR_DOMAIN_DEF_PARSE_VALIDATE = 1 << 8, -+ VIR_DOMAIN_DEF_PARSE_DISK_SOURCE = 1 << 6, -+ VIR_DOMAIN_DEF_PARSE_VALIDATE = 1 << 7, - /* don't validate os.type and arch against capabilities. Prevents - * VMs from disappearing when qemu is removed and libvirtd is restarted - */ -- VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS = 1 << 9, -+ VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS = 1 << 8, - } virDomainDefParseFlags; - - typedef enum { -diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c -index d498610..03bfbda 100644 ---- a/tests/qemuxml2xmltest.c -+++ b/tests/qemuxml2xmltest.c -@@ -180,8 +180,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque) - driver.caps, driver.xmlopt, - VIR_DOMAIN_DEF_PARSE_STATUS | - VIR_DOMAIN_DEF_PARSE_ACTUAL_NET | -- VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES | -- VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST))) { -+ VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES))) { - fprintf(stderr, "Failed to parse domain status XML:\n%s", source); - goto cleanup; - } --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Extract-code-formatting-vCPU-info.patch b/SOURCES/libvirt-conf-Extract-code-formatting-vCPU-info.patch new file mode 100644 index 0000000..3c5634a --- /dev/null +++ b/SOURCES/libvirt-conf-Extract-code-formatting-vCPU-info.patch @@ -0,0 +1,80 @@ +From 26aacc4c603cd5f6bd3e4712e768db62c855b600 Mon Sep 17 00:00:00 2001 +Message-Id: <26aacc4c603cd5f6bd3e4712e768db62c855b600@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:43 -0400 +Subject: [PATCH] conf: Extract code formatting vCPU info + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +(cherry picked from commit 54f875dc53057ddbde063b941d44442102e424e1) +--- + src/conf/domain_conf.c | 45 +++++++++++++++++++++++++++++++-------------- + 1 file changed, 31 insertions(+), 14 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index ffafef3..9571ee3 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -22885,6 +22885,35 @@ virDomainCputuneDefFormat(virBufferPtr buf, + } + + ++static int ++virDomainCpuDefFormat(virBufferPtr buf, ++ const virDomainDef *def) ++{ ++ char *cpumask = NULL; ++ int ret = -1; ++ ++ virBufferAddLit(buf, "placement_mode)); ++ ++ if (def->cpumask && !virBitmapIsAllSet(def->cpumask)) { ++ if ((cpumask = virBitmapFormat(def->cpumask)) == NULL) ++ goto cleanup; ++ virBufferAsprintf(buf, " cpuset='%s'", cpumask); ++ } ++ if (virDomainDefHasVcpusOffline(def)) ++ virBufferAsprintf(buf, " current='%u'", virDomainDefGetVcpus(def)); ++ virBufferAsprintf(buf, ">%u\n", virDomainDefGetVcpusMax(def)); ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(cpumask); ++ ++ return ret; ++} ++ ++ + /* This internal version appends to an existing buffer + * (possibly with auto-indent), rather than flattening + * to string. +@@ -23060,20 +23089,8 @@ virDomainDefFormatInternal(virDomainDefPtr def, + virBufferAddLit(buf, "\n"); + } + +- virBufferAddLit(buf, "placement_mode)); +- +- if (def->cpumask && !virBitmapIsAllSet(def->cpumask)) { +- char *cpumask = NULL; +- if ((cpumask = virBitmapFormat(def->cpumask)) == NULL) +- goto error; +- virBufferAsprintf(buf, " cpuset='%s'", cpumask); +- VIR_FREE(cpumask); +- } +- if (virDomainDefHasVcpusOffline(def)) +- virBufferAsprintf(buf, " current='%u'", virDomainDefGetVcpus(def)); +- virBufferAsprintf(buf, ">%u\n", virDomainDefGetVcpusMax(def)); ++ if (virDomainCpuDefFormat(buf, def) < 0) ++ goto error; + + if (def->niothreadids > 0) { + virBufferAsprintf(buf, "%u\n", +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Fix-build-with-picky-GCC.patch b/SOURCES/libvirt-conf-Fix-build-with-picky-GCC.patch new file mode 100644 index 0000000..fa9b21c --- /dev/null +++ b/SOURCES/libvirt-conf-Fix-build-with-picky-GCC.patch @@ -0,0 +1,36 @@ +From 70b18a664f73f36641c8b6db8b7ac57715d4f187 Mon Sep 17 00:00:00 2001 +Message-Id: <70b18a664f73f36641c8b6db8b7ac57715d4f187@dist-git> +From: Peter Krempa +Date: Fri, 26 Aug 2016 15:45:28 -0400 +Subject: [PATCH] conf: Fix build with picky GCC + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +../../src/conf/domain_conf.c:4425:21: error: potential null pointer dereference [-Werror=null-dereference] + switch (vcpu->hotpluggable) { + ~~~~^~~~~~~~~~~~~~ + +(cherry picked from commit 9cf086be6d916c52035a0ee89f3f0f020e9fee1f) +--- + src/conf/domain_conf.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 9c49ba7..261684e 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -4515,6 +4515,10 @@ virDomainVcpuDefPostParse(virDomainDefPtr def) + for (i = 0; i < maxvcpus; i++) { + vcpu = virDomainDefGetVcpu(def, i); + ++ /* impossible but some compilers don't like it */ ++ if (!vcpu) ++ continue; ++ + switch (vcpu->hotpluggable) { + case VIR_TRISTATE_BOOL_ABSENT: + if (vcpu->online) +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs-again.patch b/SOURCES/libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs-again.patch new file mode 100644 index 0000000..7a12dea --- /dev/null +++ b/SOURCES/libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs-again.patch @@ -0,0 +1,40 @@ +From 295e298a18e91a62cadf756f65de7edc99235b42 Mon Sep 17 00:00:00 2001 +Message-Id: <295e298a18e91a62cadf756f65de7edc99235b42@dist-git> +From: Martin Kletzander +Date: Wed, 24 Aug 2016 16:10:59 -0400 +Subject: [PATCH] conf: Make really sure we don't access non-existing vCPUs + again + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +MinGW complained that we might be dereferencing a NULL pointer. While +that can't be true, the logic certainly allows for that. + +../../src/conf/domain_conf.c: In function 'virDomainDefPostParse': +../../src/conf/domain_conf.c:4224:18: error: potential null pointer dereference [-Werror=null-dereference] + if (!vcpu->online && vcpu->cpumask) { + ~~~~^~~~~~~~ + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit 05f89657eed52550050f9308bb7cb8d56dde9cd0) +--- + src/conf/domain_conf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 7fa4701..8e5afe7 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -4302,7 +4302,7 @@ virDomainDefRemoveOfflineVcpuPin(virDomainDefPtr def) + for (i = 0; i < virDomainDefGetVcpusMax(def); i++) { + vcpu = virDomainDefGetVcpu(def, i); + +- if (!vcpu->online && vcpu->cpumask) { ++ if (vcpu && !vcpu->online && vcpu->cpumask) { + virBitmapFree(vcpu->cpumask); + vcpu->cpumask = NULL; + +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs.patch b/SOURCES/libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs.patch new file mode 100644 index 0000000..5c95c02 --- /dev/null +++ b/SOURCES/libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs.patch @@ -0,0 +1,39 @@ +From e8195e3a489ec211d6d637ddcdae1ca82bef3c7a Mon Sep 17 00:00:00 2001 +Message-Id: +From: Martin Kletzander +Date: Wed, 24 Aug 2016 16:10:58 -0400 +Subject: [PATCH] conf: Make really sure we don't access non-existing vCPUs + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +MinGW complained that we might be dereferencing a NULL pointer. While +that can't be true, the logic certainly allows for that. + +src/conf/domain_conf.c: In function 'virDomainDefGetVcpuPinInfoHelper': +src/conf/domain_conf.c:1545:17: error: potential null pointer dereference [-Werror=null-dereference] + if (vcpu->cpumask) + ~~~~^~~~~~~~~ + +Signed-off-by: Martin Kletzander +(cherry picked from commit a6ab72a9c3ad475a544ffd53a782e46a02437006) +--- + src/conf/domain_conf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 384059d..7fa4701 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -1544,7 +1544,7 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, + virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(def, i); + virBitmapPtr bitmap = NULL; + +- if (vcpu->cpumask) ++ if (vcpu && vcpu->cpumask) + bitmap = vcpu->cpumask; + else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && + autoCpuset) +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Pass-private-data-to-Parse-function-of-XML-options.patch b/SOURCES/libvirt-conf-Pass-private-data-to-Parse-function-of-XML-options.patch deleted file mode 100644 index 3fcf182..0000000 --- a/SOURCES/libvirt-conf-Pass-private-data-to-Parse-function-of-XML-options.patch +++ /dev/null @@ -1,116 +0,0 @@ -From f7cf89a71e2850d227a623909c7d8fada2990538 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Thu, 13 Aug 2015 15:11:46 +0200 -Subject: [PATCH] conf: Pass private data to Parse function of XML options - -https://bugzilla.redhat.com/show_bug.cgi?id=1162947 - -This needs a reorder of XML option definitions. It might come in handy -one day. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 7c8028cda95c3af388f7485e682ed07629bb9e7a) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 2 +- - src/conf/domain_conf.h | 17 +++++++++-------- - src/libxl/libxl_domain.c | 3 ++- - src/lxc/lxc_domain.c | 3 ++- - src/qemu/qemu_domain.c | 3 ++- - 5 files changed, 16 insertions(+), 12 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 8784367..9aee04f 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -16343,7 +16343,7 @@ virDomainObjParseXML(xmlDocPtr xml, - VIR_FREE(nodes); - - if (xmlopt->privateData.parse && -- xmlopt->privateData.parse(ctxt, obj) < 0) -+ xmlopt->privateData.parse(ctxt, obj, &xmlopt->config) < 0) - goto error; - - return obj; -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 1be8e63..ed0ccba 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2357,14 +2357,6 @@ typedef bool (*virDomainObjListACLFilter)(virConnectPtr conn, - typedef struct _virDomainXMLOption virDomainXMLOption; - typedef virDomainXMLOption *virDomainXMLOptionPtr; - --typedef void *(*virDomainXMLPrivateDataAllocFunc)(void); --typedef void (*virDomainXMLPrivateDataFreeFunc)(void *); --typedef virObjectPtr (*virDomainXMLPrivateDataNewFunc)(void); --typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, -- virDomainObjPtr); --typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, -- virDomainObjPtr); -- - /* Called once after everything else has been parsed, for adjusting - * overall domain defaults. */ - typedef int (*virDomainDefPostParseCallback)(virDomainDefPtr def, -@@ -2393,6 +2385,15 @@ struct _virDomainDefParserConfig { - unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN]; - }; - -+typedef void *(*virDomainXMLPrivateDataAllocFunc)(void); -+typedef void (*virDomainXMLPrivateDataFreeFunc)(void *); -+typedef virObjectPtr (*virDomainXMLPrivateDataNewFunc)(void); -+typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, -+ virDomainObjPtr); -+typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, -+ virDomainObjPtr, -+ virDomainDefParserConfigPtr); -+ - typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks; - typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacksPtr; - struct _virDomainXMLPrivateDataCallbacks { -diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c -index 8e8a292..7bc4d92 100644 ---- a/src/libxl/libxl_domain.c -+++ b/src/libxl/libxl_domain.c -@@ -224,7 +224,8 @@ libxlDomainObjPrivateFree(void *data) - - static int - libxlDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, -- virDomainObjPtr vm) -+ virDomainObjPtr vm, -+ virDomainDefParserConfigPtr config ATTRIBUTE_UNUSED) - { - libxlDomainObjPrivatePtr priv = vm->privateData; - -diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c -index 70606f3..2f377d8 100644 ---- a/src/lxc/lxc_domain.c -+++ b/src/lxc/lxc_domain.c -@@ -65,7 +65,8 @@ virLXCDomainObjPrivateXMLFormat(virBufferPtr buf, - - static int - virLXCDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, -- virDomainObjPtr vm) -+ virDomainObjPtr vm, -+ virDomainDefParserConfigPtr config ATTRIBUTE_UNUSED) - { - virLXCDomainObjPrivatePtr priv = vm->privateData; - unsigned long long thepid; -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index d95f24f..ca41ca4 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -623,7 +623,8 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, - - static int - qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, -- virDomainObjPtr vm) -+ virDomainObjPtr vm, -+ virDomainDefParserConfigPtr config ATTRIBUTE_UNUSED) - { - qemuDomainObjPrivatePtr priv = vm->privateData; - char *monitorpath; --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-Pre-calculate-initial-memory-size-instead-of-always-calculating-it.patch b/SOURCES/libvirt-conf-Pre-calculate-initial-memory-size-instead-of-always-calculating-it.patch deleted file mode 100644 index 02ed200..0000000 --- a/SOURCES/libvirt-conf-Pre-calculate-initial-memory-size-instead-of-always-calculating-it.patch +++ /dev/null @@ -1,200 +0,0 @@ -From 26895224315526096a1a0e3adf36ef1fadc17727 Mon Sep 17 00:00:00 2001 -Message-Id: <26895224315526096a1a0e3adf36ef1fadc17727@dist-git> -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:44 +0200 -Subject: [PATCH] conf: Pre-calculate initial memory size instead of always - calculating it - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -Add 'initial_memory' member to struct virDomainMemtune so that the -memory size can be pre-calculated once instead of inferring it always -again and again. - -Separating of the fields will also allow finer granularity of decisions -in later patches where it will allow to keep the old initial memory -value in cases where we are handling incomming migration from older -versions that did not always update the size from NUMA as the code did -previously. - -The change also requires modification of the qemu memory alignment -function since at the point where we are modifying the size of NUMA -nodes the total size needs to be recalculated too. - -The refactoring done in this patch also fixes a crash in the hyperv -driver that did not properly initialize def->numa and thus -virDomainNumaGetMemorySize(def->numa) crashed. - -In summary this patch should have no functional impact at this point. - -(cherry picked from commit 403e86067d5cb3a6fd8583cb5b08121151bd4d9f) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 52 +++++++++++++++++++++++++++++------------------- - src/conf/domain_conf.h | 3 +++ - src/libvirt_private.syms | 1 + - src/qemu/qemu_domain.c | 15 +++++++++----- - 4 files changed, 46 insertions(+), 25 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index b28daa6..3625310 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -3642,6 +3642,15 @@ virDomainDefRemoveDuplicateMetadata(virDomainDefPtr def) - static int - virDomainDefPostParseMemory(virDomainDefPtr def) - { -+ size_t i; -+ -+ if ((def->mem.initial_memory = virDomainNumaGetMemorySize(def->numa)) == 0) { -+ def->mem.initial_memory = def->mem.total_memory; -+ -+ for (i = 0; i < def->nmems; i++) -+ def->mem.initial_memory -= def->mems[i]->size; -+ } -+ - if (virDomainDefGetMemoryInitial(def) == 0) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("Memory size must be specified via or in the " -@@ -7665,19 +7674,7 @@ virDomainDefHasMemoryHotplug(const virDomainDef *def) - unsigned long long - virDomainDefGetMemoryInitial(virDomainDefPtr def) - { -- unsigned long long ret; -- size_t i; -- -- /* return NUMA memory size total in case numa is enabled */ -- if ((ret = virDomainNumaGetMemorySize(def->numa)) > 0) { -- return ret; -- } else { -- ret = def->mem.total_memory; -- for (i = 0; i < def->nmems; i++) -- ret -= def->mems[i]->size; -- } -- -- return def->mem.total_memory; -+ return def->mem.initial_memory; - } - - -@@ -7686,13 +7683,30 @@ virDomainDefGetMemoryInitial(virDomainDefPtr def) - * @def: domain definition - * @size: size to set - * -- * Sets the total memory size in @def. -+ * Sets the total memory size in @def. This function should be used only by -+ * hypervisors that don't support memory hotplug. - */ - void - virDomainDefSetMemoryTotal(virDomainDefPtr def, - unsigned long long size) - { - def->mem.total_memory = size; -+ def->mem.initial_memory = size; -+} -+ -+ -+/** -+ * virDomainDefSetMemoryInitial: -+ * @def: domain definition -+ * @size: size to set -+ * -+ * Sets the initial memory size (without memory modules) in @def. -+ */ -+void -+virDomainDefSetMemoryInitial(virDomainDefPtr def, -+ unsigned long long size) -+{ -+ def->mem.initial_memory = size; - } - - -@@ -7710,12 +7724,10 @@ virDomainDefGetMemoryActual(virDomainDefPtr def) - unsigned long long ret; - size_t i; - -- if ((ret = virDomainNumaGetMemorySize(def->numa)) > 0) { -- for (i = 0; i < def->nmems; i++) -- ret += def->mems[i]->size; -- } else { -- ret = def->mem.total_memory; -- } -+ ret = def->mem.initial_memory; -+ -+ for (i = 0; i < def->nmems; i++) -+ ret += def->mems[i]->size; - - return ret; - } -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 8099450..61bf963 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2109,6 +2109,8 @@ struct _virDomainMemtune { - /* total memory size including memory modules in kibibytes, this field - * should be accessed only via accessors */ - unsigned long long total_memory; -+ /* initial memory size in kibibytes = total_memory excluding memory modules*/ -+ unsigned long long initial_memory; - unsigned long long cur_balloon; /* in kibibytes, capped at ulong thanks - to virDomainGetInfo */ - -@@ -2288,6 +2290,7 @@ struct _virDomainDef { - - unsigned long long virDomainDefGetMemoryInitial(virDomainDefPtr def); - void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size); -+void virDomainDefSetMemoryInitial(virDomainDefPtr def, unsigned long long size); - unsigned long long virDomainDefGetMemoryActual(virDomainDefPtr def); - bool virDomainDefHasMemoryHotplug(const virDomainDef *def); - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index b1b59b2..16ae24f 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -225,6 +225,7 @@ virDomainDefParseFile; - virDomainDefParseNode; - virDomainDefParseString; - virDomainDefPostParse; -+virDomainDefSetMemoryInitial; - virDomainDefSetMemoryTotal; - virDomainDeleteConfig; - virDomainDeviceAddressIsValid; -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 67c2bb0..77f3d6a 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3171,6 +3171,7 @@ qemuDomainGetMemorySizeAlignment(virDomainDefPtr def ATTRIBUTE_UNUSED) - int - qemuDomainAlignMemorySizes(virDomainDefPtr def) - { -+ unsigned long long initialmem = 0; - unsigned long long mem; - unsigned long long align = qemuDomainGetMemorySizeAlignment(def); - size_t ncells = virDomainNumaGetNodeCount(def->numa); -@@ -3178,13 +3179,17 @@ qemuDomainAlignMemorySizes(virDomainDefPtr def) - - /* align NUMA cell sizes if relevant */ - for (i = 0; i < ncells; i++) { -- mem = virDomainNumaGetNodeMemorySize(def->numa, i); -- virDomainNumaSetNodeMemorySize(def->numa, i, VIR_ROUND_UP(mem, align)); -+ mem = VIR_ROUND_UP(virDomainNumaGetNodeMemorySize(def->numa, i), align); -+ initialmem += mem; -+ virDomainNumaSetNodeMemorySize(def->numa, i, mem); - } - -- /* align initial memory size */ -- mem = virDomainDefGetMemoryInitial(def); -- virDomainDefSetMemoryTotal(def, VIR_ROUND_UP(mem, align)); -+ /* align initial memory size, if NUMA is present calculate it as total of -+ * individual aligned NUMA node sizes */ -+ if (initialmem == 0) -+ initialmem = VIR_ROUND_UP(virDomainDefGetMemoryInitial(def), align); -+ -+ virDomainDefSetMemoryInitial(def, initialmem); - - def->mem.max_memory = VIR_ROUND_UP(def->mem.max_memory, align); - --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Provide-error-on-undefined-iothreadsched-entry.patch b/SOURCES/libvirt-conf-Provide-error-on-undefined-iothreadsched-entry.patch new file mode 100644 index 0000000..9ab1464 --- /dev/null +++ b/SOURCES/libvirt-conf-Provide-error-on-undefined-iothreadsched-entry.patch @@ -0,0 +1,45 @@ +From 1a6ed7e15d95b976797a30f1f8b76817765c6e64 Mon Sep 17 00:00:00 2001 +Message-Id: <1a6ed7e15d95b976797a30f1f8b76817765c6e64@dist-git> +From: John Ferlan +Date: Tue, 16 Aug 2016 11:43:52 -0400 +Subject: [PATCH] conf: Provide error on undefined iothreadsched entry + +https://bugzilla.redhat.com/show_bug.cgi?id=1366484 + +When commit id '6dfb4507' refactored where the iothreadsched data was +stored, the error message for when the virDomainIOThreadIDFind failed +to find an iothreadid ("iothreadsched attribute 'iothreads' uses +undefined iothread ids") was lost. This led to the possibility that +someone would try to use it, but receive the generic message "An error +occurred, but the cause is unknown". + +This patch adds the error message back so that someone will know that +they have an invalid configuration. + +Signed-off-by: John Ferlan +(cherry picked from commit 8c6b29e7b41d678ab9c5542efd607b28776e4f24) +--- + src/conf/domain_conf.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 33954f7..ffafef3 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -15532,8 +15532,12 @@ virDomainDefGetIOThreadSched(virDomainDefPtr def, + { + virDomainIOThreadIDDefPtr iothrinfo; + +- if (!(iothrinfo = virDomainIOThreadIDFind(def, iothread))) ++ if (!(iothrinfo = virDomainIOThreadIDFind(def, iothread))) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("Cannot find 'iothread' : %u"), ++ iothread); + return NULL; ++ } + + return &iothrinfo->sched; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-conf-Provide-error-on-undefined-vcpusched-entry.patch b/SOURCES/libvirt-conf-Provide-error-on-undefined-vcpusched-entry.patch new file mode 100644 index 0000000..e6e7493 --- /dev/null +++ b/SOURCES/libvirt-conf-Provide-error-on-undefined-vcpusched-entry.patch @@ -0,0 +1,40 @@ +From 6c04a4844d053c51238b5b1c47df95b0d6cba677 Mon Sep 17 00:00:00 2001 +Message-Id: <6c04a4844d053c51238b5b1c47df95b0d6cba677@dist-git> +From: John Ferlan +Date: Wed, 24 Aug 2016 16:11:16 -0400 +Subject: [PATCH] conf: Provide error on undefined vcpusched entry + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Modify virDomainDefGetVcpuSched to emit an error message if +virDomainDefGetVcpu returns NULL meaning the vcpu could not +be found. Prior to commit id '9cc931f0b' the error message +would have been issued in virDomainDefGetVcpu. + +(cherry picked from commit 4b15fd0d1f3b63c0feb847b1bfe93cee46813601) +--- + src/conf/domain_conf.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 8e5afe7..4e703d9 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -1477,8 +1477,12 @@ virDomainDefGetVcpuSched(virDomainDefPtr def, + { + virDomainVcpuDefPtr vcpuinfo; + +- if (!(vcpuinfo = virDomainDefGetVcpu(def, vcpu))) ++ if (!(vcpuinfo = virDomainDefGetVcpu(def, vcpu))) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("vCPU '%u' is not present in domain definition"), ++ vcpu); + return NULL; ++ } + + return &vcpuinfo->sched; + } +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Rename-max_balloon-to-total_memory.patch b/SOURCES/libvirt-conf-Rename-max_balloon-to-total_memory.patch deleted file mode 100644 index 524ab57..0000000 --- a/SOURCES/libvirt-conf-Rename-max_balloon-to-total_memory.patch +++ /dev/null @@ -1,386 +0,0 @@ -From 524df098e7b82ea193e9f81b1244fae5cff0a937 Mon Sep 17 00:00:00 2001 -Message-Id: <524df098e7b82ea193e9f81b1244fae5cff0a937@dist-git> -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:43 +0200 -Subject: [PATCH] conf: Rename max_balloon to total_memory - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -The name of the variable was misleading. Rename it and it's setting -accessor before other fixes. - -(cherry picked from commit 8059a99025d15b12e62a294b7b6797e4c618eff8) - -Conflicts: - src/libxl/libxl_driver.c - libxlAddDom0 is missing in RHEL - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 18 +++++++++--------- - src/conf/domain_conf.h | 7 ++++--- - src/hyperv/hyperv_driver.c | 2 +- - src/libvirt_private.syms | 2 +- - src/libxl/libxl_driver.c | 2 +- - src/lxc/lxc_driver.c | 2 +- - src/lxc/lxc_native.c | 4 ++-- - src/phyp/phyp_driver.c | 2 +- - src/qemu/qemu_command.c | 4 ++-- - src/qemu/qemu_domain.c | 2 +- - src/qemu/qemu_driver.c | 2 +- - src/test/test_driver.c | 2 +- - src/uml/uml_driver.c | 2 +- - src/vbox/vbox_common.c | 4 ++-- - src/vmx/vmx.c | 2 +- - src/vz/vz_sdk.c | 2 +- - src/xen/xm_internal.c | 2 +- - src/xenapi/xenapi_driver.c | 2 +- - src/xenconfig/xen_common.c | 2 +- - src/xenconfig/xen_sxpr.c | 2 +- - 20 files changed, 34 insertions(+), 33 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 1e32557..b28daa6 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -7672,27 +7672,27 @@ virDomainDefGetMemoryInitial(virDomainDefPtr def) - if ((ret = virDomainNumaGetMemorySize(def->numa)) > 0) { - return ret; - } else { -- ret = def->mem.max_balloon; -+ ret = def->mem.total_memory; - for (i = 0; i < def->nmems; i++) - ret -= def->mems[i]->size; - } - -- return def->mem.max_balloon; -+ return def->mem.total_memory; - } - - - /** -- * virDomainDefSetMemoryInitial: -+ * virDomainDefSetMemoryTotal: - * @def: domain definition - * @size: size to set - * -- * Sets the initial memory size in @def. -+ * Sets the total memory size in @def. - */ - void --virDomainDefSetMemoryInitial(virDomainDefPtr def, -- unsigned long long size) -+virDomainDefSetMemoryTotal(virDomainDefPtr def, -+ unsigned long long size) - { -- def->mem.max_balloon = size; -+ def->mem.total_memory = size; - } - - -@@ -7714,7 +7714,7 @@ virDomainDefGetMemoryActual(virDomainDefPtr def) - for (i = 0; i < def->nmems; i++) - ret += def->mems[i]->size; - } else { -- ret = def->mem.max_balloon; -+ ret = def->mem.total_memory; - } - - return ret; -@@ -14611,7 +14611,7 @@ virDomainDefParseXML(xmlDocPtr xml, - - /* Extract domain memory */ - if (virDomainParseMemory("./memory[1]", NULL, ctxt, -- &def->mem.max_balloon, false, true) < 0) -+ &def->mem.total_memory, false, true) < 0) - goto error; - - if (virDomainParseMemory("./currentMemory[1]", NULL, ctxt, -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index bac64b3..8099450 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2106,8 +2106,9 @@ typedef struct _virDomainMemtune virDomainMemtune; - typedef virDomainMemtune *virDomainMemtunePtr; - - struct _virDomainMemtune { -- unsigned long long max_balloon; /* in kibibytes, capped at ulong thanks -- to virDomainGetMaxMemory */ -+ /* total memory size including memory modules in kibibytes, this field -+ * should be accessed only via accessors */ -+ unsigned long long total_memory; - unsigned long long cur_balloon; /* in kibibytes, capped at ulong thanks - to virDomainGetInfo */ - -@@ -2286,7 +2287,7 @@ struct _virDomainDef { - }; - - unsigned long long virDomainDefGetMemoryInitial(virDomainDefPtr def); --void virDomainDefSetMemoryInitial(virDomainDefPtr def, unsigned long long size); -+void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size); - unsigned long long virDomainDefGetMemoryActual(virDomainDefPtr def); - bool virDomainDefHasMemoryHotplug(const virDomainDef *def); - -diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c -index b539541..1958bbe 100644 ---- a/src/hyperv/hyperv_driver.c -+++ b/src/hyperv/hyperv_driver.c -@@ -870,7 +870,7 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) - if (VIR_STRDUP(def->description, virtualSystemSettingData->data->Notes) < 0) - goto cleanup; - -- virDomainDefSetMemoryInitial(def, memorySettingData->data->Limit * 1024); /* megabyte to kilobyte */ -+ virDomainDefSetMemoryTotal(def, memorySettingData->data->Limit * 1024); /* megabyte to kilobyte */ - def->mem.cur_balloon = memorySettingData->data->VirtualQuantity * 1024; /* megabyte to kilobyte */ - - def->vcpus = processorSettingData->data->VirtualQuantity; -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 335f8d0..b1b59b2 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -225,7 +225,7 @@ virDomainDefParseFile; - virDomainDefParseNode; - virDomainDefParseString; - virDomainDefPostParse; --virDomainDefSetMemoryInitial; -+virDomainDefSetMemoryTotal; - virDomainDeleteConfig; - virDomainDeviceAddressIsValid; - virDomainDeviceAddressTypeToString; -diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c -index 149ef70..f48bcf4 100644 ---- a/src/libxl/libxl_driver.c -+++ b/src/libxl/libxl_driver.c -@@ -1413,7 +1413,7 @@ libxlDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, - if (flags & VIR_DOMAIN_MEM_CONFIG) { - /* Help clang 2.8 decipher the logic flow. */ - sa_assert(persistentDef); -- virDomainDefSetMemoryInitial(persistentDef, newmem); -+ virDomainDefSetMemoryTotal(persistentDef, newmem); - if (persistentDef->mem.cur_balloon > newmem) - persistentDef->mem.cur_balloon = newmem; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index 79f92c3..9a6e44e 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -734,7 +734,7 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, - } - - if (flags & VIR_DOMAIN_AFFECT_CONFIG) { -- virDomainDefSetMemoryInitial(persistentDef, newmem); -+ virDomainDefSetMemoryTotal(persistentDef, newmem); - if (persistentDef->mem.cur_balloon > newmem) - persistentDef->mem.cur_balloon = newmem; - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) -diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c -index 6faa701..2f95597 100644 ---- a/src/lxc/lxc_native.c -+++ b/src/lxc/lxc_native.c -@@ -770,7 +770,7 @@ lxcSetMemTune(virDomainDefPtr def, virConfPtr properties) - if (lxcConvertSize(value->str, &size) < 0) - return -1; - size = size / 1024; -- virDomainDefSetMemoryInitial(def, size); -+ virDomainDefSetMemoryTotal(def, size); - def->mem.hard_limit = virMemoryLimitTruncate(size); - } - -@@ -1010,7 +1010,7 @@ lxcParseConfigString(const char *config) - } - - vmdef->id = -1; -- virDomainDefSetMemoryInitial(vmdef, 64 * 1024); -+ virDomainDefSetMemoryTotal(vmdef, 64 * 1024); - - vmdef->onReboot = VIR_DOMAIN_LIFECYCLE_RESTART; - vmdef->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY; -diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c -index 54dec70..2912fc4 100644 ---- a/src/phyp/phyp_driver.c -+++ b/src/phyp/phyp_driver.c -@@ -3281,7 +3281,7 @@ phypDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) - goto err; - } - -- virDomainDefSetMemoryInitial(&def, memory); -+ virDomainDefSetMemoryTotal(&def, memory); - - if ((def.mem.cur_balloon = - phypGetLparMem(dom->conn, managed_system, dom->id, 1)) == 0) { -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index ade75e3..3fd695b 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -12724,7 +12724,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps, - - def->id = -1; - def->mem.cur_balloon = 64 * 1024; -- virDomainDefSetMemoryInitial(def, def->mem.cur_balloon); -+ virDomainDefSetMemoryTotal(def, def->mem.cur_balloon); - def->maxvcpus = 1; - def->vcpus = 1; - def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC; -@@ -12930,7 +12930,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps, - _("cannot parse memory level '%s'"), val); - goto error; - } -- virDomainDefSetMemoryInitial(def, mem * 1024); -+ virDomainDefSetMemoryTotal(def, mem * 1024); - def->mem.cur_balloon = mem * 1024; - } else if (STREQ(arg, "-smp")) { - WANT_VALUE(); -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 15cdf7b..67c2bb0 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3184,7 +3184,7 @@ qemuDomainAlignMemorySizes(virDomainDefPtr def) - - /* align initial memory size */ - mem = virDomainDefGetMemoryInitial(def); -- virDomainDefSetMemoryInitial(def, VIR_ROUND_UP(mem, align)); -+ virDomainDefSetMemoryTotal(def, VIR_ROUND_UP(mem, align)); - - def->mem.max_memory = VIR_ROUND_UP(def->mem.max_memory, align); - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index f15b14a..e77e548 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -2370,7 +2370,7 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, - goto endjob; - } - -- virDomainDefSetMemoryInitial(persistentDef, newmem); -+ virDomainDefSetMemoryTotal(persistentDef, newmem); - - if (persistentDef->mem.cur_balloon > newmem) - persistentDef->mem.cur_balloon = newmem; -diff --git a/src/test/test_driver.c b/src/test/test_driver.c -index d38006f..9dcfe11 100644 ---- a/src/test/test_driver.c -+++ b/src/test/test_driver.c -@@ -2256,7 +2256,7 @@ static int testDomainSetMaxMemory(virDomainPtr domain, - return -1; - - /* XXX validate not over host memory wrt to other domains */ -- virDomainDefSetMemoryInitial(privdom->def, memory); -+ virDomainDefSetMemoryTotal(privdom->def, memory); - - virDomainObjEndAPI(&privdom); - return 0; -diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c -index c3c5fa7..2b61f73 100644 ---- a/src/uml/uml_driver.c -+++ b/src/uml/uml_driver.c -@@ -1828,7 +1828,7 @@ static int umlDomainSetMaxMemory(virDomainPtr dom, unsigned long newmax) - goto cleanup; - } - -- virDomainDefSetMemoryInitial(vm->def, newmax); -+ virDomainDefSetMemoryTotal(vm->def, newmax); - ret = 0; - - cleanup: -diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c -index 91a61f8..3e6ed7a 100644 ---- a/src/vbox/vbox_common.c -+++ b/src/vbox/vbox_common.c -@@ -3898,7 +3898,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) - * reading and while dumping xml - */ - /* def->mem.max_balloon = maxMemorySize * 1024; */ -- virDomainDefSetMemoryInitial(def, memorySize * 1024); -+ virDomainDefSetMemoryTotal(def, memorySize * 1024); - - gVBoxAPI.UIMachine.GetCPUCount(machine, &CPUCount); - def->maxvcpus = def->vcpus = CPUCount; -@@ -6051,7 +6051,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, - * the notation here seems to be inconsistent while - * reading and while dumping xml - */ -- virDomainDefSetMemoryInitial(def->dom, memorySize * 1024); -+ virDomainDefSetMemoryTotal(def->dom, memorySize * 1024); - def->dom->os.type = VIR_DOMAIN_OSTYPE_HVM; - def->dom->os.arch = virArchFromHost(); - gVBoxAPI.UIMachine.GetCPUCount(machine, &CPUCount); -diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c -index 9ba5848..84f71f7 100644 ---- a/src/vmx/vmx.c -+++ b/src/vmx/vmx.c -@@ -1379,7 +1379,7 @@ virVMXParseConfig(virVMXContext *ctx, - goto cleanup; - } - -- virDomainDefSetMemoryInitial(def, memsize * 1024); /* Scale from megabytes to kilobytes */ -+ virDomainDefSetMemoryTotal(def, memsize * 1024); /* Scale from megabytes to kilobytes */ - - /* vmx:sched.mem.max -> def:mem.cur_balloon */ - if (virVMXGetConfigLong(conf, "sched.mem.max", &sched_mem_max, memsize, -diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c -index a584940..61a0897 100644 ---- a/src/vz/vz_sdk.c -+++ b/src/vz/vz_sdk.c -@@ -1300,7 +1300,7 @@ prlsdkLoadDomain(vzConnPtr privconn, - /* get RAM parameters */ - pret = PrlVmCfg_GetRamSize(sdkdom, &ram); - prlsdkCheckRetGoto(pret, error); -- virDomainDefSetMemoryInitial(def, ram << 10); /* RAM size obtained in Mbytes, -+ virDomainDefSetMemoryTotal(def, ram << 10); /* RAM size obtained in Mbytes, - convert to Kbytes */ - def->mem.cur_balloon = ram << 10; - -diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c -index 59b1cd4..baa7815 100644 ---- a/src/xen/xm_internal.c -+++ b/src/xen/xm_internal.c -@@ -606,7 +606,7 @@ xenXMDomainSetMaxMemory(virConnectPtr conn, - if (entry->def->mem.cur_balloon > memory) - entry->def->mem.cur_balloon = memory; - -- virDomainDefSetMemoryInitial(entry->def, memory); -+ virDomainDefSetMemoryTotal(entry->def, memory); - /* If this fails, should we try to undo our changes to the - * in-memory representation of the config file. I say not! - */ -diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c -index 11f6e91..3045c5a 100644 ---- a/src/xenapi/xenapi_driver.c -+++ b/src/xenapi/xenapi_driver.c -@@ -1492,7 +1492,7 @@ xenapiDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) - VIR_FREE(val); - } - memory = xenapiDomainGetMaxMemory(dom); -- virDomainDefSetMemoryInitial(defPtr, memory); -+ virDomainDefSetMemoryTotal(defPtr, memory); - if (xen_vm_get_memory_dynamic_max(session, &dynamic_mem, vm)) { - defPtr->mem.cur_balloon = (unsigned long) (dynamic_mem / 1024); - } else { -diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c -index 0dfe60e..0890c73 100644 ---- a/src/xenconfig/xen_common.c -+++ b/src/xenconfig/xen_common.c -@@ -316,7 +316,7 @@ xenParseMem(virConfPtr conf, virDomainDefPtr def) - return -1; - - def->mem.cur_balloon *= 1024; -- virDomainDefSetMemoryInitial(def, memory * 1024); -+ virDomainDefSetMemoryTotal(def, memory * 1024); - - return 0; - } -diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c -index 05e938a..66f67b5 100644 ---- a/src/xenconfig/xen_sxpr.c -+++ b/src/xenconfig/xen_sxpr.c -@@ -1154,7 +1154,7 @@ xenParseSxpr(const struct sexpr *root, - } - } - -- virDomainDefSetMemoryInitial(def, (sexpr_u64(root, "domain/maxmem") << 10)); -+ virDomainDefSetMemoryTotal(def, (sexpr_u64(root, "domain/maxmem") << 10)); - def->mem.cur_balloon = (sexpr_u64(root, "domain/memory") << 10); - - if (def->mem.cur_balloon > virDomainDefGetMemoryActual(def)) --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-Rename-virDomainVcpuInfoPtr-to-virDomainVcpuDefPtr.patch b/SOURCES/libvirt-conf-Rename-virDomainVcpuInfoPtr-to-virDomainVcpuDefPtr.patch new file mode 100644 index 0000000..ae4b8cf --- /dev/null +++ b/SOURCES/libvirt-conf-Rename-virDomainVcpuInfoPtr-to-virDomainVcpuDefPtr.patch @@ -0,0 +1,320 @@ +From 847361f1eeda21c6dd8dcf73821b4ecf341095b1 Mon Sep 17 00:00:00 2001 +Message-Id: <847361f1eeda21c6dd8dcf73821b4ecf341095b1@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:44 -0400 +Subject: [PATCH] conf: Rename virDomainVcpuInfoPtr to virDomainVcpuDefPtr + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +(cherry picked from commit c7d5dd3974df1edb6a1cd8fce989eea43d72527f) +--- + src/conf/domain_conf.c | 22 +++++++++++----------- + src/conf/domain_conf.h | 10 +++++----- + src/libxl/libxl_domain.c | 2 +- + src/libxl/libxl_driver.c | 2 +- + src/qemu/qemu_cgroup.c | 2 +- + src/qemu/qemu_driver.c | 14 +++++++------- + src/qemu/qemu_process.c | 4 ++-- + src/test/test_driver.c | 4 ++-- + src/vz/vz_sdk.c | 2 +- + 9 files changed, 31 insertions(+), 31 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 9571ee3..a923b60 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -1313,7 +1313,7 @@ void virDomainLeaseDefFree(virDomainLeaseDefPtr def) + + + static void +-virDomainVcpuInfoClear(virDomainVcpuInfoPtr info) ++virDomainVcpuDefClear(virDomainVcpuDefPtr info) + { + if (!info) + return; +@@ -1337,7 +1337,7 @@ virDomainDefSetVcpusMax(virDomainDefPtr def, + return -1; + } else { + for (i = maxvcpus; i < def->maxvcpus; i++) +- virDomainVcpuInfoClear(&def->vcpus[i]); ++ virDomainVcpuDefClear(&def->vcpus[i]); + + VIR_SHRINK_N(def->vcpus, def->maxvcpus, def->maxvcpus - maxvcpus); + } +@@ -1429,7 +1429,7 @@ virDomainDefGetOnlineVcpumap(const virDomainDef *def) + } + + +-virDomainVcpuInfoPtr ++virDomainVcpuDefPtr + virDomainDefGetVcpu(virDomainDefPtr def, + unsigned int vcpu) + { +@@ -1448,7 +1448,7 @@ static virDomainThreadSchedParamPtr + virDomainDefGetVcpuSched(virDomainDefPtr def, + unsigned int vcpu) + { +- virDomainVcpuInfoPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo; + + if (!(vcpuinfo = virDomainDefGetVcpu(def, vcpu))) + return NULL; +@@ -1514,7 +1514,7 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, + virBitmapSetAll(allcpumap); + + for (i = 0; i < maxvcpus && i < ncpumaps; i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(def, i); + virBitmapPtr bitmap = NULL; + + if (vcpu->cpumask) +@@ -2530,7 +2530,7 @@ void virDomainDefFree(virDomainDefPtr def) + virDomainResourceDefFree(def->resource); + + for (i = 0; i < def->maxvcpus; i++) +- virDomainVcpuInfoClear(&def->vcpus[i]); ++ virDomainVcpuDefClear(&def->vcpus[i]); + VIR_FREE(def->vcpus); + + /* hostdevs must be freed before nets (or any future "intelligent +@@ -4270,7 +4270,7 @@ static void + virDomainDefRemoveOfflineVcpuPin(virDomainDefPtr def) + { + size_t i; +- virDomainVcpuInfoPtr vcpu; ++ virDomainVcpuDefPtr vcpu; + + for (i = 0; i < virDomainDefGetVcpusMax(def); i++) { + vcpu = virDomainDefGetVcpu(def, i); +@@ -14975,7 +14975,7 @@ static int + virDomainVcpuPinDefParseXML(virDomainDefPtr def, + xmlNodePtr node) + { +- virDomainVcpuInfoPtr vcpu; ++ virDomainVcpuDefPtr vcpu; + unsigned int vcpuid; + char *tmp = NULL; + int ret = -1; +@@ -18638,8 +18638,8 @@ virDomainDefVcpuCheckAbiStability(virDomainDefPtr src, + } + + for (i = 0; i < src->maxvcpus; i++) { +- virDomainVcpuInfoPtr svcpu = &src->vcpus[i]; +- virDomainVcpuInfoPtr dvcpu = &dst->vcpus[i]; ++ virDomainVcpuDefPtr svcpu = &src->vcpus[i]; ++ virDomainVcpuDefPtr dvcpu = &dst->vcpus[i]; + + if (svcpu->online != dvcpu->online) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +@@ -22823,7 +22823,7 @@ virDomainCputuneDefFormat(virBufferPtr buf, + + for (i = 0; i < def->maxvcpus; i++) { + char *cpumask; +- virDomainVcpuInfoPtr vcpu = def->vcpus + i; ++ virDomainVcpuDefPtr vcpu = def->vcpus + i; + + if (!vcpu->cpumask) + continue; +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 6eed30e..c20ea79 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2035,10 +2035,10 @@ struct _virDomainCputune { + }; + + +-typedef struct _virDomainVcpuInfo virDomainVcpuInfo; +-typedef virDomainVcpuInfo *virDomainVcpuInfoPtr; ++typedef struct _virDomainVcpuDef virDomainVcpuDef; ++typedef virDomainVcpuDef *virDomainVcpuDefPtr; + +-struct _virDomainVcpuInfo { ++struct _virDomainVcpuDef { + bool online; + virBitmapPtr cpumask; + +@@ -2132,7 +2132,7 @@ struct _virDomainDef { + virDomainBlkiotune blkio; + virDomainMemtune mem; + +- virDomainVcpuInfoPtr vcpus; ++ virDomainVcpuDefPtr vcpus; + size_t maxvcpus; + int placement_mode; + virBitmapPtr cpumask; +@@ -2267,7 +2267,7 @@ unsigned int virDomainDefGetVcpusMax(const virDomainDef *def); + int virDomainDefSetVcpus(virDomainDefPtr def, unsigned int vcpus); + unsigned int virDomainDefGetVcpus(const virDomainDef *def); + virBitmapPtr virDomainDefGetOnlineVcpumap(const virDomainDef *def); +-virDomainVcpuInfoPtr virDomainDefGetVcpu(virDomainDefPtr def, unsigned int vcpu) ++virDomainVcpuDefPtr virDomainDefGetVcpu(virDomainDefPtr def, unsigned int vcpu) + ATTRIBUTE_RETURN_CHECK; + + unsigned long long virDomainDefGetMemoryInitial(const virDomainDef *def); +diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c +index 9feba08..0e26b91 100644 +--- a/src/libxl/libxl_domain.c ++++ b/src/libxl/libxl_domain.c +@@ -841,7 +841,7 @@ int + libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm) + { + libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); +- virDomainVcpuInfoPtr vcpu; ++ virDomainVcpuDefPtr vcpu; + libxl_bitmap map; + virBitmapPtr cpumask = NULL; + size_t i; +diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c +index 3189f1c..be6017a 100644 +--- a/src/libxl/libxl_driver.c ++++ b/src/libxl/libxl_driver.c +@@ -2284,7 +2284,7 @@ libxlDomainPinVcpuFlags(virDomainPtr dom, unsigned int vcpu, + libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); + virDomainDefPtr targetDef = NULL; + virBitmapPtr pcpumap = NULL; +- virDomainVcpuInfoPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo; + virDomainObjPtr vm; + int ret = -1; + +diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c +index 1e04a68..2dca874 100644 +--- a/src/qemu/qemu_cgroup.c ++++ b/src/qemu/qemu_cgroup.c +@@ -874,7 +874,7 @@ qemuRestoreCgroupState(virDomainObjPtr vm) + goto error; + + for (i = 0; i < virDomainDefGetVcpusMax(vm->def); i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(vm->def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i); + + if (!vcpu->online) + continue; +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 9c6c1cf..b4ab095 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -1475,7 +1475,7 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, + memset(cpumaps, 0, sizeof(*cpumaps) * maxinfo); + + for (i = 0; i < virDomainDefGetVcpusMax(vm->def) && ncpuinfo < maxinfo; i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(vm->def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i); + pid_t vcpupid = qemuDomainGetVcpuPid(vm, i); + + if (!vcpu->online) +@@ -4620,7 +4620,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + unsigned int vcpu) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- virDomainVcpuInfoPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo; + int ret = -1; + int rc; + int oldvcpus = virDomainDefGetVcpus(vm->def); +@@ -4672,7 +4672,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, + unsigned int vcpu) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- virDomainVcpuInfoPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo; + int ret = -1; + int rc; + int oldvcpus = virDomainDefGetVcpus(vm->def); +@@ -4919,7 +4919,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm, + virBitmapPtr cpumap) + { + virBitmapPtr tmpmap = NULL; +- virDomainVcpuInfoPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo; + qemuDomainObjPrivatePtr priv = vm->privateData; + virCgroupPtr cgroup_vcpu = NULL; + char *str = NULL; +@@ -5006,7 +5006,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom, + virDomainDefPtr persistentDef; + int ret = -1; + virBitmapPtr pcpumap = NULL; +- virDomainVcpuInfoPtr vcpuinfo = NULL; ++ virDomainVcpuDefPtr vcpuinfo = NULL; + virQEMUDriverConfigPtr cfg = NULL; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | +@@ -9365,7 +9365,7 @@ qemuDomainSetNumaParamsLive(virDomainObjPtr vm, + virCgroupFree(&cgroup_temp); + + for (i = 0; i < virDomainDefGetVcpusMax(vm->def); i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(vm->def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i); + + if (!vcpu->online) + continue; +@@ -9776,7 +9776,7 @@ qemuSetVcpusBWLive(virDomainObjPtr vm, virCgroupPtr cgroup, + return 0; + + for (i = 0; i < virDomainDefGetVcpusMax(vm->def); i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(vm->def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i); + + if (!vcpu->online) + continue; +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 2f0ef2b..6062f2a 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -4577,7 +4577,7 @@ qemuProcessSetupVcpu(virDomainObjPtr vm, + unsigned int vcpuid) + { + pid_t vcpupid = qemuDomainGetVcpuPid(vm, vcpuid); +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(vm->def, vcpuid); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, vcpuid); + qemuDomainObjPrivatePtr priv = vm->privateData; + char *mem_mask = NULL; + virDomainNumatuneMemMode mem_mode; +@@ -4658,7 +4658,7 @@ qemuProcessSetupVcpu(virDomainObjPtr vm, + static int + qemuProcessSetupVcpus(virDomainObjPtr vm) + { +- virDomainVcpuInfoPtr vcpu; ++ virDomainVcpuDefPtr vcpu; + unsigned int maxvcpus = virDomainDefGetVcpusMax(vm->def); + size_t i; + +diff --git a/src/test/test_driver.c b/src/test/test_driver.c +index baff085..e7bca81 100644 +--- a/src/test/test_driver.c ++++ b/src/test/test_driver.c +@@ -2457,7 +2457,7 @@ static int testDomainGetVcpus(virDomainPtr domain, + memset(cpumaps, 0, maxinfo * maplen); + + for (i = 0; i < maxinfo; i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(def, i); + virBitmapPtr bitmap = NULL; + + if (!vcpu->online) +@@ -2493,7 +2493,7 @@ static int testDomainPinVcpu(virDomainPtr domain, + unsigned char *cpumap, + int maplen) + { +- virDomainVcpuInfoPtr vcpuinfo; ++ virDomainVcpuDefPtr vcpuinfo; + virDomainObjPtr privdom; + virDomainDefPtr def; + int ret = -1; +diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c +index ae218e9..9d0bc0d 100644 +--- a/src/vz/vz_sdk.c ++++ b/src/vz/vz_sdk.c +@@ -2284,7 +2284,7 @@ prlsdkCheckUnsupportedParams(PRL_HANDLE sdkdom, virDomainDefPtr def) + } + + for (i = 0; i < virDomainDefGetVcpusMax(def); i++) { +- virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(def, i); ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(def, i); + + if (vcpu->cpumask && + !virBitmapEqual(def->cpumask, vcpu->cpumask)) { +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-Split-memory-related-post-parse-stuff-into-separate-function.patch b/SOURCES/libvirt-conf-Split-memory-related-post-parse-stuff-into-separate-function.patch deleted file mode 100644 index ddb171c..0000000 --- a/SOURCES/libvirt-conf-Split-memory-related-post-parse-stuff-into-separate-function.patch +++ /dev/null @@ -1,74 +0,0 @@ -From db2a67e72870284bcf40584d405bb74bd7437786 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:42 +0200 -Subject: [PATCH] conf: Split memory related post parse stuff into separate - function - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -The post parse func is growing rather large. Since later patches will -introduce more logic in the memory post parse code, split it into a -separate handler. - -(cherry picked from commit 849b5fc4f609885b9976b633c6efaba0beee2fe3) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 32 +++++++++++++++++++++----------- - 1 file changed, 21 insertions(+), 11 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 3a3c238..1e32557 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -3640,18 +3640,8 @@ virDomainDefRemoveDuplicateMetadata(virDomainDefPtr def) - - - static int --virDomainDefPostParseInternal(virDomainDefPtr def, -- virCapsPtr caps ATTRIBUTE_UNUSED) -+virDomainDefPostParseMemory(virDomainDefPtr def) - { -- size_t i; -- -- /* verify init path for container based domains */ -- if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init) { -- virReportError(VIR_ERR_XML_ERROR, "%s", -- _("init binary must be specified")); -- return -1; -- } -- - if (virDomainDefGetMemoryInitial(def) == 0) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("Memory size must be specified via or in the " -@@ -3679,6 +3669,26 @@ virDomainDefPostParseInternal(virDomainDefPtr def, - return -1; - } - -+ return 0; -+} -+ -+ -+static int -+virDomainDefPostParseInternal(virDomainDefPtr def, -+ virCapsPtr caps ATTRIBUTE_UNUSED) -+{ -+ size_t i; -+ -+ /* verify init path for container based domains */ -+ if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init) { -+ virReportError(VIR_ERR_XML_ERROR, "%s", -+ _("init binary must be specified")); -+ return -1; -+ } -+ -+ if (virDomainDefPostParseMemory(def) < 0) -+ return -1; -+ - /* - * Some really crazy backcompat stuff for consoles - * --- -2.5.3 - diff --git a/SOURCES/libvirt-conf-allow-hotplugging-legacy-PCI-device-to-manually-addressed-PCIe-slot.patch b/SOURCES/libvirt-conf-allow-hotplugging-legacy-PCI-device-to-manually-addressed-PCIe-slot.patch new file mode 100644 index 0000000..ae2aecf --- /dev/null +++ b/SOURCES/libvirt-conf-allow-hotplugging-legacy-PCI-device-to-manually-addressed-PCIe-slot.patch @@ -0,0 +1,54 @@ +From 58593f4340d766fb7639de542f3b21463d5b98ef Mon Sep 17 00:00:00 2001 +Message-Id: <58593f4340d766fb7639de542f3b21463d5b98ef@dist-git> +From: Laine Stump +Date: Mon, 12 Sep 2016 16:25:25 -0400 +Subject: [PATCH] conf: allow hotplugging "legacy PCI" device to manually + addressed PCIe slot + +In a full domain config, libvirt allows overriding the normal PCI +vs. PCI Express rules when a device address is explicitly provided +(so, e.g., you can force a legacy PCI device to plug into a PCIe port, +although libvirt would never do that on its own). However, due to a +bug libvirt doesn't give this same leeway when hotplugging devices. On +top of that, current libvirt assumes that *all* devices are legacy +PCI. The result of all this is that it's impossible to hotplug a +device into a PCIe port, even if you manually add the PCI address. + +This can all be traced to the function +virDomainPCIAddressEnsureAddr(), and the fact that it calls +virDomainPCIaddressReserveSlot() for manually set addresses, and that +function hardcodes the argument "fromConfig" to false (meaning "this +address was auto-assigned, so it should be subject to stricter +validation"). + +Since virDomainPCIAddressReserveSlot() is just a one line simple +wrapper around virDomainPCIAddressReserveAddr() (adding in a hardcoded +reserveEntireSlot = true and fromConfig = false), all that's needed to +solve the problem with no unwanted side effects is to replace that +call for virDomainPCIAddressReserveSlot() with a direct call to +virDomainPCIAddressReserveAddr(), but with reserveEntireSlot = true, +fromConfig = true. That's what this patch does. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1337490 +(cherry picked from commit b87703cf79559157404667628802d7fe8f9f19a6) +--- + src/conf/domain_addr.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 7f4f4d8..cad1c27 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -507,7 +507,8 @@ virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs, + addrStr, flags, true)) + goto cleanup; + +- ret = virDomainPCIAddressReserveSlot(addrs, &dev->addr.pci, flags); ++ ret = virDomainPCIAddressReserveAddr(addrs, &dev->addr.pci, flags, ++ true, true); + } else { + ret = virDomainPCIAddressReserveNextSlot(addrs, dev, flags); + } +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-convert-def-vcpus-to-a-array-of-pointers.patch b/SOURCES/libvirt-conf-convert-def-vcpus-to-a-array-of-pointers.patch new file mode 100644 index 0000000..18dcbd5 --- /dev/null +++ b/SOURCES/libvirt-conf-convert-def-vcpus-to-a-array-of-pointers.patch @@ -0,0 +1,174 @@ +From 909fa8d0e46a086da4ab44d40b652b8fe2917df4 Mon Sep 17 00:00:00 2001 +Message-Id: <909fa8d0e46a086da4ab44d40b652b8fe2917df4@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:47 -0400 +Subject: [PATCH] conf: convert def->vcpus to a array of pointers + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +(cherry picked from commit 990b06de03b3f4e294e3e9eca831fea7b1edb067) +--- + src/conf/domain_conf.c | 44 +++++++++++++++++++++++++++++++------------- + src/conf/domain_conf.h | 2 +- + 2 files changed, 32 insertions(+), 14 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 7a12462..6d0f967 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -1312,14 +1312,26 @@ void virDomainLeaseDefFree(virDomainLeaseDefPtr def) + } + + ++static virDomainVcpuDefPtr ++virDomainVcpuDefNew(void) ++{ ++ virDomainVcpuDefPtr ret; ++ ++ ignore_value(VIR_ALLOC(ret)); ++ ++ return ret; ++} ++ ++ + static void +-virDomainVcpuDefClear(virDomainVcpuDefPtr info) ++virDomainVcpuDefFree(virDomainVcpuDefPtr info) + { + if (!info) + return; + + virBitmapFree(info->cpumask); + info->cpumask = NULL; ++ VIR_FREE(info); + } + + +@@ -1327,6 +1339,7 @@ int + virDomainDefSetVcpusMax(virDomainDefPtr def, + unsigned int maxvcpus) + { ++ size_t oldmax = def->maxvcpus; + size_t i; + + if (def->maxvcpus == maxvcpus) +@@ -1335,9 +1348,14 @@ virDomainDefSetVcpusMax(virDomainDefPtr def, + if (def->maxvcpus < maxvcpus) { + if (VIR_EXPAND_N(def->vcpus, def->maxvcpus, maxvcpus - def->maxvcpus) < 0) + return -1; ++ ++ for (i = oldmax; i < def->maxvcpus; i++) { ++ if (!(def->vcpus[i] = virDomainVcpuDefNew())) ++ return -1; ++ } + } else { + for (i = maxvcpus; i < def->maxvcpus; i++) +- virDomainVcpuDefClear(&def->vcpus[i]); ++ virDomainVcpuDefFree(def->vcpus[i]); + + VIR_SHRINK_N(def->vcpus, def->maxvcpus, def->maxvcpus - maxvcpus); + } +@@ -1352,7 +1370,7 @@ virDomainDefHasVcpusOffline(const virDomainDef *def) + size_t i; + + for (i = 0; i < def->maxvcpus; i++) { +- if (!def->vcpus[i].online) ++ if (!def->vcpus[i]->online) + return true; + } + +@@ -1381,10 +1399,10 @@ virDomainDefSetVcpus(virDomainDefPtr def, + } + + for (i = 0; i < vcpus; i++) +- def->vcpus[i].online = true; ++ def->vcpus[i]->online = true; + + for (i = vcpus; i < def->maxvcpus; i++) +- def->vcpus[i].online = false; ++ def->vcpus[i]->online = false; + + return 0; + } +@@ -1397,7 +1415,7 @@ virDomainDefGetVcpus(const virDomainDef *def) + unsigned int ret = 0; + + for (i = 0; i < def->maxvcpus; i++) { +- if (def->vcpus[i].online) ++ if (def->vcpus[i]->online) + ret++; + } + +@@ -1421,7 +1439,7 @@ virDomainDefGetOnlineVcpumap(const virDomainDef *def) + return NULL; + + for (i = 0; i < def->maxvcpus; i++) { +- if (def->vcpus[i].online) ++ if (def->vcpus[i]->online) + ignore_value(virBitmapSetBit(ret, i)); + } + +@@ -1436,7 +1454,7 @@ virDomainDefGetVcpu(virDomainDefPtr def, + if (vcpu >= def->maxvcpus) + return NULL; + +- return &def->vcpus[vcpu]; ++ return def->vcpus[vcpu]; + } + + +@@ -1465,7 +1483,7 @@ virDomainDefHasVcpuPin(const virDomainDef *def) + size_t i; + + for (i = 0; i < def->maxvcpus; i++) { +- if (def->vcpus[i].cpumask) ++ if (def->vcpus[i]->cpumask) + return true; + } + +@@ -2526,7 +2544,7 @@ void virDomainDefFree(virDomainDefPtr def) + virDomainResourceDefFree(def->resource); + + for (i = 0; i < def->maxvcpus; i++) +- virDomainVcpuDefClear(&def->vcpus[i]); ++ virDomainVcpuDefFree(def->vcpus[i]); + VIR_FREE(def->vcpus); + + /* hostdevs must be freed before nets (or any future "intelligent +@@ -18634,8 +18652,8 @@ virDomainDefVcpuCheckAbiStability(virDomainDefPtr src, + } + + for (i = 0; i < src->maxvcpus; i++) { +- virDomainVcpuDefPtr svcpu = &src->vcpus[i]; +- virDomainVcpuDefPtr dvcpu = &dst->vcpus[i]; ++ virDomainVcpuDefPtr svcpu = src->vcpus[i]; ++ virDomainVcpuDefPtr dvcpu = dst->vcpus[i]; + + if (svcpu->online != dvcpu->online) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +@@ -22819,7 +22837,7 @@ virDomainCputuneDefFormat(virBufferPtr buf, + + for (i = 0; i < def->maxvcpus; i++) { + char *cpumask; +- virDomainVcpuDefPtr vcpu = def->vcpus + i; ++ virDomainVcpuDefPtr vcpu = def->vcpus[i]; + + if (!vcpu->cpumask) + continue; +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index c20ea79..ac37382 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2132,7 +2132,7 @@ struct _virDomainDef { + virDomainBlkiotune blkio; + virDomainMemtune mem; + +- virDomainVcpuDefPtr vcpus; ++ virDomainVcpuDefPtr *vcpus; + size_t maxvcpus; + int placement_mode; + virBitmapPtr cpumask; +-- +2.10.0 + diff --git a/SOURCES/libvirt-conf-don-t-allow-connecting-upstream-port-directly-to-pce-expander-bus.patch b/SOURCES/libvirt-conf-don-t-allow-connecting-upstream-port-directly-to-pce-expander-bus.patch new file mode 100644 index 0000000..32d357e --- /dev/null +++ b/SOURCES/libvirt-conf-don-t-allow-connecting-upstream-port-directly-to-pce-expander-bus.patch @@ -0,0 +1,75 @@ +From 093fe7d6bde7f224200e7f2877949f3196002bd7 Mon Sep 17 00:00:00 2001 +Message-Id: <093fe7d6bde7f224200e7f2877949f3196002bd7@dist-git> +From: Laine Stump +Date: Wed, 10 Aug 2016 11:00:12 -0400 +Subject: [PATCH] conf: don't allow connecting upstream-port directly to + pce-expander-bus + +I apparently misunderstood Marcel's description of what could and +couldn't be plugged into qemu's pxb-pcie controller (known as +pcie-expander-bus in libvirt) - I specifically allowed directly +connecting a pcie-switch-upstream-port, and it turns out that causes +the guest kernel to crash. + +This patch forbids such a connection, and updates the xml docs +appropriately. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1361172 +(cherry picked from commit b70e54342bbd1756234e07ed6b22bdd3cd12b689) +--- + docs/formatdomain.html.in | 20 +++++++++++--------- + src/conf/domain_addr.c | 7 ++----- + 2 files changed, 13 insertions(+), 14 deletions(-) + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index c2e261d..b74057f 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -3333,15 +3333,17 @@ + 2nd bus-number is just being reserved for the pcie-root-port + that must necessarily be connected to the bus in order to + actually plug in an endpoint device. If you intend to plug +- multiple devices into a pcie-expander-bus, you must instead +- connect a pcie-switch-upstream-port to the +- pcie-expander-bus, and multiple pcie-switch-downstream-ports +- to the pcie-switch-downstream-port, and of course for this +- to work properly, you will need to decrease the +- pcie-expander-bus' busNr accordingly so that there are +- enough unused bus numbers above it to accomodate giving out +- one bus number for the upstream-port and one for each +- downstream-port). ++ multiple devices into a pcie-expander-bus, you must connect ++ a pcie-switch-upstream-port to the pcie-root-port that is ++ plugged into the pcie-expander-bus, and multiple ++ pcie-switch-downstream-ports to the ++ pcie-switch-upstream-port, and of course for this to work ++ properly, you will need to decrease the pcie-expander-bus' ++ busNr accordingly so that there are enough unused bus ++ numbers above it to accomodate giving out one bus number for ++ the upstream-port and one for each downstream-port (in ++ addition to the pcie-root-port and the pcie-expander-bus ++ itself). +

+ +
node
+diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 61c4074..c22329d 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -291,11 +291,8 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus, + bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; + break; + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS: +- /* single slot, no hotplug, only accepts pcie-root-port or +- * pcie-switch-upstream-port. +- */ +- bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT +- | VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT); ++ /* single slot, no hotplug, only accepts pcie-root-port */ ++ bus->flags = VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT; + bus->minSlot = 0; + bus->maxSlot = 0; + break; +-- +2.9.2 + diff --git a/SOURCES/libvirt-conf-fix-crash-when-parsing-a-unordered-NUMA-cell.patch b/SOURCES/libvirt-conf-fix-crash-when-parsing-a-unordered-NUMA-cell.patch deleted file mode 100644 index 21b7918..0000000 --- a/SOURCES/libvirt-conf-fix-crash-when-parsing-a-unordered-NUMA-cell.patch +++ /dev/null @@ -1,134 +0,0 @@ -From e47ad8b77b309bd6e0cc0016537207a7426df10b Mon Sep 17 00:00:00 2001 -Message-Id: -From: Luyao Huang -Date: Tue, 8 Sep 2015 10:43:21 +0200 -Subject: [PATCH] conf: fix crash when parsing a unordered NUMA - -https://bugzilla.redhat.com/show_bug.cgi?id=1260846 - -Introduced by 8fedbbdb, if we parse an unordered NUMA cell, will -get a segfault. This is because of a check for overlapping @cpus -sets we have there. However, since the array to hold guest NUMA -cells is allocated upfront and therefore it contains all zeros, -an out of order cell will break our assumption that cell IDs have -increasing character. At this point we try to access yet NULL -bitmap and therefore segfault. - -Signed-off-by: Luyao Huang -(cherry picked from commit 83ae3ee39bd13feddecc49aaad382d5cae72c257) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/conf/numa_conf.c | 10 +++++--- - .../qemuxml2argv-cpu-numa-disordered.xml | 26 +++++++++++++++++++ - .../qemuxml2xmlout-cpu-numa-disordered.xml | 29 ++++++++++++++++++++++ - tests/qemuxml2xmltest.c | 1 + - 4 files changed, 63 insertions(+), 3 deletions(-) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml - create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml - -diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c -index 5c123b9..b5963ac 100644 ---- a/src/conf/numa_conf.c -+++ b/src/conf/numa_conf.c -@@ -759,11 +759,15 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def, - } - VIR_FREE(tmp); - -- for (j = 0; j < i; j++) { -+ for (j = 0; j < n; j++) { -+ if (j == cur_cell || !def->mem_nodes[j].cpumask) -+ continue; -+ - if (virBitmapOverlaps(def->mem_nodes[j].cpumask, -- def->mem_nodes[i].cpumask)) { -+ def->mem_nodes[cur_cell].cpumask)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -- _("NUMA cells %zu and %zu have overlapping vCPU ids"), i, j); -+ _("NUMA cells %u and %zu have overlapping vCPU ids"), -+ cur_cell, j); - goto cleanup; - } - } -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml -new file mode 100644 -index 0000000..ad31607 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml -@@ -0,0 +1,26 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 328650 -+ 328650 -+ 16 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml -new file mode 100644 -index 0000000..0a76f12 ---- /dev/null -+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml -@@ -0,0 +1,29 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 328650 -+ 328650 -+ 16 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+ -diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c -index 5f88c5d..d498610 100644 ---- a/tests/qemuxml2xmltest.c -+++ b/tests/qemuxml2xmltest.c -@@ -604,6 +604,7 @@ mymain(void) - DO_TEST_DIFFERENT("cpu-numa1"); - DO_TEST_DIFFERENT("cpu-numa2"); - DO_TEST_DIFFERENT("cpu-numa-no-memory-element"); -+ DO_TEST_DIFFERENT("cpu-numa-disordered"); - DO_TEST("cpu-numa-disjoint"); - DO_TEST("cpu-numa-memshared"); - --- -2.5.2 - diff --git a/SOURCES/libvirt-conf-free-the-ports-array-of-a-USB-hub.patch b/SOURCES/libvirt-conf-free-the-ports-array-of-a-USB-hub.patch new file mode 100644 index 0000000..784373d --- /dev/null +++ b/SOURCES/libvirt-conf-free-the-ports-array-of-a-USB-hub.patch @@ -0,0 +1,33 @@ +From 9e0ace88fbe504e27928976d3b39182f9165aeaa Mon Sep 17 00:00:00 2001 +Message-Id: <9e0ace88fbe504e27928976d3b39182f9165aeaa@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Tue, 16 Aug 2016 12:49:57 +0200 +Subject: [PATCH] conf: free the ports array of a USB hub +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The array needs to be freed too, not just its members. + +https://bugzilla.redhat.com/show_bug.cgi?id=1366097 +(cherry picked from commit d49f6853b36234ea0ec175dc39a5d67ba2a75123) +Signed-off-by: Ján Tomko +--- + src/conf/domain_addr.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 6567093..7f4f4d8 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1329,6 +1329,7 @@ virDomainUSBAddressHubFree(virDomainUSBAddressHubPtr hub) + + for (i = 0; i < hub->nports; i++) + virDomainUSBAddressHubFree(hub->ports[i]); ++ VIR_FREE(hub->ports); + virBitmapFree(hub->portmap); + VIR_FREE(hub); + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-conf-improve-error-log-when-PCI-devices-don-t-match-requested-controller.patch b/SOURCES/libvirt-conf-improve-error-log-when-PCI-devices-don-t-match-requested-controller.patch new file mode 100644 index 0000000..8872da1 --- /dev/null +++ b/SOURCES/libvirt-conf-improve-error-log-when-PCI-devices-don-t-match-requested-controller.patch @@ -0,0 +1,106 @@ +From fef66972e7387805fbcdf42695b9b25d0c4f4630 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Laine Stump +Date: Wed, 10 Aug 2016 11:00:11 -0400 +Subject: [PATCH] conf: improve error log when PCI devices don't match + requested controller + +The virDomainPCIAddressFlagsCompatible() error logs report that a +device required a controller that accepted standard PCI endpoint +devices, or PCI Express endpoint devices, and if hotplug was required +by the configuration but not provided by the selected controller. But +the wording of the error messages was apparently confusing (according +to the bugzilla report referenced below). On top of that, if the +device was something other than an endpoint device (e.g. a +pcie-switch-downstream-port) the error message was a complete punt - +it would just say that the flags were incorrect. + +This patch makes the messages for PCI/PCIe endpoint and hotplug +requirements more clear, and also specifically indicates what was the +device type when it is other than an endpoint device. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1363627 +(cherry picked from commit 10031fe5f218fe0acbf873a3063ce42a02fa83d9) +--- + src/conf/domain_addr.c | 58 ++++++++++++++++++++++++++++---------------------- + 1 file changed, 33 insertions(+), 25 deletions(-) + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index c3469ee..61c4074 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -118,38 +118,46 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr, + * hot-plug and this bus doesn't have it, return false. + */ + if (!(devFlags & busFlags & VIR_PCI_CONNECT_TYPES_MASK)) { +- if (reportError) { +- if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_DEVICE) { +- virReportError(errType, +- _("PCI bus is not compatible with the device " +- "at %s. Device requires a standard PCI slot, " +- "which is not provided by bus %.4x:%.2x"), +- addrStr, addr->domain, addr->bus); +- } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_DEVICE) { +- virReportError(errType, +- _("PCI bus is not compatible with the device " +- "at %s. Device requires a PCI Express slot, " +- "which is not provided by bus %.4x:%.2x"), +- addrStr, addr->domain, addr->bus); +- } else { +- /* this should never happen. If it does, there is a +- * bug in the code that sets the flag bits for devices. +- */ +- virReportError(errType, +- _("The device information for %s has no PCI " +- "connection types listed"), addrStr); +- } ++ const char *connectStr; ++ ++ if (!reportError) ++ return false; ++ ++ if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_DEVICE) { ++ connectStr = "standard PCI device"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_DEVICE) { ++ connectStr = "PCI Express device"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT) { ++ connectStr = "pcie-root-port"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT) { ++ connectStr = "pci-switch-upstream-port"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT) { ++ connectStr = "pci-switch-downstream-port"; ++ } else { ++ /* this should never happen. If it does, there is a ++ * bug in the code that sets the flag bits for devices. ++ */ ++ virReportError(errType, ++ _("The device at PCI address %s has " ++ "unrecognized connection type flags 0x%.2x"), ++ addrStr, devFlags & VIR_PCI_CONNECT_TYPES_MASK); ++ return false; + } ++ virReportError(errType, ++ _("The device at PCI address %s cannot be " ++ "plugged into the PCI controller with index='%d'. " ++ "It requires a controller that accepts a %s."), ++ addrStr, addr->bus, connectStr); + return false; + } + if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) && + !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) { + if (reportError) { + virReportError(errType, +- _("PCI bus is not compatible with the device " +- "at %s. Device requires hot-plug capability, " +- "which is not provided by bus %.4x:%.2x"), +- addrStr, addr->domain, addr->bus); ++ _("The device at PCI address %s requires " ++ "hotplug capability, but the PCI controller " ++ "with index='%d' doesn't support hotplug"), ++ addrStr, addr->bus); + } + return false; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-conf-more-useful-error-message-when-pci-function-is-out-of-range.patch b/SOURCES/libvirt-conf-more-useful-error-message-when-pci-function-is-out-of-range.patch deleted file mode 100644 index 4a2f134..0000000 --- a/SOURCES/libvirt-conf-more-useful-error-message-when-pci-function-is-out-of-range.patch +++ /dev/null @@ -1,355 +0,0 @@ -From b26bd9a4f71598c17a09b7148aa82773b480b8b5 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Laine Stump -Date: Sat, 8 Aug 2015 19:36:40 -0400 -Subject: [PATCH] conf: more useful error message when pci function is out of - range - -If a pci address had a function number out of range, the error message -would be: - - Insufficient specification for PCI address - -which is logged by virDevicePCIAddressParseXML() after -virDevicePCIAddressIsValid returns a failure. - -This patch enhances virDevicePCIAddressIsValid() to optionally report -the error itself (since it is the place that decides which part of the -address is "invalid"), and uses that feature when calling from -virDevicePCIAddressParseXML(), so that the error will be more useful, -e.g.: - - Invalid PCI address function=0x8, must be <= 7 - -Previously, virDevicePCIAddressIsValid didn't check for the -theoretical limits of domain or bus, only for slot or function. While -adding log messages, we also correct that ommission. (The RNG for PCI -addresses already enforces this limit, which by the way means that we -can't add any negative tests for this - as far as I know our -domainschematest has no provisions for passing XML that is supposed to -fail). - -Note that virDevicePCIAddressIsValid() can only check against the -absolute maximum attribute values for *any* possible PCI controller, -not for the actual maximums of the specific controller that this -device is attaching to; fortunately there is later more specific -validation for guest-side PCI addresses when building the set of -assigned PCI addresses. For host-side PCI addresses (e.g. for - and for network device pools), we rely on the error that -will be logged when it is found that the device doesn't actually -exist. - -This resolves: - - https://bugzilla.redhat.com/show_bug.cgi?id=1004596 - -(cherry picked from commit f8fe8f03455783afcd62d79db7ce4120f514c629) - -Signed-off-by: Jiri Denemark ---- - src/conf/device_conf.c | 52 ++++++++++++++++++---- - src/conf/device_conf.h | 5 ++- - src/conf/domain_conf.c | 2 +- - .../qemuxml2argv-pci-bus-invalid.xml | 33 ++++++++++++++ - .../qemuxml2argv-pci-domain-invalid.xml | 33 ++++++++++++++ - .../qemuxml2argv-pci-function-invalid.xml | 33 ++++++++++++++ - .../qemuxml2argv-pci-slot-invalid.xml | 33 ++++++++++++++ - tests/qemuxml2argvtest.c | 6 +++ - 8 files changed, 185 insertions(+), 12 deletions(-) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-bus-invalid.xml - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-domain-invalid.xml - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-function-invalid.xml - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-slot-invalid.xml - -diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c -index 98808e2..5bf903c 100644 ---- a/src/conf/device_conf.c -+++ b/src/conf/device_conf.c -@@ -1,7 +1,7 @@ - /* - * device_conf.c: device XML handling - * -- * Copyright (C) 2006-2012 Red Hat, Inc. -+ * Copyright (C) 2006-2015 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -53,12 +53,49 @@ VIR_ENUM_IMPL(virNetDevFeature, - "ntuple", - "rxhash") - --int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr) -+int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr, -+ bool report) - { -- /* PCI bus has 32 slots and 8 functions per slot */ -- if (addr->slot >= 32 || addr->function >= 8) -+ if (addr->domain > 0xFFFF) { -+ if (report) -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Invalid PCI address domain='0x%x', " -+ "must be <= 0xFFFF"), -+ addr->domain); - return 0; -- return addr->domain || addr->bus || addr->slot; -+ } -+ if (addr->bus > 0xFF) { -+ if (report) -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Invalid PCI address bus='0x%x', " -+ "must be <= 0xFF"), -+ addr->bus); -+ return 0; -+ } -+ if (addr->slot > 0x1F) { -+ if (report) -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Invalid PCI address slot='0x%x', " -+ "must be <= 0x1F"), -+ addr->slot); -+ return 0; -+ } -+ if (addr->function > 7) { -+ if (report) -+ virReportError(VIR_ERR_XML_ERROR, -+ _("Invalid PCI address function=0x%x, " -+ "must be <= 7"), -+ addr->function); -+ return 0; -+ } -+ if (!(addr->domain || addr->bus || addr->slot)) { -+ if (report) -+ virReportError(VIR_ERR_XML_ERROR, "%s", -+ _("Invalid PCI address 0000:00:00, at least " -+ "one of domain, bus, or slot must be > 0")); -+ return 0; -+ } -+ return 1; - } - - -@@ -113,11 +150,8 @@ virDevicePCIAddressParseXML(xmlNodePtr node, - goto cleanup; - - } -- if (!virDevicePCIAddressIsValid(addr)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -- _("Insufficient specification for PCI address")); -+ if (!virDevicePCIAddressIsValid(addr, true)) - goto cleanup; -- } - - ret = 0; - -diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h -index 7ea90f6..d3d3739 100644 ---- a/src/conf/device_conf.h -+++ b/src/conf/device_conf.h -@@ -1,7 +1,7 @@ - /* - * device_conf.h: device XML handling entry points - * -- * Copyright (C) 2006-2012 Red Hat, Inc. -+ * Copyright (C) 2006-2012, 2014-2015 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -79,7 +79,8 @@ typedef enum { - - VIR_ENUM_DECL(virNetDevFeature) - --int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr); -+int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr, -+ bool report); - - int virDevicePCIAddressParseXML(xmlNodePtr node, - virDevicePCIAddressPtr addr); -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 54d0651..aa1b860 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -3095,7 +3095,7 @@ int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info, - - switch (info->type) { - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: -- return virDevicePCIAddressIsValid(&info->addr.pci); -+ return virDevicePCIAddressIsValid(&info->addr.pci, false); - - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE: - return 1; -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-bus-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-pci-bus-invalid.xml -new file mode 100644 -index 0000000..f6d0901 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-bus-invalid.xml -@@ -0,0 +1,33 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -+ -+ -+
-+ -+ -+ -+ -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-domain-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-pci-domain-invalid.xml -new file mode 100644 -index 0000000..a42d796 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-domain-invalid.xml -@@ -0,0 +1,33 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -+ -+ -+
-+ -+ -+ -+ -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-function-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-pci-function-invalid.xml -new file mode 100644 -index 0000000..c9ba5a3 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-function-invalid.xml -@@ -0,0 +1,33 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -+ -+ -+
-+ -+ -+ -+ -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-slot-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-pci-slot-invalid.xml -new file mode 100644 -index 0000000..09bab49 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-slot-invalid.xml -@@ -0,0 +1,33 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu -+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -+ -+ -+
-+ -+ -+ -+ -diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c -index 4290c06..c2657d7 100644 ---- a/tests/qemuxml2argvtest.c -+++ b/tests/qemuxml2argvtest.c -@@ -1480,6 +1480,12 @@ mymain(void) - DO_TEST_PARSE_ERROR("tpm-no-backend-invalid", QEMU_CAPS_DEVICE, - QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS); - -+ -+ DO_TEST_PARSE_ERROR("pci-domain-invalid", QEMU_CAPS_DEVICE); -+ DO_TEST_PARSE_ERROR("pci-bus-invalid", QEMU_CAPS_DEVICE); -+ DO_TEST_PARSE_ERROR("pci-slot-invalid", QEMU_CAPS_DEVICE); -+ DO_TEST_PARSE_ERROR("pci-function-invalid", QEMU_CAPS_DEVICE); -+ - DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE); - DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE); - DO_TEST("pci-many", --- -2.5.0 - diff --git a/SOURCES/libvirt-conf-report-an-error-message-for-non-existing-USB-hubs.patch b/SOURCES/libvirt-conf-report-an-error-message-for-non-existing-USB-hubs.patch new file mode 100644 index 0000000..4995c06 --- /dev/null +++ b/SOURCES/libvirt-conf-report-an-error-message-for-non-existing-USB-hubs.patch @@ -0,0 +1,88 @@ +From a61eeb7afe4694defd6a6bd46f917802fd88703c Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Tue, 16 Aug 2016 12:49:45 +0200 +Subject: [PATCH] conf: report an error message for non-existing USB hubs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If any of the devices referenced a USB hub that does not exist, +defining the domain would either fail with: +error: An error occurred, but the cause is unknown +(if only the last hub in the path is missing) +or crash. + +Return a proper error instead of crashing. + +https://bugzilla.redhat.com/show_bug.cgi?id=1367130 +(cherry picked from commit ef66bd5df8af93db5a77f0c1f33182139c9b63b3) +Signed-off-by: Ján Tomko +--- + src/conf/domain_addr.c | 8 ++++++++ + .../qemuxml2argv-usb-hub-nonexistent.xml | 19 +++++++++++++++++++ + tests/qemuxml2argvtest.c | 3 +++ + 3 files changed, 30 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-nonexistent.xml + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index 14baef7..6567093 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -1501,6 +1501,14 @@ virDomainUSBAddressFindPort(virDomainUSBAddressSetPtr addrs, + return NULL; + } + hub = hub->ports[portIdx]; ++ if (!hub) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("there is no hub at port %u in USB address bus: %u port: %s"), ++ info->addr.usb.port[i], ++ info->addr.usb.bus, ++ portStr); ++ return NULL; ++ } + } + + *targetIdx = info->addr.usb.port[lastIdx] - 1; +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-nonexistent.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-nonexistent.xml +new file mode 100644 +index 0000000..2090319 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-nonexistent.xml +@@ -0,0 +1,19 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 1 ++ ++ hvm ++ ++ ++ ++ /usr/bin/qemu ++ ++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index b86a8a1..b1ff684 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1202,6 +1202,9 @@ mymain(void) + DO_TEST_PARSE_ERROR("usb-hub-conflict", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); ++ DO_TEST_PARSE_ERROR("usb-hub-nonexistent", ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, ++ QEMU_CAPS_NODEFCONFIG); + DO_TEST("usb-port-missing", + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB, + QEMU_CAPS_NODEFCONFIG); +-- +2.9.2 + diff --git a/SOURCES/libvirt-conf-restrict-expander-buses-to-connect-only-to-a-root-bus.patch b/SOURCES/libvirt-conf-restrict-expander-buses-to-connect-only-to-a-root-bus.patch new file mode 100644 index 0000000..acfbef4 --- /dev/null +++ b/SOURCES/libvirt-conf-restrict-expander-buses-to-connect-only-to-a-root-bus.patch @@ -0,0 +1,233 @@ +From 646a880d28b878dc45decb1b6d6238bf42ad1006 Mon Sep 17 00:00:00 2001 +Message-Id: <646a880d28b878dc45decb1b6d6238bf42ad1006@dist-git> +From: Laine Stump +Date: Wed, 10 Aug 2016 11:00:14 -0400 +Subject: [PATCH] conf: restrict expander buses to connect only to a root bus + +More misunderstanding/mistaken assumptions on my part - I had thought +that a pci-expander-bus could be plugged into any legacy PCI slot, and +that pcie-expander-bus could be plugged into any PCIe slot. This isn't +correct - they can both be plugged ontly into their respective root +buses. This patch adds that restriction. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1358712 +(cherry picked from commit a220f43a65cca6c6f2ca268cdbbf8f997b2e2b13) +--- + src/conf/domain_addr.c | 32 +++++++++------ + src/conf/domain_addr.h | 6 ++- + .../qemuxml2argv-pci-expander-bus-bad-bus.xml | 26 ++++++++++++ + .../qemuxml2argv-pcie-expander-bus-bad-bus.xml | 48 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 8 ++++ + 5 files changed, 107 insertions(+), 13 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus-bad-bus.xml + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus-bad-bus.xml + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index ea641a5..14baef7 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -51,20 +51,17 @@ virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model) + return 0; + + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE: +- case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS: +- /* pci-bridge and pci-expander-bus are treated like a standard +- * PCI endpoint device, because they can plug into any +- * standard PCI slot. ++ /* pci-bridge is treated like a standard ++ * PCI endpoint device, because it can plug into any ++ * standard PCI slot (it just can't be hotplugged). + */ + return VIR_PCI_CONNECT_TYPE_PCI_DEVICE; + ++ case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS: ++ return VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS; ++ + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS: +- /* pcie-expander-bus is treated like a standard PCIe endpoint +- * device (the part of pcie-expander-bus that is plugged in +- * isn't the expander bus itself, but a companion device used +- * for setting it up). +- */ +- return VIR_PCI_CONNECT_TYPE_PCIE_DEVICE; ++ return VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS; + + case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE: + return VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE; +@@ -137,6 +134,10 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr, + connectStr = "pci-switch-downstream-port"; + } else if (devFlags & VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE) { + connectStr = "dmi-to-pci-bridge"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS) { ++ connectStr = "pci-expander-bus"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS) { ++ connectStr = "pcie-expander-bus"; + } else { + /* this should never happen. If it does, there is a + * bug in the code that sets the flag bits for devices. +@@ -243,9 +244,15 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus, + * bus. + */ + switch (model) { +- case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE: + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT: + bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE | ++ VIR_PCI_CONNECT_TYPE_PCI_DEVICE | ++ VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS); ++ bus->minSlot = 1; ++ bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; ++ break; ++ case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE: ++ bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE | + VIR_PCI_CONNECT_TYPE_PCI_DEVICE); + bus->minSlot = 1; + bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; +@@ -265,7 +272,8 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus, + */ + bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE | + VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT | +- VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE); ++ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE | ++ VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS); + bus->minSlot = 1; + bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; + break; +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index 2d55c46..da19311 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -41,6 +41,8 @@ typedef enum { + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 4, + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 5, + VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 6, ++ VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 7, ++ VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 8, + } virDomainPCIConnectFlags; + + /* a combination of all bits that describe the type of connections +@@ -51,7 +53,9 @@ typedef enum { + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT | \ + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT | \ + VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT | \ +- VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE) ++ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE | \ ++ VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS | \ ++ VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS) + + /* combination of all bits that could be used to connect a normal + * endpoint device (i.e. excluding the connection possible between an +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus-bad-bus.xml b/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus-bad-bus.xml +new file mode 100644 +index 0000000..85c1115 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus-bad-bus.xml +@@ -0,0 +1,26 @@ ++ ++ expander-test ++ 3ec6cbe1-b5a2-4515-b800-31a61855df41 ++ 219100 ++ 219100 ++ 16 ++ ++ hvm ++ ++ ++ /usr/bin/qemu-system-x86_64 ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus-bad-bus.xml b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus-bad-bus.xml +new file mode 100644 +index 0000000..0305f35 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus-bad-bus.xml +@@ -0,0 +1,48 @@ ++ ++ pcie-expander-bus-test ++ 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 ++ 2097152 ++ 2097152 ++ 16 ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/libexec/qemu-kvm ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1 ++ ++
++ ++ ++
++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index c7c0ff2..b86a8a1 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1730,6 +1730,9 @@ mymain(void) + DO_TEST_PARSE_ERROR("pci-expander-bus-bad-machine", + QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_PXB); ++ DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus", ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_PXB); + + DO_TEST("pcie-expander-bus", + QEMU_CAPS_DEVICE_PCI_BRIDGE, +@@ -1745,6 +1748,11 @@ mymain(void) + QEMU_CAPS_DEVICE_X3130_UPSTREAM, + QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM, + QEMU_CAPS_DEVICE_PXB_PCIE); ++ DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus", ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_IOH3420, ++ QEMU_CAPS_DEVICE_PXB_PCIE); + + DO_TEST("hostdev-scsi-lsi", + QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, +-- +2.9.2 + diff --git a/SOURCES/libvirt-conf-restrict-where-dmi-to-pci-bridge-can-be-connected.patch b/SOURCES/libvirt-conf-restrict-where-dmi-to-pci-bridge-can-be-connected.patch new file mode 100644 index 0000000..f58b26d --- /dev/null +++ b/SOURCES/libvirt-conf-restrict-where-dmi-to-pci-bridge-can-be-connected.patch @@ -0,0 +1,212 @@ +From 4e81f870fc9f235df004fe33f668217f34c5d210 Mon Sep 17 00:00:00 2001 +Message-Id: <4e81f870fc9f235df004fe33f668217f34c5d210@dist-git> +From: Laine Stump +Date: Wed, 10 Aug 2016 11:00:13 -0400 +Subject: [PATCH] conf: restrict where dmi-to-pci-bridge can be connected + +libvirt had allowed a dmi-to-pci-bridge to be plugged in anywhere a +normal PCIe endpoint can be connected, but this is wrong - it will +only work if it's plugged into pcie-root (the PCIe root complex) or a +pcie-expander-bus (the qemu device pxb-pcie). This patch adjusts the +connection flags accordingly. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1363648 +(cherry picked from commit b70e3d0123fcb6e22e99d1b272239e03a84262cb) +--- + src/conf/domain_addr.c | 26 ++++++++++----- + src/conf/domain_addr.h | 4 ++- + .../qemuxml2argv-q35-dmi-bad-address1.xml | 31 +++++++++++++++++ + .../qemuxml2argv-q35-dmi-bad-address2.xml | 39 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 8 +++++ + 5 files changed, 98 insertions(+), 10 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address1.xml + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address2.xml + +diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c +index c22329d..ea641a5 100644 +--- a/src/conf/domain_addr.c ++++ b/src/conf/domain_addr.c +@@ -58,15 +58,17 @@ virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model) + */ + return VIR_PCI_CONNECT_TYPE_PCI_DEVICE; + +- case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE: + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS: +- /* dmi-to-pci-bridge and pcie-expander-bus are treated like +- * PCIe devices (the part of pcie-expander-bus that is plugged +- * in isn't the expander bus itself, but a companion device +- * used for setting it up). ++ /* pcie-expander-bus is treated like a standard PCIe endpoint ++ * device (the part of pcie-expander-bus that is plugged in ++ * isn't the expander bus itself, but a companion device used ++ * for setting it up). + */ + return VIR_PCI_CONNECT_TYPE_PCIE_DEVICE; + ++ case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE: ++ return VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE; ++ + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT: + return VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT; + +@@ -133,6 +135,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr, + connectStr = "pci-switch-upstream-port"; + } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT) { + connectStr = "pci-switch-downstream-port"; ++ } else if (devFlags & VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE) { ++ connectStr = "dmi-to-pci-bridge"; + } else { + /* this should never happen. If it does, there is a + * bug in the code that sets the flag bits for devices. +@@ -259,8 +263,9 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus, + * user config *and* the particular device being attached also + * allows it. + */ +- bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE +- | VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT); ++ bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE | ++ VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT | ++ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE); + bus->minSlot = 1; + bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; + break; +@@ -291,8 +296,11 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus, + bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; + break; + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS: +- /* single slot, no hotplug, only accepts pcie-root-port */ +- bus->flags = VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT; ++ /* single slot, no hotplug, only accepts pcie-root-port or ++ * dmi-to-pci-bridge ++ */ ++ bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT | ++ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE); + bus->minSlot = 0; + bus->maxSlot = 0; + break; +diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h +index ce94981..2d55c46 100644 +--- a/src/conf/domain_addr.h ++++ b/src/conf/domain_addr.h +@@ -40,6 +40,7 @@ typedef enum { + VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 3, + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 4, + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 5, ++ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 6, + } virDomainPCIConnectFlags; + + /* a combination of all bits that describe the type of connections +@@ -49,7 +50,8 @@ typedef enum { + (VIR_PCI_CONNECT_TYPE_PCI_DEVICE | VIR_PCI_CONNECT_TYPE_PCIE_DEVICE | \ + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT | \ + VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT | \ +- VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT) ++ VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT | \ ++ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE) + + /* combination of all bits that could be used to connect a normal + * endpoint device (i.e. excluding the connection possible between an +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address1.xml b/tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address1.xml +new file mode 100644 +index 0000000..e23c874 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address1.xml +@@ -0,0 +1,31 @@ ++ ++ q35-test ++ 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 ++ 2097152 ++ 2097152 ++ 2 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/libexec/qemu-kvm ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
++ ++ ++ ++ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address2.xml b/tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address2.xml +new file mode 100644 +index 0000000..c3c1b6a +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-dmi-bad-address2.xml +@@ -0,0 +1,39 @@ ++ ++ q35-test ++ 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 ++ 2097152 ++ 2097152 ++ 2 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/libexec/qemu-kvm ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 927728e..c7c0ff2 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1631,6 +1631,14 @@ mymain(void) + QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1, + QEMU_CAPS_DEVICE_VIDEO_PRIMARY, + QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); ++ DO_TEST_PARSE_ERROR("q35-dmi-bad-address1", ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_IOH3420); ++ DO_TEST_PARSE_ERROR("q35-dmi-bad-address2", ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_IOH3420); + DO_TEST("q35-pm-disable", + QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI, +-- +2.9.2 + diff --git a/SOURCES/libvirt-cpu-Add-POWER8NVL-information-to-CPU-map-XML.patch b/SOURCES/libvirt-cpu-Add-POWER8NVL-information-to-CPU-map-XML.patch deleted file mode 100644 index 7cabebb..0000000 --- a/SOURCES/libvirt-cpu-Add-POWER8NVL-information-to-CPU-map-XML.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 3904386ebdf08d922742c6c516d106ec633850b9 Mon Sep 17 00:00:00 2001 -Message-Id: <3904386ebdf08d922742c6c516d106ec633850b9@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:08 +0200 -Subject: [PATCH] cpu: Add POWER8NVL information to CPU map XML - -This is yet another variation of POWER8. The PVR information comes -from arch/powerpc/kernel/cputable.c in the Linux kernel tree. - -(cherry picked from commit 36300d2ba15b0f84272fc8be234c4228f19c29b9) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_map.xml | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml -index 4e7ca2a..c304c9a 100644 ---- a/src/cpu/cpu_map.xml -+++ b/src/cpu/cpu_map.xml -@@ -642,6 +642,7 @@ - - - -+ - - - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Add-support-for-MPX-and-AVX512-Intel-features.patch b/SOURCES/libvirt-cpu-Add-support-for-MPX-and-AVX512-Intel-features.patch deleted file mode 100644 index d4f39f6..0000000 --- a/SOURCES/libvirt-cpu-Add-support-for-MPX-and-AVX512-Intel-features.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 9ba4e23393ea05ba0b6feabf7f365310f1c600ed Mon Sep 17 00:00:00 2001 -Message-Id: <9ba4e23393ea05ba0b6feabf7f365310f1c600ed@dist-git> -From: Jiri Denemark -Date: Thu, 9 Jul 2015 09:47:34 +0200 -Subject: [PATCH] cpu: Add support for MPX and AVX512 Intel features - -Corresponding QEMU commits: - MPX 79e9ebebbf2a00c46fcedb6dc7dd5e12bbd30216 - AVX512 9aecd6f8aef653cea58932f06a2740299dbe5fd3 - -Signed-off-by: Jiri Denemark -(cherry picked from commit 1cd70869d97760d91baa1e2ad76c02b470f0d5bd) - -https://bugzilla.redhat.com/show_bug.cgi?id=1076170 - -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_map.xml | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml -index 2110c0b..51474e1 100644 ---- a/src/cpu/cpu_map.xml -+++ b/src/cpu/cpu_map.xml -@@ -317,6 +317,12 @@ - - - -+ -+ -+ -+ -+ -+ - - - -@@ -326,6 +332,15 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - --- -2.4.5 - diff --git a/SOURCES/libvirt-cpu-Align-ppc64-CPU-data-with-x86.patch b/SOURCES/libvirt-cpu-Align-ppc64-CPU-data-with-x86.patch deleted file mode 100644 index c5fb052..0000000 --- a/SOURCES/libvirt-cpu-Align-ppc64-CPU-data-with-x86.patch +++ /dev/null @@ -1,251 +0,0 @@ -From d7efd0615b63be6fad7c0833f988430e79ced194 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:04 +0200 -Subject: [PATCH] cpu: Align ppc64 CPU data with x86 - -Use a typedef instead of the plain struct and heap allocation. This -will make it easier to extend the ppc64 specific CPU data later on. - -(cherry picked from commit adb865df85c525f0cffa995b8fd4e7f897c8f35c) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu.h | 2 +- - src/cpu/cpu_ppc64.c | 86 ++++++++++++++++++++++++++++++++++++------------ - src/cpu/cpu_ppc64_data.h | 3 +- - 3 files changed, 68 insertions(+), 23 deletions(-) - -diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h -index 49d4226..7375876 100644 ---- a/src/cpu/cpu.h -+++ b/src/cpu/cpu.h -@@ -38,7 +38,7 @@ struct _virCPUData { - virArch arch; - union { - virCPUx86Data *x86; -- struct cpuPPC64Data ppc64; -+ virCPUppc64Data *ppc64; - /* generic driver needs no data */ - } data; - }; -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index efac739..6c78ab8 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -48,7 +48,7 @@ struct ppc64_vendor { - struct ppc64_model { - char *name; - const struct ppc64_vendor *vendor; -- struct cpuPPC64Data data; -+ virCPUppc64Data *data; - struct ppc64_model *next; - }; - -@@ -58,6 +58,25 @@ struct ppc64_map { - }; - - static void -+ppc64DataFree(virCPUppc64Data *data) -+{ -+ VIR_FREE(data); -+} -+ -+static virCPUppc64Data * -+ppc64DataCopy(const virCPUppc64Data *data) -+{ -+ virCPUppc64Data *copy; -+ -+ if (VIR_ALLOC(copy) < 0) -+ return NULL; -+ -+ copy->pvr = data->pvr; -+ -+ return copy; -+} -+ -+static void - ppc64VendorFree(struct ppc64_vendor *vendor) - { - if (!vendor) -@@ -90,6 +109,7 @@ ppc64ModelFree(struct ppc64_model *model) - if (!model) - return; - -+ ppc64DataFree(model->data); - VIR_FREE(model->name); - VIR_FREE(model); - } -@@ -99,16 +119,22 @@ ppc64ModelCopy(const struct ppc64_model *model) - { - struct ppc64_model *copy; - -- if (VIR_ALLOC(copy) < 0 || -- VIR_STRDUP(copy->name, model->name) < 0) { -- ppc64ModelFree(copy); -- return NULL; -- } -+ if (VIR_ALLOC(copy) < 0) -+ goto error; -+ -+ if (VIR_STRDUP(copy->name, model->name) < 0) -+ goto error; -+ -+ if (!(copy->data = ppc64DataCopy(model->data))) -+ goto error; - -- copy->data.pvr = model->data.pvr; - copy->vendor = model->vendor; - - return copy; -+ -+ error: -+ ppc64ModelFree(copy); -+ return NULL; - } - - static struct ppc64_model * -@@ -136,7 +162,7 @@ ppc64ModelFindPVR(const struct ppc64_map *map, - - model = map->models; - while (model) { -- if (model->data.pvr == pvr) -+ if (model->data->pvr == pvr) - return model; - - model = model->next; -@@ -237,6 +263,11 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - if (VIR_ALLOC(model) < 0) - return -1; - -+ if (VIR_ALLOC(model->data) < 0) { -+ ppc64ModelFree(model); -+ return -1; -+ } -+ - model->name = virXPathString("string(@name)", ctxt); - if (!model->name) { - virReportError(VIR_ERR_INTERNAL_ERROR, -@@ -274,7 +305,7 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - model->name); - goto ignore; - } -- model->data.pvr = pvr; -+ model->data->pvr = pvr; - - if (!map->models) { - map->models = model; -@@ -318,7 +349,7 @@ ppc64LoadMap(void) - struct ppc64_map *map; - - if (VIR_ALLOC(map) < 0) -- return NULL; -+ goto error; - - if (cpuMapLoad("ppc64", ppc64MapLoadCallback, map) < 0) - goto error; -@@ -332,7 +363,7 @@ ppc64LoadMap(void) - - static virCPUDataPtr - ppc64MakeCPUData(virArch arch, -- struct cpuPPC64Data *data) -+ virCPUppc64Data *data) - { - virCPUDataPtr cpuData; - -@@ -340,7 +371,9 @@ ppc64MakeCPUData(virArch arch, - return NULL; - - cpuData->arch = arch; -- cpuData->data.ppc64 = *data; -+ -+ if (!(cpuData->data.ppc64 = ppc64DataCopy(data))) -+ VIR_FREE(cpuData); - - return cpuData; - } -@@ -421,7 +454,7 @@ ppc64Compute(virCPUDefPtr host, - } - - if (guestData) -- if (!(*guestData = ppc64MakeCPUData(arch, &guest_model->data))) -+ if (!(*guestData = ppc64MakeCPUData(arch, guest_model->data))) - goto cleanup; - - ret = VIR_CPU_COMPARE_IDENTICAL; -@@ -473,10 +506,10 @@ ppc64DriverDecode(virCPUDefPtr cpu, - if (!data || !(map = ppc64LoadMap())) - return -1; - -- if (!(model = ppc64ModelFindPVR(map, data->data.ppc64.pvr))) { -+ if (!(model = ppc64ModelFindPVR(map, data->data.ppc64->pvr))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Cannot find CPU model with PVR 0x%08x"), -- data->data.ppc64.pvr); -+ data->data.ppc64->pvr); - goto cleanup; - } - -@@ -506,25 +539,36 @@ ppc64DriverFree(virCPUDataPtr data) - if (!data) - return; - -+ ppc64DataFree(data->data.ppc64); - VIR_FREE(data); - } - - static virCPUDataPtr - ppc64DriverNodeData(virArch arch) - { -- virCPUDataPtr cpuData; -+ virCPUDataPtr nodeData; -+ virCPUppc64Data *data; - -- if (VIR_ALLOC(cpuData) < 0) -- return NULL; -+ if (VIR_ALLOC(nodeData) < 0) -+ goto error; - -- cpuData->arch = arch; -+ if (VIR_ALLOC(data) < 0) -+ goto error; -+ -+ data = nodeData->data.ppc64; - - #if defined(__powerpc__) || defined(__powerpc64__) - asm("mfpvr %0" -- : "=r" (cpuData->data.ppc64.pvr)); -+ : "=r" (data->pvr)); - #endif - -- return cpuData; -+ nodeData->arch = arch; -+ -+ return nodeData; -+ -+ error: -+ ppc64DriverFree(nodeData); -+ return NULL; - } - - static virCPUCompareResult -diff --git a/src/cpu/cpu_ppc64_data.h b/src/cpu/cpu_ppc64_data.h -index 45152de..c18fc63 100644 ---- a/src/cpu/cpu_ppc64_data.h -+++ b/src/cpu/cpu_ppc64_data.h -@@ -26,7 +26,8 @@ - - # include - --struct cpuPPC64Data { -+typedef struct _virCPUppc64Data virCPUppc64Data; -+struct _virCPUppc64Data { - uint32_t pvr; - }; - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Better-support-for-ppc64-compatibility-modes.patch b/SOURCES/libvirt-cpu-Better-support-for-ppc64-compatibility-modes.patch deleted file mode 100644 index c389db9..0000000 --- a/SOURCES/libvirt-cpu-Better-support-for-ppc64-compatibility-modes.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 487347db121ea526b8bd8c90fef223b57b058530 Mon Sep 17 00:00:00 2001 -Message-Id: <487347db121ea526b8bd8c90fef223b57b058530@dist-git> -From: Andrea Bolognani -Date: Fri, 21 Aug 2015 16:36:02 -0700 -Subject: [PATCH] cpu: Better support for ppc64 compatibility modes - -Not all combinations of host CPU models and compatibility modes -are valid, so we need to make sure we don't try to do something -that QEMU will reject. - -Moreover, we need to apply a different logic to guests using -host-model and host-passthrough modes when testing them for host -compatibility. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 -(cherry picked from commit 2f913162ed615faa7227d7366b39fa59b23f233d) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 86 insertions(+), 3 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 72b8fa0..a72cc32 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -84,6 +84,53 @@ ppc64ConvertLegacyCPUDef(const virCPUDef *legacy) - return cpu; - } - -+/* Some hosts can run guests in compatibility mode, but not all -+ * host CPUs support this and not all combinations are valid. -+ * This function performs the necessary checks */ -+static virCPUCompareResult -+ppc64CheckCompatibilityMode(const char *host_model, -+ const char *compat_mode) -+{ -+ int host; -+ int compat; -+ char *tmp; -+ virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR; -+ -+ if (!compat_mode) -+ return VIR_CPU_COMPARE_IDENTICAL; -+ -+ /* Valid host CPUs: POWER6, POWER7, POWER8 */ -+ if (!STRPREFIX(host_model, "POWER") || -+ !(tmp = (char *) host_model + strlen("POWER")) || -+ virStrToLong_i(tmp, NULL, 10, &host) < 0 || -+ host < 6 || host > 8) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ "%s", -+ _("Host CPU does not support compatibility modes")); -+ goto out; -+ } -+ -+ /* Valid compatibility modes: power6, power7, power8 */ -+ if (!STRPREFIX(compat_mode, "power") || -+ !(tmp = (char *) compat_mode + strlen("power")) || -+ virStrToLong_i(tmp, NULL, 10, &compat) < 0 || -+ compat < 6 || compat > 8) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unknown compatibility mode %s"), -+ compat_mode); -+ goto out; -+ } -+ -+ /* Version check */ -+ if (compat > host) -+ ret = VIR_CPU_COMPARE_INCOMPATIBLE; -+ else -+ ret = VIR_CPU_COMPARE_IDENTICAL; -+ -+ out: -+ return ret; -+} -+ - static void - ppc64DataFree(virCPUppc64Data *data) - { -@@ -509,11 +556,47 @@ ppc64Compute(virCPUDefPtr host, - goto cleanup; - } - -- if (!(map = ppc64LoadMap()) || -- !(host_model = ppc64ModelFromCPU(host, map)) || -- !(guest_model = ppc64ModelFromCPU(cpu, map))) -+ if (!(map = ppc64LoadMap())) - goto cleanup; - -+ /* Host CPU information */ -+ if (!(host_model = ppc64ModelFromCPU(host, map))) -+ goto cleanup; -+ -+ if (cpu->type == VIR_CPU_TYPE_GUEST) { -+ /* Guest CPU information */ -+ virCPUCompareResult tmp; -+ switch (cpu->mode) { -+ case VIR_CPU_MODE_HOST_MODEL: -+ /* host-model only: -+ * we need to take compatibility modes into account */ -+ tmp = ppc64CheckCompatibilityMode(host->model, cpu->model); -+ if (tmp != VIR_CPU_COMPARE_IDENTICAL) { -+ ret = tmp; -+ goto cleanup; -+ } -+ /* fallthrough */ -+ -+ case VIR_CPU_MODE_HOST_PASSTHROUGH: -+ /* host-model and host-passthrough: -+ * the guest CPU is the same as the host */ -+ if (!(guest_model = ppc64ModelCopy(host_model))) -+ goto cleanup; -+ break; -+ -+ case VIR_CPU_MODE_CUSTOM: -+ /* custom: -+ * look up guest CPU information */ -+ if (!(guest_model = ppc64ModelFromCPU(cpu, map))) -+ goto cleanup; -+ break; -+ } -+ } else { -+ /* Other host CPU information */ -+ if (!(guest_model = ppc64ModelFromCPU(cpu, map))) -+ goto cleanup; -+ } -+ - if (STRNEQ(guest_model->name, host_model->name)) { - VIR_DEBUG("host CPU model does not match required CPU model %s", - guest_model->name); --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-CPU-model-names-have-to-match-on-ppc64.patch b/SOURCES/libvirt-cpu-CPU-model-names-have-to-match-on-ppc64.patch deleted file mode 100644 index 0b1ab1b..0000000 --- a/SOURCES/libvirt-cpu-CPU-model-names-have-to-match-on-ppc64.patch +++ /dev/null @@ -1,114 +0,0 @@ -From f9bb279a947c2b296a05bfe77881a8dda3b01e31 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:01 +0200 -Subject: [PATCH] cpu: CPU model names have to match on ppc64 - -Limitations of the POWER architecture mean that you can't run -eg. a POWER7 guest on a POWER8 host when using KVM. This applies -to all guests, not just those using VIR_CPU_MATCH_STRICT in the -CPU definition; in fact, exact and strict CPU matching are -basically the same on ppc64. - -This means, of course, that hosts using different CPUs have to be -considered incompatible as well. - -Change ppc64Compute(), called by cpuGuestData(), to reflect this -fact and update test cases accordingly. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 -(cherry picked from commit 96b2c7459cb689a27996c2d69131e245940bc533) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 5 +---- - tests/cputest.c | 4 ++-- - tests/cputestdata/ppc64-guest.xml | 2 +- - tests/cputestdata/ppc64-host+guest,ppc_models-result.xml | 2 +- - .../ppc64-host+guest-nofallback,ppc_models,POWER7_v2.1-result.xml | 5 ----- - 5 files changed, 5 insertions(+), 13 deletions(-) - delete mode 100644 tests/cputestdata/ppc64-host+guest-nofallback,ppc_models,POWER7_v2.1-result.xml - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 53d8fb0..0769956 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -350,7 +350,6 @@ ppc64Compute(virCPUDefPtr host, - const virCPUDef *cpu, - virCPUDataPtr *guestData, - char **message) -- - { - struct ppc64_map *map = NULL; - struct ppc64_model *host_model = NULL; -@@ -407,9 +406,7 @@ ppc64Compute(virCPUDefPtr host, - !(guest_model = ppc64ModelFromCPU(cpu, map))) - goto cleanup; - -- if (cpu->type == VIR_CPU_TYPE_GUEST && -- cpu->match == VIR_CPU_MATCH_STRICT && -- STRNEQ(guest_model->name, host_model->name)) { -+ if (STRNEQ(guest_model->name, host_model->name)) { - VIR_DEBUG("host CPU model does not match required CPU model %s", - guest_model->name); - if (message && -diff --git a/tests/cputest.c b/tests/cputest.c -index 93f9d2e..1e84fd3 100644 ---- a/tests/cputest.c -+++ b/tests/cputest.c -@@ -501,7 +501,7 @@ static const char *model486[] = { "486" }; - static const char *nomodel[] = { "nomodel" }; - static const char *models[] = { "qemu64", "core2duo", "Nehalem" }; - static const char *haswell[] = { "SandyBridge", "Haswell" }; --static const char *ppc_models[] = { "POWER7", "POWER7_v2.1", "POWER8_v1.0"}; -+static const char *ppc_models[] = { "POWER7", "POWER7_v2.1", "POWER7_v2.3", "POWER8_v1.0"}; - - static int - mymain(void) -@@ -662,7 +662,7 @@ mymain(void) - NULL, "Haswell-noTSX", 0); - - DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0); -- DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", 0); -+ DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", -1); - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } -diff --git a/tests/cputestdata/ppc64-guest.xml b/tests/cputestdata/ppc64-guest.xml -index ac81ec0..9e91501 100644 ---- a/tests/cputestdata/ppc64-guest.xml -+++ b/tests/cputestdata/ppc64-guest.xml -@@ -1,4 +1,4 @@ - -- POWER8_v1.0 -+ POWER7_v2.3 - - -diff --git a/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml b/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml -index 0cb0830..3e55f68 100644 ---- a/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml -+++ b/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml -@@ -1,5 +1,5 @@ - - ppc64 -- POWER8_v1.0 -+ POWER7_v2.3 - IBM - -diff --git a/tests/cputestdata/ppc64-host+guest-nofallback,ppc_models,POWER7_v2.1-result.xml b/tests/cputestdata/ppc64-host+guest-nofallback,ppc_models,POWER7_v2.1-result.xml -deleted file mode 100644 -index 7e58361..0000000 ---- a/tests/cputestdata/ppc64-host+guest-nofallback,ppc_models,POWER7_v2.1-result.xml -+++ /dev/null -@@ -1,5 +0,0 @@ -- -- ppc64 -- POWER7_v2.1 -- IBM -- --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Don-t-update-host-model-guest-CPUs-on-ppc64.patch b/SOURCES/libvirt-cpu-Don-t-update-host-model-guest-CPUs-on-ppc64.patch deleted file mode 100644 index 0fd8245..0000000 --- a/SOURCES/libvirt-cpu-Don-t-update-host-model-guest-CPUs-on-ppc64.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 202a17ed092c28749335bc7ed1641c5590841be6 Mon Sep 17 00:00:00 2001 -Message-Id: <202a17ed092c28749335bc7ed1641c5590841be6@dist-git> -From: Andrea Bolognani -Date: Fri, 21 Aug 2015 16:36:01 -0700 -Subject: [PATCH] cpu: Don't update host-model guest CPUs on ppc64 - -If a guest CPU is defined using - - - -the sub-element will contain the compatibility mode to use. -That means we can't just copy the host CPU model on cpuUpdate(), -otherwise we'll overwrite that information and migration of such -guests will fail. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 -(cherry picked from commit 6d7c2f65c103c9b98baf595d14725e62651bdb1b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 85aa5bc..72b8fa0 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -667,13 +667,13 @@ ppc64DriverUpdate(virCPUDefPtr guest, - const virCPUDef *host) - { - switch ((virCPUMode) guest->mode) { -- case VIR_CPU_MODE_HOST_MODEL: - case VIR_CPU_MODE_HOST_PASSTHROUGH: - guest->match = VIR_CPU_MATCH_EXACT; - guest->fallback = VIR_CPU_FALLBACK_FORBID; - virCPUDefFreeModel(guest); - return virCPUDefCopyModel(guest, host, true); - -+ case VIR_CPU_MODE_HOST_MODEL: - case VIR_CPU_MODE_CUSTOM: - return 0; - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Fix-segfault-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Fix-segfault-in-the-ppc64-driver.patch deleted file mode 100644 index 258a4be..0000000 --- a/SOURCES/libvirt-cpu-Fix-segfault-in-the-ppc64-driver.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 7306403f40cb6bf780db655dbd66867dad989df7 Mon Sep 17 00:00:00 2001 -Message-Id: <7306403f40cb6bf780db655dbd66867dad989df7@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 18:46:54 +0200 -Subject: [PATCH] cpu: Fix segfault in the ppc64 driver - -Commit adb865d introduced some changes in ppc64DriverNodeData() -that cause libvirtd to crash on startup unless this patch is -applied as well. - -(cherry picked from commit 133c25c81c9ef79053d8d67a1e897846f9d7adb5) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 33fec8b..85aa5bc 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -628,7 +628,7 @@ ppc64DriverNodeData(virArch arch) - if (VIR_ALLOC(nodeData) < 0) - goto error; - -- if (VIR_ALLOC(data) < 0) -+ if (VIR_ALLOC(nodeData->data.ppc64) < 0) - goto error; - - data = nodeData->data.ppc64; --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Forbid-model-fallback-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Forbid-model-fallback-in-the-ppc64-driver.patch deleted file mode 100644 index dbc4325..0000000 --- a/SOURCES/libvirt-cpu-Forbid-model-fallback-in-the-ppc64-driver.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 10b9626e8866873f047662b6e2ecdccd3235d76d Mon Sep 17 00:00:00 2001 -Message-Id: <10b9626e8866873f047662b6e2ecdccd3235d76d@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:10 +0200 -Subject: [PATCH] cpu: Forbid model fallback in the ppc64 driver - -Unlike what happens on x86, on ppc64 you can't mix and match CPU -features to obtain the guest CPU you want regardless of the host -CPU, so the concept of model fallback doesn't apply. - -Make sure CPU definitions emitted by the driver, eg. as output of -the cpuBaseline() and cpuUpdate() calls, reflect this fact. - -(cherry picked from commit 344d1675e84be60c024080afd74f0da6d25c5f6b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index f24fc41..33fec8b 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -670,6 +670,7 @@ ppc64DriverUpdate(virCPUDefPtr guest, - case VIR_CPU_MODE_HOST_MODEL: - case VIR_CPU_MODE_HOST_PASSTHROUGH: - guest->match = VIR_CPU_MATCH_EXACT; -+ guest->fallback = VIR_CPU_FALLBACK_FORBID; - virCPUDefFreeModel(guest); - return virCPUDefCopyModel(guest, host, true); - -@@ -768,6 +769,7 @@ ppc64DriverBaseline(virCPUDefPtr *cpus, - - cpu->type = VIR_CPU_TYPE_GUEST; - cpu->match = VIR_CPU_MATCH_EXACT; -+ cpu->fallback = VIR_CPU_FALLBACK_FORBID; - - cleanup: - ppc64MapFree(map); --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Implement-backwards-compatibility-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Implement-backwards-compatibility-in-the-ppc64-driver.patch deleted file mode 100644 index 443741a..0000000 --- a/SOURCES/libvirt-cpu-Implement-backwards-compatibility-in-the-ppc64-driver.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 12305284ccf9163e90fbfc9b2c14ac735796e781 Mon Sep 17 00:00:00 2001 -Message-Id: <12305284ccf9163e90fbfc9b2c14ac735796e781@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:09 +0200 -Subject: [PATCH] cpu: Implement backwards compatibility in the ppc64 driver - -All previously recognized CPU models (POWER7_v2.1, POWER7_v2.3, -POWER7+_v2.1 and POWER8_v1.0) are internally converted to the -corrisponding generation name so that existing guests don't stop -working. - -(cherry picked from commit dee2247afa78c66db737626acb30afe04bd7cdef) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 45 insertions(+), 2 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index fafd84c..f24fc41 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -57,6 +57,33 @@ struct ppc64_map { - struct ppc64_model *models; - }; - -+/* Convert a legacy CPU definition by transforming -+ * model names to generation names: -+ * POWER7_v2.1 => POWER7 -+ * POWER7_v2.3 => POWER7 -+ * POWER7+_v2.1 => POWER7 -+ * POWER8_v1.0 => POWER8 */ -+static virCPUDefPtr -+ppc64ConvertLegacyCPUDef(const virCPUDef *legacy) -+{ -+ virCPUDefPtr cpu; -+ -+ if (!(cpu = virCPUDefCopy(legacy))) -+ goto out; -+ -+ if (!(STREQ(cpu->model, "POWER7_v2.1") || -+ STREQ(cpu->model, "POWER7_v2.3") || -+ STREQ(cpu->model, "POWER7+_v2.1") || -+ STREQ(cpu->model, "POWER8_v1.0"))) { -+ goto out; -+ } -+ -+ cpu->model[strlen("POWERx")] = 0; -+ -+ out: -+ return cpu; -+} -+ - static void - ppc64DataFree(virCPUppc64Data *data) - { -@@ -424,18 +451,22 @@ ppc64MakeCPUData(virArch arch, - - static virCPUCompareResult - ppc64Compute(virCPUDefPtr host, -- const virCPUDef *cpu, -+ const virCPUDef *other, - virCPUDataPtr *guestData, - char **message) - { - struct ppc64_map *map = NULL; - struct ppc64_model *host_model = NULL; - struct ppc64_model *guest_model = NULL; -- -+ virCPUDefPtr cpu = NULL; - virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR; - virArch arch; - size_t i; - -+ /* Ensure existing configurations are handled correctly */ -+ if (!(cpu = ppc64ConvertLegacyCPUDef(other))) -+ goto cleanup; -+ - if (cpu->arch != VIR_ARCH_NONE) { - bool found = false; - -@@ -504,6 +535,7 @@ ppc64Compute(virCPUDefPtr host, - ret = VIR_CPU_COMPARE_IDENTICAL; - - cleanup: -+ virCPUDefFree(cpu); - ppc64MapFree(map); - ppc64ModelFree(host_model); - ppc64ModelFree(guest_model); -@@ -681,6 +713,17 @@ ppc64DriverBaseline(virCPUDefPtr *cpus, - for (i = 0; i < ncpus; i++) { - const struct ppc64_vendor *vnd; - -+ /* Hosts running old (<= 1.2.18) versions of libvirt will report -+ * strings like 'power7+' or 'power8e' instead of proper CPU model -+ * names in the capabilities XML; moreover, they lack information -+ * about some proper CPU models like 'POWER8'. -+ * This implies two things: -+ * 1) baseline among such hosts never worked -+ * 2) while a few models, eg. 'POWER8_v1.0', could work on both -+ * old and new versions of libvirt, the information we have -+ * here is not enough to pick such a model -+ * Hence we just compare models by name to decide whether or not -+ * two hosts are compatible */ - if (STRNEQ(cpus[i]->model, model->name)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("CPUs are incompatible")); --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Indentation-changes-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Indentation-changes-in-the-ppc64-driver.patch deleted file mode 100644 index e89afab..0000000 --- a/SOURCES/libvirt-cpu-Indentation-changes-in-the-ppc64-driver.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 429baeb240d7d34abe27d87a76971311029a0704 Mon Sep 17 00:00:00 2001 -Message-Id: <429baeb240d7d34abe27d87a76971311029a0704@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:52 +0200 -Subject: [PATCH] cpu: Indentation changes in the ppc64 driver - -(cherry picked from commit 4ff3e939e7225f7a502e029067c848855815b569) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 7a48903..c3a51fb 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -340,7 +340,8 @@ ppc64LoadMap(void) - } - - static virCPUDataPtr --ppc64MakeCPUData(virArch arch, struct cpuPPC64Data *data) -+ppc64MakeCPUData(virArch arch, -+ struct cpuPPC64Data *data) - { - virCPUDataPtr cpuData; - -@@ -695,9 +696,9 @@ ppc64GetModels(char ***models) - } - - struct cpuArchDriver cpuDriverPPC64 = { -- .name = "ppc64", -- .arch = archs, -- .narch = ARRAY_CARDINALITY(archs), -+ .name = "ppc64", -+ .arch = archs, -+ .narch = ARRAY_CARDINALITY(archs), - .compare = ppc64Compare, - .decode = ppc64Decode, - .encode = NULL, --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Introduce-IvyBridge-CPU-model.patch b/SOURCES/libvirt-cpu-Introduce-IvyBridge-CPU-model.patch deleted file mode 100644 index 4a60a71..0000000 --- a/SOURCES/libvirt-cpu-Introduce-IvyBridge-CPU-model.patch +++ /dev/null @@ -1,77 +0,0 @@ -From f7a5372992addeee44662958aa5b4d036d21fcf1 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Fri, 4 Sep 2015 15:06:40 +0200 -Subject: [PATCH] cpu: Introduce IvyBridge CPU model - -https://bugzilla.redhat.com/show_bug.cgi?id=1254420 - -Signed-off-by: Jiri Denemark -(cherry picked from commit 87205512565529b8baeb108e3d0fe376fc20c967) -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_map.xml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - -diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml -index c304c9a..e49d255 100644 ---- a/src/cpu/cpu_map.xml -+++ b/src/cpu/cpu_map.xml -@@ -515,6 +515,54 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - --- -2.5.1 - diff --git a/SOURCES/libvirt-cpu-Mark-driver-functions-in-ppc64-driver.patch b/SOURCES/libvirt-cpu-Mark-driver-functions-in-ppc64-driver.patch deleted file mode 100644 index 9fe7983..0000000 --- a/SOURCES/libvirt-cpu-Mark-driver-functions-in-ppc64-driver.patch +++ /dev/null @@ -1,159 +0,0 @@ -From f48120d7df0abb0fba08e8f42e7f135981ab5011 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:53 +0200 -Subject: [PATCH] cpu: Mark driver functions in ppc64 driver - -Use the ppc64Driver prefix for all functions that are used to -fill in the cpuDriverPPC64 structure, ie. those that are going -to be called by the generic CPU code. - -This makes it clear which functions are exported and which are -implementation details; it also gets rid of the ambiguity that -affected the ppc64DataFree() function which, despite what the -name suggested, was not related to ppc64DataCopy() and could -not be used to release the memory allocated for a -virCPUppc64Data* instance. - -No functional changes. - -(cherry picked from commit 2686bf229247279da79505238b001cf45e0b6950) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 62 ++++++++++++++++++++++++++--------------------------- - 1 file changed, 31 insertions(+), 31 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index c3a51fb..5140297 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -448,9 +448,9 @@ ppc64Compute(virCPUDefPtr host, - } - - static virCPUCompareResult --ppc64Compare(virCPUDefPtr host, -- virCPUDefPtr cpu, -- bool failIncompatible) -+ppc64DriverCompare(virCPUDefPtr host, -+ virCPUDefPtr cpu, -+ bool failIncompatible) - { - if ((cpu->arch == VIR_ARCH_NONE || host->arch == cpu->arch) && - STREQ(host->model, cpu->model)) -@@ -465,12 +465,12 @@ ppc64Compare(virCPUDefPtr host, - } - - static int --ppc64Decode(virCPUDefPtr cpu, -- const virCPUData *data, -- const char **models, -- unsigned int nmodels, -- const char *preferred ATTRIBUTE_UNUSED, -- unsigned int flags) -+ppc64DriverDecode(virCPUDefPtr cpu, -+ const virCPUData *data, -+ const char **models, -+ unsigned int nmodels, -+ const char *preferred ATTRIBUTE_UNUSED, -+ unsigned int flags) - { - int ret = -1; - struct ppc64_map *map; -@@ -510,7 +510,7 @@ ppc64Decode(virCPUDefPtr cpu, - - - static void --ppc64DataFree(virCPUDataPtr data) -+ppc64DriverFree(virCPUDataPtr data) - { - if (data == NULL) - return; -@@ -519,7 +519,7 @@ ppc64DataFree(virCPUDataPtr data) - } - - static virCPUDataPtr --ppc64NodeData(virArch arch) -+ppc64DriverNodeData(virArch arch) - { - virCPUDataPtr cpuData; - -@@ -537,17 +537,17 @@ ppc64NodeData(virArch arch) - } - - static virCPUCompareResult --ppc64GuestData(virCPUDefPtr host, -- virCPUDefPtr guest, -- virCPUDataPtr *data, -- char **message) -+ppc64DriverGuestData(virCPUDefPtr host, -+ virCPUDefPtr guest, -+ virCPUDataPtr *data, -+ char **message) - { - return ppc64Compute(host, guest, data, message); - } - - static int --ppc64Update(virCPUDefPtr guest, -- const virCPUDef *host) -+ppc64DriverUpdate(virCPUDefPtr guest, -+ const virCPUDef *host) - { - switch ((virCPUMode) guest->mode) { - case VIR_CPU_MODE_HOST_MODEL: -@@ -569,11 +569,11 @@ ppc64Update(virCPUDefPtr guest, - } - - static virCPUDefPtr --ppc64Baseline(virCPUDefPtr *cpus, -- unsigned int ncpus, -- const char **models ATTRIBUTE_UNUSED, -- unsigned int nmodels ATTRIBUTE_UNUSED, -- unsigned int flags) -+ppc64DriverBaseline(virCPUDefPtr *cpus, -+ unsigned int ncpus, -+ const char **models ATTRIBUTE_UNUSED, -+ unsigned int nmodels ATTRIBUTE_UNUSED, -+ unsigned int flags) - { - struct ppc64_map *map = NULL; - const struct ppc64_model *model; -@@ -653,7 +653,7 @@ ppc64Baseline(virCPUDefPtr *cpus, - } - - static int --ppc64GetModels(char ***models) -+ppc64DriverGetModels(char ***models) - { - struct ppc64_map *map; - struct ppc64_model *model; -@@ -699,14 +699,14 @@ struct cpuArchDriver cpuDriverPPC64 = { - .name = "ppc64", - .arch = archs, - .narch = ARRAY_CARDINALITY(archs), -- .compare = ppc64Compare, -- .decode = ppc64Decode, -+ .compare = ppc64DriverCompare, -+ .decode = ppc64DriverDecode, - .encode = NULL, -- .free = ppc64DataFree, -- .nodeData = ppc64NodeData, -- .guestData = ppc64GuestData, -- .baseline = ppc64Baseline, -- .update = ppc64Update, -+ .free = ppc64DriverFree, -+ .nodeData = ppc64DriverNodeData, -+ .guestData = ppc64DriverGuestData, -+ .baseline = ppc64DriverBaseline, -+ .update = ppc64DriverUpdate, - .hasFeature = NULL, -- .getModels = ppc64GetModels, -+ .getModels = ppc64DriverGetModels, - }; --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Move-check-for-NULL-CPU-model-inside-the-driver.patch b/SOURCES/libvirt-cpu-Move-check-for-NULL-CPU-model-inside-the-driver.patch deleted file mode 100644 index b041c86..0000000 --- a/SOURCES/libvirt-cpu-Move-check-for-NULL-CPU-model-inside-the-driver.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 71ec836090966a629753444b19d3beb6e490a571 Mon Sep 17 00:00:00 2001 -Message-Id: <71ec836090966a629753444b19d3beb6e490a571@dist-git> -From: Andrea Bolognani -Date: Fri, 21 Aug 2015 16:36:03 -0700 -Subject: [PATCH] cpu: Move check for NULL CPU model inside the driver - -While the check is appropriate for eg. the x86 and generic drivers, -there are some valid ppc64 guest configurations where the CPU -model is supposed to be NULL. - -Moving this check from the generic code to the drivers makes it -possible to accomodate both use cases. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 -(cherry picked from commit 5750149fedb2ec7f1aaaad8286650255718c861d) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu.c | 12 ------------ - src/cpu/cpu_generic.c | 6 ++++++ - src/cpu/cpu_ppc64.c | 3 ++- - src/cpu/cpu_x86.c | 6 ++++++ - 4 files changed, 14 insertions(+), 13 deletions(-) - -diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c -index 731df26..1952b53 100644 ---- a/src/cpu/cpu.c -+++ b/src/cpu/cpu.c -@@ -142,12 +142,6 @@ cpuCompare(virCPUDefPtr host, - - VIR_DEBUG("host=%p, cpu=%p", host, cpu); - -- if (!cpu->model) { -- virReportError(VIR_ERR_INVALID_ARG, "%s", -- _("no guest CPU model specified")); -- return VIR_CPU_COMPARE_ERROR; -- } -- - if ((driver = cpuGetSubDriver(host->arch)) == NULL) - return VIR_CPU_COMPARE_ERROR; - -@@ -376,12 +370,6 @@ cpuGuestData(virCPUDefPtr host, - - VIR_DEBUG("host=%p, guest=%p, data=%p, msg=%p", host, guest, data, msg); - -- if (!guest->model) { -- virReportError(VIR_ERR_INVALID_ARG, "%s", -- _("no guest CPU model specified")); -- return VIR_CPU_COMPARE_ERROR; -- } -- - if ((driver = cpuGetSubDriver(host->arch)) == NULL) - return VIR_CPU_COMPARE_ERROR; - -diff --git a/src/cpu/cpu_generic.c b/src/cpu/cpu_generic.c -index a9cde4c..f26a62d 100644 ---- a/src/cpu/cpu_generic.c -+++ b/src/cpu/cpu_generic.c -@@ -65,6 +65,12 @@ genericCompare(virCPUDefPtr host, - size_t i; - unsigned int reqfeatures; - -+ if (!cpu->model) { -+ virReportError(VIR_ERR_INVALID_ARG, "%s", -+ _("no guest CPU model specified")); -+ goto cleanup; -+ } -+ - if ((cpu->arch != VIR_ARCH_NONE && - host->arch != cpu->arch) || - STRNEQ(host->model, cpu->model)) { -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index a72cc32..364c8ed 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -71,7 +71,8 @@ ppc64ConvertLegacyCPUDef(const virCPUDef *legacy) - if (!(cpu = virCPUDefCopy(legacy))) - goto out; - -- if (!(STREQ(cpu->model, "POWER7_v2.1") || -+ if (!cpu->model || -+ !(STREQ(cpu->model, "POWER7_v2.1") || - STREQ(cpu->model, "POWER7_v2.3") || - STREQ(cpu->model, "POWER7+_v2.1") || - STREQ(cpu->model, "POWER8_v1.0"))) { -diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c -index f5f7697..90949f6 100644 ---- a/src/cpu/cpu_x86.c -+++ b/src/cpu/cpu_x86.c -@@ -1371,6 +1371,12 @@ x86Compute(virCPUDefPtr host, - virArch arch; - size_t i; - -+ if (!cpu->model) { -+ virReportError(VIR_ERR_INVALID_ARG, "%s", -+ _("no guest CPU model specified")); -+ return VIR_CPU_COMPARE_ERROR; -+ } -+ - if (cpu->arch != VIR_ARCH_NONE) { - bool found = false; - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Never-skip-CPU-model-name-check-in-ppc64-driver.patch b/SOURCES/libvirt-cpu-Never-skip-CPU-model-name-check-in-ppc64-driver.patch deleted file mode 100644 index d58989d..0000000 --- a/SOURCES/libvirt-cpu-Never-skip-CPU-model-name-check-in-ppc64-driver.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 22376689ed26a2bba1c8a9fa328a046eee0da4c4 Mon Sep 17 00:00:00 2001 -Message-Id: <22376689ed26a2bba1c8a9fa328a046eee0da4c4@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:00 +0200 -Subject: [PATCH] cpu: Never skip CPU model name check in ppc64 driver - -ppc64Compute(), called by cpuNodeData(), is used not only to retrieve -the driver-specific data associated to a guest CPU definition, but -also to check whether said guest CPU is compatible with the host CPU. - -If the user is not interested in the CPU data, it's perfectly fine -to pass a NULL pointer instead of a return location, and the -compatibility data returned should not be affected by this. One of -the checks, specifically the one on CPU model name, was however -only performed if the return location was non-NULL. - -(cherry picked from commit 8382136d42fd2caf2e5c7ad3b579f4fc5f104533) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 31 +++++++++++++++---------------- - 1 file changed, 15 insertions(+), 16 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 5921263..53d8fb0 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -407,26 +407,25 @@ ppc64Compute(virCPUDefPtr host, - !(guest_model = ppc64ModelFromCPU(cpu, map))) - goto cleanup; - -- if (guestData) { -- if (cpu->type == VIR_CPU_TYPE_GUEST && -- cpu->match == VIR_CPU_MATCH_STRICT && -- STRNEQ(guest_model->name, host_model->name)) { -- VIR_DEBUG("host CPU model does not match required CPU model %s", -- guest_model->name); -- if (message && -- virAsprintf(message, -- _("host CPU model does not match required " -- "CPU model %s"), -- guest_model->name) < 0) -- goto cleanup; -- -- ret = VIR_CPU_COMPARE_INCOMPATIBLE; -+ if (cpu->type == VIR_CPU_TYPE_GUEST && -+ cpu->match == VIR_CPU_MATCH_STRICT && -+ STRNEQ(guest_model->name, host_model->name)) { -+ VIR_DEBUG("host CPU model does not match required CPU model %s", -+ guest_model->name); -+ if (message && -+ virAsprintf(message, -+ _("host CPU model does not match required " -+ "CPU model %s"), -+ guest_model->name) < 0) - goto cleanup; -- } - -+ ret = VIR_CPU_COMPARE_INCOMPATIBLE; -+ goto cleanup; -+ } -+ -+ if (guestData) - if (!(*guestData = ppc64MakeCPUData(arch, &guest_model->data))) - goto cleanup; -- } - - ret = VIR_CPU_COMPARE_IDENTICAL; - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Parse-and-use-PVR-masks-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Parse-and-use-PVR-masks-in-the-ppc64-driver.patch deleted file mode 100644 index f01df6b..0000000 --- a/SOURCES/libvirt-cpu-Parse-and-use-PVR-masks-in-the-ppc64-driver.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 9407ad274bb1494c343fedb2894faf9bd2e18618 Mon Sep 17 00:00:00 2001 -Message-Id: <9407ad274bb1494c343fedb2894faf9bd2e18618@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:07 +0200 -Subject: [PATCH] cpu: Parse and use PVR masks in the ppc64 driver - -Instead of relying on a hard-coded mask value, read it from the CPU -map XML and use it when looking up models by PVR. - -(cherry picked from commit 5d0aa93c509a93b7e60b1066e5a912b42f575916) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_map.xml | 14 +++++++------- - src/cpu/cpu_ppc64.c | 23 +++++++++++++---------- - src/cpu/cpu_ppc64_data.h | 1 + - 3 files changed, 21 insertions(+), 17 deletions(-) - -diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml -index 9474a1b..4e7ca2a 100644 ---- a/src/cpu/cpu_map.xml -+++ b/src/cpu/cpu_map.xml -@@ -630,30 +630,30 @@ - - - -- -+ - - - - -- -- -+ -+ - - - - -- -- -+ -+ - - - - - -- -+ - - - - -- -+ - - - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index ba33e05..fafd84c 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -81,8 +81,10 @@ ppc64DataCopy(const virCPUppc64Data *data) - - copy->len = data->len; - -- for (i = 0; i < data->len; i++) -+ for (i = 0; i < data->len; i++) { - copy->pvr[i].value = data->pvr[i].value; -+ copy->pvr[i].mask = data->pvr[i].mask; -+ } - - return copy; - -@@ -179,20 +181,12 @@ ppc64ModelFindPVR(const struct ppc64_map *map, - model = map->models; - while (model) { - for (i = 0; i < model->data->len; i++) { -- if (model->data->pvr[i].value == pvr) -+ if ((pvr & model->data->pvr[i].mask) == model->data->pvr[i].value) - return model; - } - model = model->next; - } - -- /* PowerPC Processor Version Register is interpreted as follows : -- * Higher order 16 bits : Power ISA generation. -- * Lower order 16 bits : CPU chip version number. -- * If the exact CPU isn't found, return the nearest matching CPU generation -- */ -- if (pvr & 0x0000FFFFul) -- return ppc64ModelFindPVR(map, (pvr & 0xFFFF0000ul)); -- - return NULL; - } - -@@ -345,6 +339,14 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - goto ignore; - } - model->data->pvr[i].value = pvr; -+ -+ if (virXPathULongHex("string(./@mask)", ctxt, &pvr) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Missing or invalid PVR mask in CPU model %s"), -+ model->name); -+ goto ignore; -+ } -+ model->data->pvr[i].mask = pvr; - } - - if (!map->models) { -@@ -608,6 +610,7 @@ ppc64DriverNodeData(virArch arch) - asm("mfpvr %0" - : "=r" (data->pvr[0].value)); - #endif -+ data->pvr[0].mask = 0xfffffffful; - - nodeData->arch = arch; - -diff --git a/src/cpu/cpu_ppc64_data.h b/src/cpu/cpu_ppc64_data.h -index 0d3cb0b..c0a130e 100644 ---- a/src/cpu/cpu_ppc64_data.h -+++ b/src/cpu/cpu_ppc64_data.h -@@ -29,6 +29,7 @@ - typedef struct _virCPUppc64PVR virCPUppc64PVR; - struct _virCPUppc64PVR { - uint32_t value; -+ uint32_t mask; - }; - - typedef struct _virCPUppc64Data virCPUppc64Data; --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Remove-ISA-information-from-CPU-map-XML.patch b/SOURCES/libvirt-cpu-Remove-ISA-information-from-CPU-map-XML.patch deleted file mode 100644 index 0a06fa7..0000000 --- a/SOURCES/libvirt-cpu-Remove-ISA-information-from-CPU-map-XML.patch +++ /dev/null @@ -1,59 +0,0 @@ -From b57bf75ae9f4fd163f79fb71c5e98f852a8fd825 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:57 +0200 -Subject: [PATCH] cpu: Remove ISA information from CPU map XML - -The information is not used anywhere in libvirt. - -No functional changes. - -(cherry picked from commit cb8c0e1102c9d70b921dc41438b994ed5a08a7f8) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_map.xml | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml -index 51474e1..50516e3 100644 ---- a/src/cpu/cpu_map.xml -+++ b/src/cpu/cpu_map.xml -@@ -655,31 +655,26 @@ - - - -- - - - - - -- - - - - - -- - - - - - -- - - - - - -- - - - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-exported-symbols.patch b/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-exported-symbols.patch deleted file mode 100644 index 4311d64..0000000 --- a/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-exported-symbols.patch +++ /dev/null @@ -1,189 +0,0 @@ -From 1875eb905dd54477adea1ad55cd5e8b9f91cab15 Mon Sep 17 00:00:00 2001 -Message-Id: <1875eb905dd54477adea1ad55cd5e8b9f91cab15@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:50 +0200 -Subject: [PATCH] cpu: Rename {powerpc, ppc} => ppc64 (exported symbols) - -Only the symbols exported by the driver have been updated; -the driver implementation itself still uses the old names -internally. - -No functional changes. - -(cherry picked from commit e89733c4a443b6ea3a32c8e2f0dcd554c1ffd645) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu.c | 2 +- - src/cpu/cpu.h | 2 +- - src/cpu/cpu_ppc64.c | 18 +++++++++--------- - src/cpu/cpu_ppc64.h | 10 +++++----- - src/cpu/cpu_ppc64_data.h | 10 +++++----- - 5 files changed, 21 insertions(+), 21 deletions(-) - -diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c -index 2e34f81..731df26 100644 ---- a/src/cpu/cpu.c -+++ b/src/cpu/cpu.c -@@ -44,7 +44,7 @@ VIR_LOG_INIT("cpu.cpu"); - - static struct cpuArchDriver *drivers[] = { - &cpuDriverX86, -- &cpuDriverPowerPC, -+ &cpuDriverPPC64, - &cpuDriverS390, - &cpuDriverArm, - &cpuDriverAARCH64, -diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h -index c0371cd..49d4226 100644 ---- a/src/cpu/cpu.h -+++ b/src/cpu/cpu.h -@@ -38,7 +38,7 @@ struct _virCPUData { - virArch arch; - union { - virCPUx86Data *x86; -- struct cpuPPCData ppc; -+ struct cpuPPC64Data ppc64; - /* generic driver needs no data */ - } data; - }; -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 7866bdd..bec4bf8 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -1,5 +1,5 @@ - /* -- * cpu_ppc64.c: CPU driver for PowerPC CPUs -+ * cpu_ppc64.c: CPU driver for 64-bit PowerPC CPUs - * - * Copyright (C) 2013 Red Hat, Inc. - * Copyright (C) IBM Corporation, 2010 -@@ -36,7 +36,7 @@ - - #define VIR_FROM_THIS VIR_FROM_CPU - --VIR_LOG_INIT("cpu.cpu_powerpc"); -+VIR_LOG_INIT("cpu.cpu_ppc64"); - - static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE }; - -@@ -48,7 +48,7 @@ struct ppc_vendor { - struct ppc_model { - char *name; - const struct ppc_vendor *vendor; -- struct cpuPPCData data; -+ struct cpuPPC64Data data; - struct ppc_model *next; - }; - -@@ -340,7 +340,7 @@ ppcLoadMap(void) - } - - static virCPUDataPtr --ppcMakeCPUData(virArch arch, struct cpuPPCData *data) -+ppcMakeCPUData(virArch arch, struct cpuPPC64Data *data) - { - virCPUDataPtr cpuData; - -@@ -348,7 +348,7 @@ ppcMakeCPUData(virArch arch, struct cpuPPCData *data) - return NULL; - - cpuData->arch = arch; -- cpuData->data.ppc = *data; -+ cpuData->data.ppc64 = *data; - data = NULL; - - return cpuData; -@@ -480,10 +480,10 @@ ppcDecode(virCPUDefPtr cpu, - if (data == NULL || (map = ppcLoadMap()) == NULL) - return -1; - -- if (!(model = ppcModelFindPVR(map, data->data.ppc.pvr))) { -+ if (!(model = ppcModelFindPVR(map, data->data.ppc64.pvr))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Cannot find CPU model with PVR 0x%08x"), -- data->data.ppc.pvr); -+ data->data.ppc64.pvr); - goto cleanup; - } - -@@ -529,7 +529,7 @@ ppcNodeData(virArch arch) - - #if defined(__powerpc__) || defined(__powerpc64__) - asm("mfpvr %0" -- : "=r" (cpuData->data.ppc.pvr)); -+ : "=r" (cpuData->data.ppc64.pvr)); - #endif - - return cpuData; -@@ -694,7 +694,7 @@ ppcGetModels(char ***models) - goto cleanup; - } - --struct cpuArchDriver cpuDriverPowerPC = { -+struct cpuArchDriver cpuDriverPPC64 = { - .name = "ppc64", - .arch = archs, - .narch = ARRAY_CARDINALITY(archs), -diff --git a/src/cpu/cpu_ppc64.h b/src/cpu/cpu_ppc64.h -index e9ef2be..a6c9659 100644 ---- a/src/cpu/cpu_ppc64.h -+++ b/src/cpu/cpu_ppc64.h -@@ -1,5 +1,5 @@ - /* -- * cpu_ppc64.h: CPU driver for PowerPC CPUs -+ * cpu_ppc64.h: CPU driver for 64-bit PowerPC CPUs - * - * Copyright (C) Copyright (C) IBM Corporation, 2010 - * -@@ -22,11 +22,11 @@ - * Prerna Saxena - */ - --#ifndef __VIR_CPU_POWERPC_H__ --# define __VIR_CPU_POWERPC_H__ -+#ifndef __VIR_CPU_PPC64_H__ -+# define __VIR_CPU_PPC64_H__ - - # include "cpu.h" - --extern struct cpuArchDriver cpuDriverPowerPC; -+extern struct cpuArchDriver cpuDriverPPC64; - --#endif /* __VIR_CPU_POWERPC_H__ */ -+#endif /* __VIR_CPU_PPC64_H__ */ -diff --git a/src/cpu/cpu_ppc64_data.h b/src/cpu/cpu_ppc64_data.h -index a70b099..45152de 100644 ---- a/src/cpu/cpu_ppc64_data.h -+++ b/src/cpu/cpu_ppc64_data.h -@@ -1,5 +1,5 @@ - /* -- * cpu_ppc64_data.h: PowerPC specific CPU data -+ * cpu_ppc64_data.h: 64-bit PowerPC CPU specific data - * - * Copyright (C) 2012 IBM Corporation. - * -@@ -21,13 +21,13 @@ - * Li Zhang - */ - --#ifndef __VIR_CPU_PPC_DATA_H__ --# define __VIR_CPU_PPC_DATA_H__ -+#ifndef __VIR_CPU_PPC64_DATA_H__ -+# define __VIR_CPU_PPC64_DATA_H__ - - # include - --struct cpuPPCData { -+struct cpuPPC64Data { - uint32_t pvr; - }; - --#endif /* __VIR_CPU_PPC_DATA_H__ */ -+#endif /* __VIR_CPU_PPC64_DATA_H__ */ --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-filesystem.patch b/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-filesystem.patch deleted file mode 100644 index 27aaaa8..0000000 --- a/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-filesystem.patch +++ /dev/null @@ -1,1682 +0,0 @@ -From 81e7bf1fe3b4c70180f8d9b1d89071c13f804002 Mon Sep 17 00:00:00 2001 -Message-Id: <81e7bf1fe3b4c70180f8d9b1d89071c13f804002@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:49 +0200 -Subject: [PATCH] cpu: Rename {powerpc, ppc} => ppc64 (filesystem) - -The driver only supports VIR_ARCH_PPC64 and VIR_ARCH_PPC64LE. - -Just shuffling files around and updating the build system -accordingly. No functional changes. - -(cherry picked from commit ef770f016021967359c9443c3bab0f77a55e4afe) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - po/POTFILES.in | 2 +- - src/Makefile.am | 5 +- - src/cpu/cpu.c | 2 +- - src/cpu/cpu.h | 2 +- - src/cpu/cpu_powerpc.c | 711 ----------------------------------------------- - src/cpu/cpu_powerpc.h | 32 --- - src/cpu/cpu_ppc64.c | 711 +++++++++++++++++++++++++++++++++++++++++++++++ - src/cpu/cpu_ppc64.h | 32 +++ - src/cpu/cpu_ppc64_data.h | 33 +++ - src/cpu/cpu_ppc_data.h | 33 --- - 10 files changed, 782 insertions(+), 781 deletions(-) - delete mode 100644 src/cpu/cpu_powerpc.c - delete mode 100644 src/cpu/cpu_powerpc.h - create mode 100644 src/cpu/cpu_ppc64.c - create mode 100644 src/cpu/cpu_ppc64.h - create mode 100644 src/cpu/cpu_ppc64_data.h - delete mode 100644 src/cpu/cpu_ppc_data.h - -diff --git a/po/POTFILES.in b/po/POTFILES.in -index a75f5ae..c58a7c1 100644 ---- a/po/POTFILES.in -+++ b/po/POTFILES.in -@@ -39,7 +39,7 @@ src/conf/virchrdev.c - src/cpu/cpu.c - src/cpu/cpu_generic.c - src/cpu/cpu_map.c --src/cpu/cpu_powerpc.c -+src/cpu/cpu_ppc64.c - src/cpu/cpu_x86.c - src/driver.c - src/esx/esx_driver.c -diff --git a/src/Makefile.am b/src/Makefile.am -index be63e26..62b8fd6 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -1008,8 +1008,9 @@ CPU_SOURCES = \ - cpu/cpu_s390.h cpu/cpu_s390.c \ - cpu/cpu_arm.h cpu/cpu_arm.c \ - cpu/cpu_aarch64.h cpu/cpu_aarch64.c \ -- cpu/cpu_map.h cpu/cpu_map.c cpu/cpu_powerpc.h \ -- cpu/cpu_powerpc.c cpu/cpu_ppc_data.h -+ cpu/cpu_ppc64.h cpu/cpu_ppc64.c \ -+ cpu/cpu_ppc64_data.h \ -+ cpu/cpu_map.h cpu/cpu_map.c - - VMX_SOURCES = \ - vmx/vmx.c vmx/vmx.h -diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c -index 9e67ddd..2e34f81 100644 ---- a/src/cpu/cpu.c -+++ b/src/cpu/cpu.c -@@ -29,7 +29,7 @@ - #include "cpu.h" - #include "cpu_map.h" - #include "cpu_x86.h" --#include "cpu_powerpc.h" -+#include "cpu_ppc64.h" - #include "cpu_s390.h" - #include "cpu_arm.h" - #include "cpu_aarch64.h" -diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h -index 09e9538..c0371cd 100644 ---- a/src/cpu/cpu.h -+++ b/src/cpu/cpu.h -@@ -29,7 +29,7 @@ - # include "virarch.h" - # include "conf/cpu_conf.h" - # include "cpu_x86_data.h" --# include "cpu_ppc_data.h" -+# include "cpu_ppc64_data.h" - - - typedef struct _virCPUData virCPUData; -diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c -deleted file mode 100644 -index 733a0cd..0000000 ---- a/src/cpu/cpu_powerpc.c -+++ /dev/null -@@ -1,711 +0,0 @@ --/* -- * cpu_powerpc.c: CPU driver for PowerPC CPUs -- * -- * Copyright (C) 2013 Red Hat, Inc. -- * Copyright (C) IBM Corporation, 2010 -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2.1 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with this library. If not, see -- * . -- * -- * Authors: -- * Anton Blanchard -- * Prerna Saxena -- * Li Zhang -- */ -- --#include --#include -- --#include "virlog.h" --#include "viralloc.h" --#include "cpu.h" --#include "virstring.h" --#include "cpu_map.h" --#include "virbuffer.h" -- --#define VIR_FROM_THIS VIR_FROM_CPU -- --VIR_LOG_INIT("cpu.cpu_powerpc"); -- --static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE }; -- --struct ppc_vendor { -- char *name; -- struct ppc_vendor *next; --}; -- --struct ppc_model { -- char *name; -- const struct ppc_vendor *vendor; -- struct cpuPPCData data; -- struct ppc_model *next; --}; -- --struct ppc_map { -- struct ppc_vendor *vendors; -- struct ppc_model *models; --}; -- -- --static void --ppcModelFree(struct ppc_model *model) --{ -- if (model == NULL) -- return; -- -- VIR_FREE(model->name); -- VIR_FREE(model); --} -- --static struct ppc_model * --ppcModelFind(const struct ppc_map *map, -- const char *name) --{ -- struct ppc_model *model; -- -- model = map->models; -- while (model != NULL) { -- if (STREQ(model->name, name)) -- return model; -- -- model = model->next; -- } -- -- return NULL; --} -- --static struct ppc_model * --ppcModelFindPVR(const struct ppc_map *map, -- uint32_t pvr) --{ -- struct ppc_model *model; -- -- model = map->models; -- while (model != NULL) { -- if (model->data.pvr == pvr) -- return model; -- -- model = model->next; -- } -- -- /* PowerPC Processor Version Register is interpreted as follows : -- * Higher order 16 bits : Power ISA generation. -- * Lower order 16 bits : CPU chip version number. -- * If the exact CPU isn't found, return the nearest matching CPU generation -- */ -- if (pvr & 0x0000FFFFul) -- return ppcModelFindPVR(map, (pvr & 0xFFFF0000ul)); -- -- return NULL; --} -- --static struct ppc_model * --ppcModelCopy(const struct ppc_model *model) --{ -- struct ppc_model *copy; -- -- if (VIR_ALLOC(copy) < 0 || -- VIR_STRDUP(copy->name, model->name) < 0) { -- ppcModelFree(copy); -- return NULL; -- } -- -- copy->data.pvr = model->data.pvr; -- copy->vendor = model->vendor; -- -- return copy; --} -- --static struct ppc_vendor * --ppcVendorFind(const struct ppc_map *map, -- const char *name) --{ -- struct ppc_vendor *vendor; -- -- vendor = map->vendors; -- while (vendor) { -- if (STREQ(vendor->name, name)) -- return vendor; -- -- vendor = vendor->next; -- } -- -- return NULL; --} -- --static void --ppcVendorFree(struct ppc_vendor *vendor) --{ -- if (!vendor) -- return; -- -- VIR_FREE(vendor->name); -- VIR_FREE(vendor); --} -- --static struct ppc_model * --ppcModelFromCPU(const virCPUDef *cpu, -- const struct ppc_map *map) --{ -- struct ppc_model *model = NULL; -- -- if ((model = ppcModelFind(map, cpu->model)) == NULL) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Unknown CPU model %s"), cpu->model); -- goto error; -- } -- -- if ((model = ppcModelCopy(model)) == NULL) -- goto error; -- -- return model; -- -- error: -- ppcModelFree(model); -- return NULL; --} -- -- --static int --ppcVendorLoad(xmlXPathContextPtr ctxt, -- struct ppc_map *map) --{ -- struct ppc_vendor *vendor = NULL; -- -- if (VIR_ALLOC(vendor) < 0) -- return -1; -- -- vendor->name = virXPathString("string(@name)", ctxt); -- if (!vendor->name) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- "%s", _("Missing CPU vendor name")); -- goto ignore; -- } -- -- if (ppcVendorFind(map, vendor->name)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("CPU vendor %s already defined"), vendor->name); -- goto ignore; -- } -- -- if (!map->vendors) { -- map->vendors = vendor; -- } else { -- vendor->next = map->vendors; -- map->vendors = vendor; -- } -- -- cleanup: -- return 0; -- -- ignore: -- ppcVendorFree(vendor); -- goto cleanup; --} -- --static int --ppcModelLoad(xmlXPathContextPtr ctxt, -- struct ppc_map *map) --{ -- struct ppc_model *model; -- char *vendor = NULL; -- unsigned long pvr; -- -- if (VIR_ALLOC(model) < 0) -- return -1; -- -- model->name = virXPathString("string(@name)", ctxt); -- if (!model->name) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- "%s", _("Missing CPU model name")); -- goto ignore; -- } -- -- if (ppcModelFind(map, model->name)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("CPU model %s already defined"), model->name); -- goto ignore; -- } -- -- if (virXPathBoolean("boolean(./vendor)", ctxt)) { -- vendor = virXPathString("string(./vendor/@name)", ctxt); -- if (!vendor) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Invalid vendor element in CPU model %s"), -- model->name); -- goto ignore; -- } -- -- if (!(model->vendor = ppcVendorFind(map, vendor))) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Unknown vendor %s referenced by CPU model %s"), -- vendor, model->name); -- goto ignore; -- } -- } -- -- if (!virXPathBoolean("boolean(./pvr)", ctxt) || -- virXPathULongHex("string(./pvr/@value)", ctxt, &pvr) < 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Missing or invalid PVR value in CPU model %s"), -- model->name); -- goto ignore; -- } -- model->data.pvr = pvr; -- -- if (map->models == NULL) { -- map->models = model; -- } else { -- model->next = map->models; -- map->models = model; -- } -- -- cleanup: -- VIR_FREE(vendor); -- return 0; -- -- ignore: -- ppcModelFree(model); -- goto cleanup; --} -- --static int --ppcMapLoadCallback(cpuMapElement element, -- xmlXPathContextPtr ctxt, -- void *data) --{ -- struct ppc_map *map = data; -- -- switch (element) { -- case CPU_MAP_ELEMENT_VENDOR: -- return ppcVendorLoad(ctxt, map); -- case CPU_MAP_ELEMENT_MODEL: -- return ppcModelLoad(ctxt, map); -- case CPU_MAP_ELEMENT_FEATURE: -- case CPU_MAP_ELEMENT_LAST: -- break; -- } -- -- return 0; --} -- --static void --ppcMapFree(struct ppc_map *map) --{ -- if (map == NULL) -- return; -- -- while (map->models != NULL) { -- struct ppc_model *model = map->models; -- map->models = model->next; -- ppcModelFree(model); -- } -- -- while (map->vendors != NULL) { -- struct ppc_vendor *vendor = map->vendors; -- map->vendors = vendor->next; -- ppcVendorFree(vendor); -- } -- -- VIR_FREE(map); --} -- --static struct ppc_map * --ppcLoadMap(void) --{ -- struct ppc_map *map; -- -- if (VIR_ALLOC(map) < 0) -- return NULL; -- -- if (cpuMapLoad("ppc64", ppcMapLoadCallback, map) < 0) -- goto error; -- -- return map; -- -- error: -- ppcMapFree(map); -- return NULL; --} -- --static virCPUDataPtr --ppcMakeCPUData(virArch arch, struct cpuPPCData *data) --{ -- virCPUDataPtr cpuData; -- -- if (VIR_ALLOC(cpuData) < 0) -- return NULL; -- -- cpuData->arch = arch; -- cpuData->data.ppc = *data; -- data = NULL; -- -- return cpuData; --} -- --static virCPUCompareResult --ppcCompute(virCPUDefPtr host, -- const virCPUDef *cpu, -- virCPUDataPtr *guestData, -- char **message) -- --{ -- struct ppc_map *map = NULL; -- struct ppc_model *host_model = NULL; -- struct ppc_model *guest_model = NULL; -- -- virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR; -- virArch arch; -- size_t i; -- -- if (cpu->arch != VIR_ARCH_NONE) { -- bool found = false; -- -- for (i = 0; i < ARRAY_CARDINALITY(archs); i++) { -- if (archs[i] == cpu->arch) { -- found = true; -- break; -- } -- } -- -- if (!found) { -- VIR_DEBUG("CPU arch %s does not match host arch", -- virArchToString(cpu->arch)); -- if (message && -- virAsprintf(message, -- _("CPU arch %s does not match host arch"), -- virArchToString(cpu->arch)) < 0) -- goto cleanup; -- -- ret = VIR_CPU_COMPARE_INCOMPATIBLE; -- goto cleanup; -- } -- arch = cpu->arch; -- } else { -- arch = host->arch; -- } -- -- if (cpu->vendor && -- (!host->vendor || STRNEQ(cpu->vendor, host->vendor))) { -- VIR_DEBUG("host CPU vendor does not match required CPU vendor %s", -- cpu->vendor); -- if (message && -- virAsprintf(message, -- _("host CPU vendor does not match required " -- "CPU vendor %s"), -- cpu->vendor) < 0) -- goto cleanup; -- -- ret = VIR_CPU_COMPARE_INCOMPATIBLE; -- goto cleanup; -- } -- -- if (!(map = ppcLoadMap()) || -- !(host_model = ppcModelFromCPU(host, map)) || -- !(guest_model = ppcModelFromCPU(cpu, map))) -- goto cleanup; -- -- if (guestData != NULL) { -- if (cpu->type == VIR_CPU_TYPE_GUEST && -- cpu->match == VIR_CPU_MATCH_STRICT && -- STRNEQ(guest_model->name, host_model->name)) { -- VIR_DEBUG("host CPU model does not match required CPU model %s", -- guest_model->name); -- if (message && -- virAsprintf(message, -- _("host CPU model does not match required " -- "CPU model %s"), -- guest_model->name) < 0) -- goto cleanup; -- -- ret = VIR_CPU_COMPARE_INCOMPATIBLE; -- goto cleanup; -- } -- -- if (!(*guestData = ppcMakeCPUData(arch, &guest_model->data))) -- goto cleanup; -- } -- -- ret = VIR_CPU_COMPARE_IDENTICAL; -- -- cleanup: -- ppcMapFree(map); -- ppcModelFree(host_model); -- ppcModelFree(guest_model); -- return ret; --} -- --static virCPUCompareResult --ppcCompare(virCPUDefPtr host, -- virCPUDefPtr cpu, -- bool failIncompatible) --{ -- if ((cpu->arch == VIR_ARCH_NONE || host->arch == cpu->arch) && -- STREQ(host->model, cpu->model)) -- return VIR_CPU_COMPARE_IDENTICAL; -- -- if (failIncompatible) { -- virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); -- return VIR_CPU_COMPARE_ERROR; -- } else { -- return VIR_CPU_COMPARE_INCOMPATIBLE; -- } --} -- --static int --ppcDecode(virCPUDefPtr cpu, -- const virCPUData *data, -- const char **models, -- unsigned int nmodels, -- const char *preferred ATTRIBUTE_UNUSED, -- unsigned int flags) --{ -- int ret = -1; -- struct ppc_map *map; -- const struct ppc_model *model; -- -- virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, -1); -- -- if (data == NULL || (map = ppcLoadMap()) == NULL) -- return -1; -- -- if (!(model = ppcModelFindPVR(map, data->data.ppc.pvr))) { -- virReportError(VIR_ERR_OPERATION_FAILED, -- _("Cannot find CPU model with PVR 0x%08x"), -- data->data.ppc.pvr); -- goto cleanup; -- } -- -- if (!cpuModelIsAllowed(model->name, models, nmodels)) { -- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -- _("CPU model %s is not supported by hypervisor"), -- model->name); -- goto cleanup; -- } -- -- if (VIR_STRDUP(cpu->model, model->name) < 0 || -- (model->vendor && VIR_STRDUP(cpu->vendor, model->vendor->name) < 0)) { -- goto cleanup; -- } -- -- ret = 0; -- -- cleanup: -- ppcMapFree(map); -- -- return ret; --} -- -- --static void --ppcDataFree(virCPUDataPtr data) --{ -- if (data == NULL) -- return; -- -- VIR_FREE(data); --} -- --static virCPUDataPtr --ppcNodeData(virArch arch) --{ -- virCPUDataPtr cpuData; -- -- if (VIR_ALLOC(cpuData) < 0) -- return NULL; -- -- cpuData->arch = arch; -- --#if defined(__powerpc__) || defined(__powerpc64__) -- asm("mfpvr %0" -- : "=r" (cpuData->data.ppc.pvr)); --#endif -- -- return cpuData; --} -- --static virCPUCompareResult --ppcGuestData(virCPUDefPtr host, -- virCPUDefPtr guest, -- virCPUDataPtr *data, -- char **message) --{ -- return ppcCompute(host, guest, data, message); --} -- --static int --ppcUpdate(virCPUDefPtr guest, -- const virCPUDef *host) --{ -- switch ((virCPUMode) guest->mode) { -- case VIR_CPU_MODE_HOST_MODEL: -- case VIR_CPU_MODE_HOST_PASSTHROUGH: -- guest->match = VIR_CPU_MATCH_EXACT; -- virCPUDefFreeModel(guest); -- return virCPUDefCopyModel(guest, host, true); -- -- case VIR_CPU_MODE_CUSTOM: -- return 0; -- -- case VIR_CPU_MODE_LAST: -- break; -- } -- -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Unexpected CPU mode: %d"), guest->mode); -- return -1; --} -- --static virCPUDefPtr --ppcBaseline(virCPUDefPtr *cpus, -- unsigned int ncpus, -- const char **models ATTRIBUTE_UNUSED, -- unsigned int nmodels ATTRIBUTE_UNUSED, -- unsigned int flags) --{ -- struct ppc_map *map = NULL; -- const struct ppc_model *model; -- const struct ppc_vendor *vendor = NULL; -- virCPUDefPtr cpu = NULL; -- size_t i; -- -- virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES | -- VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL); -- -- if (!(map = ppcLoadMap())) -- goto error; -- -- if (!(model = ppcModelFind(map, cpus[0]->model))) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Unknown CPU model %s"), cpus[0]->model); -- goto error; -- } -- -- for (i = 0; i < ncpus; i++) { -- const struct ppc_vendor *vnd; -- -- if (STRNEQ(cpus[i]->model, model->name)) { -- virReportError(VIR_ERR_OPERATION_FAILED, "%s", -- _("CPUs are incompatible")); -- goto error; -- } -- -- if (!cpus[i]->vendor) -- continue; -- -- if (!(vnd = ppcVendorFind(map, cpus[i]->vendor))) { -- virReportError(VIR_ERR_OPERATION_FAILED, -- _("Unknown CPU vendor %s"), cpus[i]->vendor); -- goto error; -- } -- -- if (model->vendor) { -- if (model->vendor != vnd) { -- virReportError(VIR_ERR_OPERATION_FAILED, -- _("CPU vendor %s of model %s differs from " -- "vendor %s"), -- model->vendor->name, model->name, -- vnd->name); -- goto error; -- } -- } else if (vendor) { -- if (vendor != vnd) { -- virReportError(VIR_ERR_OPERATION_FAILED, "%s", -- _("CPU vendors do not match")); -- goto error; -- } -- } else { -- vendor = vnd; -- } -- } -- -- if (VIR_ALLOC(cpu) < 0 || -- VIR_STRDUP(cpu->model, model->name) < 0) -- goto error; -- -- if (vendor && VIR_STRDUP(cpu->vendor, vendor->name) < 0) -- goto error; -- -- cpu->type = VIR_CPU_TYPE_GUEST; -- cpu->match = VIR_CPU_MATCH_EXACT; -- -- cleanup: -- ppcMapFree(map); -- -- return cpu; -- -- error: -- virCPUDefFree(cpu); -- cpu = NULL; -- goto cleanup; --} -- --static int --ppcGetModels(char ***models) --{ -- struct ppc_map *map; -- struct ppc_model *model; -- char *name; -- size_t nmodels = 0; -- -- if (!(map = ppcLoadMap())) -- goto error; -- -- if (models && VIR_ALLOC_N(*models, 0) < 0) -- goto error; -- -- model = map->models; -- while (model != NULL) { -- if (models) { -- if (VIR_STRDUP(name, model->name) < 0) -- goto error; -- -- if (VIR_APPEND_ELEMENT(*models, nmodels, name) < 0) -- goto error; -- } else { -- nmodels++; -- } -- -- model = model->next; -- } -- -- cleanup: -- ppcMapFree(map); -- -- return nmodels; -- -- error: -- if (models) { -- virStringFreeList(*models); -- *models = NULL; -- } -- nmodels = -1; -- goto cleanup; --} -- --struct cpuArchDriver cpuDriverPowerPC = { -- .name = "ppc64", -- .arch = archs, -- .narch = ARRAY_CARDINALITY(archs), -- .compare = ppcCompare, -- .decode = ppcDecode, -- .encode = NULL, -- .free = ppcDataFree, -- .nodeData = ppcNodeData, -- .guestData = ppcGuestData, -- .baseline = ppcBaseline, -- .update = ppcUpdate, -- .hasFeature = NULL, -- .getModels = ppcGetModels, --}; -diff --git a/src/cpu/cpu_powerpc.h b/src/cpu/cpu_powerpc.h -deleted file mode 100644 -index 312886e..0000000 ---- a/src/cpu/cpu_powerpc.h -+++ /dev/null -@@ -1,32 +0,0 @@ --/* -- * cpu_powerpc.h: CPU driver for PowerPC CPUs -- * -- * Copyright (C) Copyright (C) IBM Corporation, 2010 -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2.1 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with this library. If not, see -- * . -- * -- * Authors: -- * Anton Blanchard -- * Prerna Saxena -- */ -- --#ifndef __VIR_CPU_POWERPC_H__ --# define __VIR_CPU_POWERPC_H__ -- --# include "cpu.h" -- --extern struct cpuArchDriver cpuDriverPowerPC; -- --#endif /* __VIR_CPU_POWERPC_H__ */ -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -new file mode 100644 -index 0000000..7866bdd ---- /dev/null -+++ b/src/cpu/cpu_ppc64.c -@@ -0,0 +1,711 @@ -+/* -+ * cpu_ppc64.c: CPU driver for PowerPC CPUs -+ * -+ * Copyright (C) 2013 Red Hat, Inc. -+ * Copyright (C) IBM Corporation, 2010 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see -+ * . -+ * -+ * Authors: -+ * Anton Blanchard -+ * Prerna Saxena -+ * Li Zhang -+ */ -+ -+#include -+#include -+ -+#include "virlog.h" -+#include "viralloc.h" -+#include "cpu.h" -+#include "virstring.h" -+#include "cpu_map.h" -+#include "virbuffer.h" -+ -+#define VIR_FROM_THIS VIR_FROM_CPU -+ -+VIR_LOG_INIT("cpu.cpu_powerpc"); -+ -+static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE }; -+ -+struct ppc_vendor { -+ char *name; -+ struct ppc_vendor *next; -+}; -+ -+struct ppc_model { -+ char *name; -+ const struct ppc_vendor *vendor; -+ struct cpuPPCData data; -+ struct ppc_model *next; -+}; -+ -+struct ppc_map { -+ struct ppc_vendor *vendors; -+ struct ppc_model *models; -+}; -+ -+ -+static void -+ppcModelFree(struct ppc_model *model) -+{ -+ if (model == NULL) -+ return; -+ -+ VIR_FREE(model->name); -+ VIR_FREE(model); -+} -+ -+static struct ppc_model * -+ppcModelFind(const struct ppc_map *map, -+ const char *name) -+{ -+ struct ppc_model *model; -+ -+ model = map->models; -+ while (model != NULL) { -+ if (STREQ(model->name, name)) -+ return model; -+ -+ model = model->next; -+ } -+ -+ return NULL; -+} -+ -+static struct ppc_model * -+ppcModelFindPVR(const struct ppc_map *map, -+ uint32_t pvr) -+{ -+ struct ppc_model *model; -+ -+ model = map->models; -+ while (model != NULL) { -+ if (model->data.pvr == pvr) -+ return model; -+ -+ model = model->next; -+ } -+ -+ /* PowerPC Processor Version Register is interpreted as follows : -+ * Higher order 16 bits : Power ISA generation. -+ * Lower order 16 bits : CPU chip version number. -+ * If the exact CPU isn't found, return the nearest matching CPU generation -+ */ -+ if (pvr & 0x0000FFFFul) -+ return ppcModelFindPVR(map, (pvr & 0xFFFF0000ul)); -+ -+ return NULL; -+} -+ -+static struct ppc_model * -+ppcModelCopy(const struct ppc_model *model) -+{ -+ struct ppc_model *copy; -+ -+ if (VIR_ALLOC(copy) < 0 || -+ VIR_STRDUP(copy->name, model->name) < 0) { -+ ppcModelFree(copy); -+ return NULL; -+ } -+ -+ copy->data.pvr = model->data.pvr; -+ copy->vendor = model->vendor; -+ -+ return copy; -+} -+ -+static struct ppc_vendor * -+ppcVendorFind(const struct ppc_map *map, -+ const char *name) -+{ -+ struct ppc_vendor *vendor; -+ -+ vendor = map->vendors; -+ while (vendor) { -+ if (STREQ(vendor->name, name)) -+ return vendor; -+ -+ vendor = vendor->next; -+ } -+ -+ return NULL; -+} -+ -+static void -+ppcVendorFree(struct ppc_vendor *vendor) -+{ -+ if (!vendor) -+ return; -+ -+ VIR_FREE(vendor->name); -+ VIR_FREE(vendor); -+} -+ -+static struct ppc_model * -+ppcModelFromCPU(const virCPUDef *cpu, -+ const struct ppc_map *map) -+{ -+ struct ppc_model *model = NULL; -+ -+ if ((model = ppcModelFind(map, cpu->model)) == NULL) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unknown CPU model %s"), cpu->model); -+ goto error; -+ } -+ -+ if ((model = ppcModelCopy(model)) == NULL) -+ goto error; -+ -+ return model; -+ -+ error: -+ ppcModelFree(model); -+ return NULL; -+} -+ -+ -+static int -+ppcVendorLoad(xmlXPathContextPtr ctxt, -+ struct ppc_map *map) -+{ -+ struct ppc_vendor *vendor = NULL; -+ -+ if (VIR_ALLOC(vendor) < 0) -+ return -1; -+ -+ vendor->name = virXPathString("string(@name)", ctxt); -+ if (!vendor->name) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ "%s", _("Missing CPU vendor name")); -+ goto ignore; -+ } -+ -+ if (ppcVendorFind(map, vendor->name)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("CPU vendor %s already defined"), vendor->name); -+ goto ignore; -+ } -+ -+ if (!map->vendors) { -+ map->vendors = vendor; -+ } else { -+ vendor->next = map->vendors; -+ map->vendors = vendor; -+ } -+ -+ cleanup: -+ return 0; -+ -+ ignore: -+ ppcVendorFree(vendor); -+ goto cleanup; -+} -+ -+static int -+ppcModelLoad(xmlXPathContextPtr ctxt, -+ struct ppc_map *map) -+{ -+ struct ppc_model *model; -+ char *vendor = NULL; -+ unsigned long pvr; -+ -+ if (VIR_ALLOC(model) < 0) -+ return -1; -+ -+ model->name = virXPathString("string(@name)", ctxt); -+ if (!model->name) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ "%s", _("Missing CPU model name")); -+ goto ignore; -+ } -+ -+ if (ppcModelFind(map, model->name)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("CPU model %s already defined"), model->name); -+ goto ignore; -+ } -+ -+ if (virXPathBoolean("boolean(./vendor)", ctxt)) { -+ vendor = virXPathString("string(./vendor/@name)", ctxt); -+ if (!vendor) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Invalid vendor element in CPU model %s"), -+ model->name); -+ goto ignore; -+ } -+ -+ if (!(model->vendor = ppcVendorFind(map, vendor))) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unknown vendor %s referenced by CPU model %s"), -+ vendor, model->name); -+ goto ignore; -+ } -+ } -+ -+ if (!virXPathBoolean("boolean(./pvr)", ctxt) || -+ virXPathULongHex("string(./pvr/@value)", ctxt, &pvr) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Missing or invalid PVR value in CPU model %s"), -+ model->name); -+ goto ignore; -+ } -+ model->data.pvr = pvr; -+ -+ if (map->models == NULL) { -+ map->models = model; -+ } else { -+ model->next = map->models; -+ map->models = model; -+ } -+ -+ cleanup: -+ VIR_FREE(vendor); -+ return 0; -+ -+ ignore: -+ ppcModelFree(model); -+ goto cleanup; -+} -+ -+static int -+ppcMapLoadCallback(cpuMapElement element, -+ xmlXPathContextPtr ctxt, -+ void *data) -+{ -+ struct ppc_map *map = data; -+ -+ switch (element) { -+ case CPU_MAP_ELEMENT_VENDOR: -+ return ppcVendorLoad(ctxt, map); -+ case CPU_MAP_ELEMENT_MODEL: -+ return ppcModelLoad(ctxt, map); -+ case CPU_MAP_ELEMENT_FEATURE: -+ case CPU_MAP_ELEMENT_LAST: -+ break; -+ } -+ -+ return 0; -+} -+ -+static void -+ppcMapFree(struct ppc_map *map) -+{ -+ if (map == NULL) -+ return; -+ -+ while (map->models != NULL) { -+ struct ppc_model *model = map->models; -+ map->models = model->next; -+ ppcModelFree(model); -+ } -+ -+ while (map->vendors != NULL) { -+ struct ppc_vendor *vendor = map->vendors; -+ map->vendors = vendor->next; -+ ppcVendorFree(vendor); -+ } -+ -+ VIR_FREE(map); -+} -+ -+static struct ppc_map * -+ppcLoadMap(void) -+{ -+ struct ppc_map *map; -+ -+ if (VIR_ALLOC(map) < 0) -+ return NULL; -+ -+ if (cpuMapLoad("ppc64", ppcMapLoadCallback, map) < 0) -+ goto error; -+ -+ return map; -+ -+ error: -+ ppcMapFree(map); -+ return NULL; -+} -+ -+static virCPUDataPtr -+ppcMakeCPUData(virArch arch, struct cpuPPCData *data) -+{ -+ virCPUDataPtr cpuData; -+ -+ if (VIR_ALLOC(cpuData) < 0) -+ return NULL; -+ -+ cpuData->arch = arch; -+ cpuData->data.ppc = *data; -+ data = NULL; -+ -+ return cpuData; -+} -+ -+static virCPUCompareResult -+ppcCompute(virCPUDefPtr host, -+ const virCPUDef *cpu, -+ virCPUDataPtr *guestData, -+ char **message) -+ -+{ -+ struct ppc_map *map = NULL; -+ struct ppc_model *host_model = NULL; -+ struct ppc_model *guest_model = NULL; -+ -+ virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR; -+ virArch arch; -+ size_t i; -+ -+ if (cpu->arch != VIR_ARCH_NONE) { -+ bool found = false; -+ -+ for (i = 0; i < ARRAY_CARDINALITY(archs); i++) { -+ if (archs[i] == cpu->arch) { -+ found = true; -+ break; -+ } -+ } -+ -+ if (!found) { -+ VIR_DEBUG("CPU arch %s does not match host arch", -+ virArchToString(cpu->arch)); -+ if (message && -+ virAsprintf(message, -+ _("CPU arch %s does not match host arch"), -+ virArchToString(cpu->arch)) < 0) -+ goto cleanup; -+ -+ ret = VIR_CPU_COMPARE_INCOMPATIBLE; -+ goto cleanup; -+ } -+ arch = cpu->arch; -+ } else { -+ arch = host->arch; -+ } -+ -+ if (cpu->vendor && -+ (!host->vendor || STRNEQ(cpu->vendor, host->vendor))) { -+ VIR_DEBUG("host CPU vendor does not match required CPU vendor %s", -+ cpu->vendor); -+ if (message && -+ virAsprintf(message, -+ _("host CPU vendor does not match required " -+ "CPU vendor %s"), -+ cpu->vendor) < 0) -+ goto cleanup; -+ -+ ret = VIR_CPU_COMPARE_INCOMPATIBLE; -+ goto cleanup; -+ } -+ -+ if (!(map = ppcLoadMap()) || -+ !(host_model = ppcModelFromCPU(host, map)) || -+ !(guest_model = ppcModelFromCPU(cpu, map))) -+ goto cleanup; -+ -+ if (guestData != NULL) { -+ if (cpu->type == VIR_CPU_TYPE_GUEST && -+ cpu->match == VIR_CPU_MATCH_STRICT && -+ STRNEQ(guest_model->name, host_model->name)) { -+ VIR_DEBUG("host CPU model does not match required CPU model %s", -+ guest_model->name); -+ if (message && -+ virAsprintf(message, -+ _("host CPU model does not match required " -+ "CPU model %s"), -+ guest_model->name) < 0) -+ goto cleanup; -+ -+ ret = VIR_CPU_COMPARE_INCOMPATIBLE; -+ goto cleanup; -+ } -+ -+ if (!(*guestData = ppcMakeCPUData(arch, &guest_model->data))) -+ goto cleanup; -+ } -+ -+ ret = VIR_CPU_COMPARE_IDENTICAL; -+ -+ cleanup: -+ ppcMapFree(map); -+ ppcModelFree(host_model); -+ ppcModelFree(guest_model); -+ return ret; -+} -+ -+static virCPUCompareResult -+ppcCompare(virCPUDefPtr host, -+ virCPUDefPtr cpu, -+ bool failIncompatible) -+{ -+ if ((cpu->arch == VIR_ARCH_NONE || host->arch == cpu->arch) && -+ STREQ(host->model, cpu->model)) -+ return VIR_CPU_COMPARE_IDENTICAL; -+ -+ if (failIncompatible) { -+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); -+ return VIR_CPU_COMPARE_ERROR; -+ } else { -+ return VIR_CPU_COMPARE_INCOMPATIBLE; -+ } -+} -+ -+static int -+ppcDecode(virCPUDefPtr cpu, -+ const virCPUData *data, -+ const char **models, -+ unsigned int nmodels, -+ const char *preferred ATTRIBUTE_UNUSED, -+ unsigned int flags) -+{ -+ int ret = -1; -+ struct ppc_map *map; -+ const struct ppc_model *model; -+ -+ virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, -1); -+ -+ if (data == NULL || (map = ppcLoadMap()) == NULL) -+ return -1; -+ -+ if (!(model = ppcModelFindPVR(map, data->data.ppc.pvr))) { -+ virReportError(VIR_ERR_OPERATION_FAILED, -+ _("Cannot find CPU model with PVR 0x%08x"), -+ data->data.ppc.pvr); -+ goto cleanup; -+ } -+ -+ if (!cpuModelIsAllowed(model->name, models, nmodels)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("CPU model %s is not supported by hypervisor"), -+ model->name); -+ goto cleanup; -+ } -+ -+ if (VIR_STRDUP(cpu->model, model->name) < 0 || -+ (model->vendor && VIR_STRDUP(cpu->vendor, model->vendor->name) < 0)) { -+ goto cleanup; -+ } -+ -+ ret = 0; -+ -+ cleanup: -+ ppcMapFree(map); -+ -+ return ret; -+} -+ -+ -+static void -+ppcDataFree(virCPUDataPtr data) -+{ -+ if (data == NULL) -+ return; -+ -+ VIR_FREE(data); -+} -+ -+static virCPUDataPtr -+ppcNodeData(virArch arch) -+{ -+ virCPUDataPtr cpuData; -+ -+ if (VIR_ALLOC(cpuData) < 0) -+ return NULL; -+ -+ cpuData->arch = arch; -+ -+#if defined(__powerpc__) || defined(__powerpc64__) -+ asm("mfpvr %0" -+ : "=r" (cpuData->data.ppc.pvr)); -+#endif -+ -+ return cpuData; -+} -+ -+static virCPUCompareResult -+ppcGuestData(virCPUDefPtr host, -+ virCPUDefPtr guest, -+ virCPUDataPtr *data, -+ char **message) -+{ -+ return ppcCompute(host, guest, data, message); -+} -+ -+static int -+ppcUpdate(virCPUDefPtr guest, -+ const virCPUDef *host) -+{ -+ switch ((virCPUMode) guest->mode) { -+ case VIR_CPU_MODE_HOST_MODEL: -+ case VIR_CPU_MODE_HOST_PASSTHROUGH: -+ guest->match = VIR_CPU_MATCH_EXACT; -+ virCPUDefFreeModel(guest); -+ return virCPUDefCopyModel(guest, host, true); -+ -+ case VIR_CPU_MODE_CUSTOM: -+ return 0; -+ -+ case VIR_CPU_MODE_LAST: -+ break; -+ } -+ -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unexpected CPU mode: %d"), guest->mode); -+ return -1; -+} -+ -+static virCPUDefPtr -+ppcBaseline(virCPUDefPtr *cpus, -+ unsigned int ncpus, -+ const char **models ATTRIBUTE_UNUSED, -+ unsigned int nmodels ATTRIBUTE_UNUSED, -+ unsigned int flags) -+{ -+ struct ppc_map *map = NULL; -+ const struct ppc_model *model; -+ const struct ppc_vendor *vendor = NULL; -+ virCPUDefPtr cpu = NULL; -+ size_t i; -+ -+ virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES | -+ VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL); -+ -+ if (!(map = ppcLoadMap())) -+ goto error; -+ -+ if (!(model = ppcModelFind(map, cpus[0]->model))) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unknown CPU model %s"), cpus[0]->model); -+ goto error; -+ } -+ -+ for (i = 0; i < ncpus; i++) { -+ const struct ppc_vendor *vnd; -+ -+ if (STRNEQ(cpus[i]->model, model->name)) { -+ virReportError(VIR_ERR_OPERATION_FAILED, "%s", -+ _("CPUs are incompatible")); -+ goto error; -+ } -+ -+ if (!cpus[i]->vendor) -+ continue; -+ -+ if (!(vnd = ppcVendorFind(map, cpus[i]->vendor))) { -+ virReportError(VIR_ERR_OPERATION_FAILED, -+ _("Unknown CPU vendor %s"), cpus[i]->vendor); -+ goto error; -+ } -+ -+ if (model->vendor) { -+ if (model->vendor != vnd) { -+ virReportError(VIR_ERR_OPERATION_FAILED, -+ _("CPU vendor %s of model %s differs from " -+ "vendor %s"), -+ model->vendor->name, model->name, -+ vnd->name); -+ goto error; -+ } -+ } else if (vendor) { -+ if (vendor != vnd) { -+ virReportError(VIR_ERR_OPERATION_FAILED, "%s", -+ _("CPU vendors do not match")); -+ goto error; -+ } -+ } else { -+ vendor = vnd; -+ } -+ } -+ -+ if (VIR_ALLOC(cpu) < 0 || -+ VIR_STRDUP(cpu->model, model->name) < 0) -+ goto error; -+ -+ if (vendor && VIR_STRDUP(cpu->vendor, vendor->name) < 0) -+ goto error; -+ -+ cpu->type = VIR_CPU_TYPE_GUEST; -+ cpu->match = VIR_CPU_MATCH_EXACT; -+ -+ cleanup: -+ ppcMapFree(map); -+ -+ return cpu; -+ -+ error: -+ virCPUDefFree(cpu); -+ cpu = NULL; -+ goto cleanup; -+} -+ -+static int -+ppcGetModels(char ***models) -+{ -+ struct ppc_map *map; -+ struct ppc_model *model; -+ char *name; -+ size_t nmodels = 0; -+ -+ if (!(map = ppcLoadMap())) -+ goto error; -+ -+ if (models && VIR_ALLOC_N(*models, 0) < 0) -+ goto error; -+ -+ model = map->models; -+ while (model != NULL) { -+ if (models) { -+ if (VIR_STRDUP(name, model->name) < 0) -+ goto error; -+ -+ if (VIR_APPEND_ELEMENT(*models, nmodels, name) < 0) -+ goto error; -+ } else { -+ nmodels++; -+ } -+ -+ model = model->next; -+ } -+ -+ cleanup: -+ ppcMapFree(map); -+ -+ return nmodels; -+ -+ error: -+ if (models) { -+ virStringFreeList(*models); -+ *models = NULL; -+ } -+ nmodels = -1; -+ goto cleanup; -+} -+ -+struct cpuArchDriver cpuDriverPowerPC = { -+ .name = "ppc64", -+ .arch = archs, -+ .narch = ARRAY_CARDINALITY(archs), -+ .compare = ppcCompare, -+ .decode = ppcDecode, -+ .encode = NULL, -+ .free = ppcDataFree, -+ .nodeData = ppcNodeData, -+ .guestData = ppcGuestData, -+ .baseline = ppcBaseline, -+ .update = ppcUpdate, -+ .hasFeature = NULL, -+ .getModels = ppcGetModels, -+}; -diff --git a/src/cpu/cpu_ppc64.h b/src/cpu/cpu_ppc64.h -new file mode 100644 -index 0000000..e9ef2be ---- /dev/null -+++ b/src/cpu/cpu_ppc64.h -@@ -0,0 +1,32 @@ -+/* -+ * cpu_ppc64.h: CPU driver for PowerPC CPUs -+ * -+ * Copyright (C) Copyright (C) IBM Corporation, 2010 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see -+ * . -+ * -+ * Authors: -+ * Anton Blanchard -+ * Prerna Saxena -+ */ -+ -+#ifndef __VIR_CPU_POWERPC_H__ -+# define __VIR_CPU_POWERPC_H__ -+ -+# include "cpu.h" -+ -+extern struct cpuArchDriver cpuDriverPowerPC; -+ -+#endif /* __VIR_CPU_POWERPC_H__ */ -diff --git a/src/cpu/cpu_ppc64_data.h b/src/cpu/cpu_ppc64_data.h -new file mode 100644 -index 0000000..a70b099 ---- /dev/null -+++ b/src/cpu/cpu_ppc64_data.h -@@ -0,0 +1,33 @@ -+/* -+ * cpu_ppc64_data.h: PowerPC specific CPU data -+ * -+ * Copyright (C) 2012 IBM Corporation. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; If not, see -+ * . -+ * -+ * Authors: -+ * Li Zhang -+ */ -+ -+#ifndef __VIR_CPU_PPC_DATA_H__ -+# define __VIR_CPU_PPC_DATA_H__ -+ -+# include -+ -+struct cpuPPCData { -+ uint32_t pvr; -+}; -+ -+#endif /* __VIR_CPU_PPC_DATA_H__ */ -diff --git a/src/cpu/cpu_ppc_data.h b/src/cpu/cpu_ppc_data.h -deleted file mode 100644 -index 685332a..0000000 ---- a/src/cpu/cpu_ppc_data.h -+++ /dev/null -@@ -1,33 +0,0 @@ --/* -- * cpu_ppc_data.h: PowerPC specific CPU data -- * -- * Copyright (C) 2012 IBM Corporation. -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2.1 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with this library; If not, see -- * . -- * -- * Authors: -- * Li Zhang -- */ -- --#ifndef __VIR_CPU_PPC_DATA_H__ --# define __VIR_CPU_PPC_DATA_H__ -- --# include -- --struct cpuPPCData { -- uint32_t pvr; --}; -- --#endif /* __VIR_CPU_PPC_DATA_H__ */ --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-internal-symbols.patch b/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-internal-symbols.patch deleted file mode 100644 index 0c55e9e..0000000 --- a/SOURCES/libvirt-cpu-Rename-powerpc-ppc-ppc64-internal-symbols.patch +++ /dev/null @@ -1,590 +0,0 @@ -From e59a9b1e5c000a9c20b8af6cce57bffb9c92221f Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:51 +0200 -Subject: [PATCH] cpu: Rename {powerpc, ppc} => ppc64 (internal symbols) - -Update the names of the symbols used internally by the driver. - -No functional changes. - -(cherry picked from commit 3d1515890b8c3630bc7d4c865f3309c154ade174) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 250 ++++++++++++++++++++++++++-------------------------- - 1 file changed, 125 insertions(+), 125 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index bec4bf8..7a48903 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -40,26 +40,26 @@ VIR_LOG_INIT("cpu.cpu_ppc64"); - - static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE }; - --struct ppc_vendor { -+struct ppc64_vendor { - char *name; -- struct ppc_vendor *next; -+ struct ppc64_vendor *next; - }; - --struct ppc_model { -+struct ppc64_model { - char *name; -- const struct ppc_vendor *vendor; -+ const struct ppc64_vendor *vendor; - struct cpuPPC64Data data; -- struct ppc_model *next; -+ struct ppc64_model *next; - }; - --struct ppc_map { -- struct ppc_vendor *vendors; -- struct ppc_model *models; -+struct ppc64_map { -+ struct ppc64_vendor *vendors; -+ struct ppc64_model *models; - }; - - - static void --ppcModelFree(struct ppc_model *model) -+ppc64ModelFree(struct ppc64_model *model) - { - if (model == NULL) - return; -@@ -68,11 +68,11 @@ ppcModelFree(struct ppc_model *model) - VIR_FREE(model); - } - --static struct ppc_model * --ppcModelFind(const struct ppc_map *map, -- const char *name) -+static struct ppc64_model * -+ppc64ModelFind(const struct ppc64_map *map, -+ const char *name) - { -- struct ppc_model *model; -+ struct ppc64_model *model; - - model = map->models; - while (model != NULL) { -@@ -85,11 +85,11 @@ ppcModelFind(const struct ppc_map *map, - return NULL; - } - --static struct ppc_model * --ppcModelFindPVR(const struct ppc_map *map, -- uint32_t pvr) -+static struct ppc64_model * -+ppc64ModelFindPVR(const struct ppc64_map *map, -+ uint32_t pvr) - { -- struct ppc_model *model; -+ struct ppc64_model *model; - - model = map->models; - while (model != NULL) { -@@ -105,19 +105,19 @@ ppcModelFindPVR(const struct ppc_map *map, - * If the exact CPU isn't found, return the nearest matching CPU generation - */ - if (pvr & 0x0000FFFFul) -- return ppcModelFindPVR(map, (pvr & 0xFFFF0000ul)); -+ return ppc64ModelFindPVR(map, (pvr & 0xFFFF0000ul)); - - return NULL; - } - --static struct ppc_model * --ppcModelCopy(const struct ppc_model *model) -+static struct ppc64_model * -+ppc64ModelCopy(const struct ppc64_model *model) - { -- struct ppc_model *copy; -+ struct ppc64_model *copy; - - if (VIR_ALLOC(copy) < 0 || - VIR_STRDUP(copy->name, model->name) < 0) { -- ppcModelFree(copy); -+ ppc64ModelFree(copy); - return NULL; - } - -@@ -127,11 +127,11 @@ ppcModelCopy(const struct ppc_model *model) - return copy; - } - --static struct ppc_vendor * --ppcVendorFind(const struct ppc_map *map, -- const char *name) -+static struct ppc64_vendor * -+ppc64VendorFind(const struct ppc64_map *map, -+ const char *name) - { -- struct ppc_vendor *vendor; -+ struct ppc64_vendor *vendor; - - vendor = map->vendors; - while (vendor) { -@@ -145,7 +145,7 @@ ppcVendorFind(const struct ppc_map *map, - } - - static void --ppcVendorFree(struct ppc_vendor *vendor) -+ppc64VendorFree(struct ppc64_vendor *vendor) - { - if (!vendor) - return; -@@ -154,34 +154,34 @@ ppcVendorFree(struct ppc_vendor *vendor) - VIR_FREE(vendor); - } - --static struct ppc_model * --ppcModelFromCPU(const virCPUDef *cpu, -- const struct ppc_map *map) -+static struct ppc64_model * -+ppc64ModelFromCPU(const virCPUDef *cpu, -+ const struct ppc64_map *map) - { -- struct ppc_model *model = NULL; -+ struct ppc64_model *model = NULL; - -- if ((model = ppcModelFind(map, cpu->model)) == NULL) { -+ if ((model = ppc64ModelFind(map, cpu->model)) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown CPU model %s"), cpu->model); - goto error; - } - -- if ((model = ppcModelCopy(model)) == NULL) -+ if ((model = ppc64ModelCopy(model)) == NULL) - goto error; - - return model; - - error: -- ppcModelFree(model); -+ ppc64ModelFree(model); - return NULL; - } - - - static int --ppcVendorLoad(xmlXPathContextPtr ctxt, -- struct ppc_map *map) -+ppc64VendorLoad(xmlXPathContextPtr ctxt, -+ struct ppc64_map *map) - { -- struct ppc_vendor *vendor = NULL; -+ struct ppc64_vendor *vendor = NULL; - - if (VIR_ALLOC(vendor) < 0) - return -1; -@@ -193,7 +193,7 @@ ppcVendorLoad(xmlXPathContextPtr ctxt, - goto ignore; - } - -- if (ppcVendorFind(map, vendor->name)) { -+ if (ppc64VendorFind(map, vendor->name)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("CPU vendor %s already defined"), vendor->name); - goto ignore; -@@ -210,15 +210,15 @@ ppcVendorLoad(xmlXPathContextPtr ctxt, - return 0; - - ignore: -- ppcVendorFree(vendor); -+ ppc64VendorFree(vendor); - goto cleanup; - } - - static int --ppcModelLoad(xmlXPathContextPtr ctxt, -- struct ppc_map *map) -+ppc64ModelLoad(xmlXPathContextPtr ctxt, -+ struct ppc64_map *map) - { -- struct ppc_model *model; -+ struct ppc64_model *model; - char *vendor = NULL; - unsigned long pvr; - -@@ -232,7 +232,7 @@ ppcModelLoad(xmlXPathContextPtr ctxt, - goto ignore; - } - -- if (ppcModelFind(map, model->name)) { -+ if (ppc64ModelFind(map, model->name)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("CPU model %s already defined"), model->name); - goto ignore; -@@ -247,7 +247,7 @@ ppcModelLoad(xmlXPathContextPtr ctxt, - goto ignore; - } - -- if (!(model->vendor = ppcVendorFind(map, vendor))) { -+ if (!(model->vendor = ppc64VendorFind(map, vendor))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown vendor %s referenced by CPU model %s"), - vendor, model->name); -@@ -276,22 +276,22 @@ ppcModelLoad(xmlXPathContextPtr ctxt, - return 0; - - ignore: -- ppcModelFree(model); -+ ppc64ModelFree(model); - goto cleanup; - } - - static int --ppcMapLoadCallback(cpuMapElement element, -- xmlXPathContextPtr ctxt, -- void *data) -+ppc64MapLoadCallback(cpuMapElement element, -+ xmlXPathContextPtr ctxt, -+ void *data) - { -- struct ppc_map *map = data; -+ struct ppc64_map *map = data; - - switch (element) { - case CPU_MAP_ELEMENT_VENDOR: -- return ppcVendorLoad(ctxt, map); -+ return ppc64VendorLoad(ctxt, map); - case CPU_MAP_ELEMENT_MODEL: -- return ppcModelLoad(ctxt, map); -+ return ppc64ModelLoad(ctxt, map); - case CPU_MAP_ELEMENT_FEATURE: - case CPU_MAP_ELEMENT_LAST: - break; -@@ -301,46 +301,46 @@ ppcMapLoadCallback(cpuMapElement element, - } - - static void --ppcMapFree(struct ppc_map *map) -+ppc64MapFree(struct ppc64_map *map) - { - if (map == NULL) - return; - - while (map->models != NULL) { -- struct ppc_model *model = map->models; -+ struct ppc64_model *model = map->models; - map->models = model->next; -- ppcModelFree(model); -+ ppc64ModelFree(model); - } - - while (map->vendors != NULL) { -- struct ppc_vendor *vendor = map->vendors; -+ struct ppc64_vendor *vendor = map->vendors; - map->vendors = vendor->next; -- ppcVendorFree(vendor); -+ ppc64VendorFree(vendor); - } - - VIR_FREE(map); - } - --static struct ppc_map * --ppcLoadMap(void) -+static struct ppc64_map * -+ppc64LoadMap(void) - { -- struct ppc_map *map; -+ struct ppc64_map *map; - - if (VIR_ALLOC(map) < 0) - return NULL; - -- if (cpuMapLoad("ppc64", ppcMapLoadCallback, map) < 0) -+ if (cpuMapLoad("ppc64", ppc64MapLoadCallback, map) < 0) - goto error; - - return map; - - error: -- ppcMapFree(map); -+ ppc64MapFree(map); - return NULL; - } - - static virCPUDataPtr --ppcMakeCPUData(virArch arch, struct cpuPPC64Data *data) -+ppc64MakeCPUData(virArch arch, struct cpuPPC64Data *data) - { - virCPUDataPtr cpuData; - -@@ -355,15 +355,15 @@ ppcMakeCPUData(virArch arch, struct cpuPPC64Data *data) - } - - static virCPUCompareResult --ppcCompute(virCPUDefPtr host, -- const virCPUDef *cpu, -- virCPUDataPtr *guestData, -- char **message) -+ppc64Compute(virCPUDefPtr host, -+ const virCPUDef *cpu, -+ virCPUDataPtr *guestData, -+ char **message) - - { -- struct ppc_map *map = NULL; -- struct ppc_model *host_model = NULL; -- struct ppc_model *guest_model = NULL; -+ struct ppc64_map *map = NULL; -+ struct ppc64_model *host_model = NULL; -+ struct ppc64_model *guest_model = NULL; - - virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR; - virArch arch; -@@ -411,9 +411,9 @@ ppcCompute(virCPUDefPtr host, - goto cleanup; - } - -- if (!(map = ppcLoadMap()) || -- !(host_model = ppcModelFromCPU(host, map)) || -- !(guest_model = ppcModelFromCPU(cpu, map))) -+ if (!(map = ppc64LoadMap()) || -+ !(host_model = ppc64ModelFromCPU(host, map)) || -+ !(guest_model = ppc64ModelFromCPU(cpu, map))) - goto cleanup; - - if (guestData != NULL) { -@@ -433,23 +433,23 @@ ppcCompute(virCPUDefPtr host, - goto cleanup; - } - -- if (!(*guestData = ppcMakeCPUData(arch, &guest_model->data))) -+ if (!(*guestData = ppc64MakeCPUData(arch, &guest_model->data))) - goto cleanup; - } - - ret = VIR_CPU_COMPARE_IDENTICAL; - - cleanup: -- ppcMapFree(map); -- ppcModelFree(host_model); -- ppcModelFree(guest_model); -+ ppc64MapFree(map); -+ ppc64ModelFree(host_model); -+ ppc64ModelFree(guest_model); - return ret; - } - - static virCPUCompareResult --ppcCompare(virCPUDefPtr host, -- virCPUDefPtr cpu, -- bool failIncompatible) -+ppc64Compare(virCPUDefPtr host, -+ virCPUDefPtr cpu, -+ bool failIncompatible) - { - if ((cpu->arch == VIR_ARCH_NONE || host->arch == cpu->arch) && - STREQ(host->model, cpu->model)) -@@ -464,23 +464,23 @@ ppcCompare(virCPUDefPtr host, - } - - static int --ppcDecode(virCPUDefPtr cpu, -- const virCPUData *data, -- const char **models, -- unsigned int nmodels, -- const char *preferred ATTRIBUTE_UNUSED, -- unsigned int flags) -+ppc64Decode(virCPUDefPtr cpu, -+ const virCPUData *data, -+ const char **models, -+ unsigned int nmodels, -+ const char *preferred ATTRIBUTE_UNUSED, -+ unsigned int flags) - { - int ret = -1; -- struct ppc_map *map; -- const struct ppc_model *model; -+ struct ppc64_map *map; -+ const struct ppc64_model *model; - - virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, -1); - -- if (data == NULL || (map = ppcLoadMap()) == NULL) -+ if (data == NULL || (map = ppc64LoadMap()) == NULL) - return -1; - -- if (!(model = ppcModelFindPVR(map, data->data.ppc64.pvr))) { -+ if (!(model = ppc64ModelFindPVR(map, data->data.ppc64.pvr))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Cannot find CPU model with PVR 0x%08x"), - data->data.ppc64.pvr); -@@ -502,14 +502,14 @@ ppcDecode(virCPUDefPtr cpu, - ret = 0; - - cleanup: -- ppcMapFree(map); -+ ppc64MapFree(map); - - return ret; - } - - - static void --ppcDataFree(virCPUDataPtr data) -+ppc64DataFree(virCPUDataPtr data) - { - if (data == NULL) - return; -@@ -518,7 +518,7 @@ ppcDataFree(virCPUDataPtr data) - } - - static virCPUDataPtr --ppcNodeData(virArch arch) -+ppc64NodeData(virArch arch) - { - virCPUDataPtr cpuData; - -@@ -536,17 +536,17 @@ ppcNodeData(virArch arch) - } - - static virCPUCompareResult --ppcGuestData(virCPUDefPtr host, -- virCPUDefPtr guest, -- virCPUDataPtr *data, -- char **message) -+ppc64GuestData(virCPUDefPtr host, -+ virCPUDefPtr guest, -+ virCPUDataPtr *data, -+ char **message) - { -- return ppcCompute(host, guest, data, message); -+ return ppc64Compute(host, guest, data, message); - } - - static int --ppcUpdate(virCPUDefPtr guest, -- const virCPUDef *host) -+ppc64Update(virCPUDefPtr guest, -+ const virCPUDef *host) - { - switch ((virCPUMode) guest->mode) { - case VIR_CPU_MODE_HOST_MODEL: -@@ -568,32 +568,32 @@ ppcUpdate(virCPUDefPtr guest, - } - - static virCPUDefPtr --ppcBaseline(virCPUDefPtr *cpus, -- unsigned int ncpus, -- const char **models ATTRIBUTE_UNUSED, -- unsigned int nmodels ATTRIBUTE_UNUSED, -- unsigned int flags) -+ppc64Baseline(virCPUDefPtr *cpus, -+ unsigned int ncpus, -+ const char **models ATTRIBUTE_UNUSED, -+ unsigned int nmodels ATTRIBUTE_UNUSED, -+ unsigned int flags) - { -- struct ppc_map *map = NULL; -- const struct ppc_model *model; -- const struct ppc_vendor *vendor = NULL; -+ struct ppc64_map *map = NULL; -+ const struct ppc64_model *model; -+ const struct ppc64_vendor *vendor = NULL; - virCPUDefPtr cpu = NULL; - size_t i; - - virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES | - VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL); - -- if (!(map = ppcLoadMap())) -+ if (!(map = ppc64LoadMap())) - goto error; - -- if (!(model = ppcModelFind(map, cpus[0]->model))) { -+ if (!(model = ppc64ModelFind(map, cpus[0]->model))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown CPU model %s"), cpus[0]->model); - goto error; - } - - for (i = 0; i < ncpus; i++) { -- const struct ppc_vendor *vnd; -+ const struct ppc64_vendor *vnd; - - if (STRNEQ(cpus[i]->model, model->name)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", -@@ -604,7 +604,7 @@ ppcBaseline(virCPUDefPtr *cpus, - if (!cpus[i]->vendor) - continue; - -- if (!(vnd = ppcVendorFind(map, cpus[i]->vendor))) { -+ if (!(vnd = ppc64VendorFind(map, cpus[i]->vendor))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Unknown CPU vendor %s"), cpus[i]->vendor); - goto error; -@@ -641,7 +641,7 @@ ppcBaseline(virCPUDefPtr *cpus, - cpu->match = VIR_CPU_MATCH_EXACT; - - cleanup: -- ppcMapFree(map); -+ ppc64MapFree(map); - - return cpu; - -@@ -652,14 +652,14 @@ ppcBaseline(virCPUDefPtr *cpus, - } - - static int --ppcGetModels(char ***models) -+ppc64GetModels(char ***models) - { -- struct ppc_map *map; -- struct ppc_model *model; -+ struct ppc64_map *map; -+ struct ppc64_model *model; - char *name; - size_t nmodels = 0; - -- if (!(map = ppcLoadMap())) -+ if (!(map = ppc64LoadMap())) - goto error; - - if (models && VIR_ALLOC_N(*models, 0) < 0) -@@ -681,7 +681,7 @@ ppcGetModels(char ***models) - } - - cleanup: -- ppcMapFree(map); -+ ppc64MapFree(map); - - return nmodels; - -@@ -698,14 +698,14 @@ struct cpuArchDriver cpuDriverPPC64 = { - .name = "ppc64", - .arch = archs, - .narch = ARRAY_CARDINALITY(archs), -- .compare = ppcCompare, -- .decode = ppcDecode, -+ .compare = ppc64Compare, -+ .decode = ppc64Decode, - .encode = NULL, -- .free = ppcDataFree, -- .nodeData = ppcNodeData, -- .guestData = ppcGuestData, -- .baseline = ppcBaseline, -- .update = ppcUpdate, -+ .free = ppc64DataFree, -+ .nodeData = ppc64NodeData, -+ .guestData = ppc64GuestData, -+ .baseline = ppc64Baseline, -+ .update = ppc64Update, - .hasFeature = NULL, -- .getModels = ppcGetModels, -+ .getModels = ppc64GetModels, - }; --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Reorder-functions-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Reorder-functions-in-the-ppc64-driver.patch deleted file mode 100644 index 4034413..0000000 --- a/SOURCES/libvirt-cpu-Reorder-functions-in-the-ppc64-driver.patch +++ /dev/null @@ -1,199 +0,0 @@ -From 7109e51ae80c27f817fd6f88fe4006099c6fa83c Mon Sep 17 00:00:00 2001 -Message-Id: <7109e51ae80c27f817fd6f88fe4006099c6fa83c@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:56 +0200 -Subject: [PATCH] cpu: Reorder functions in the ppc64 driver - -Having the functions grouped together this way will avoid further -shuffling around down the line. - -No functional changes. - -(cherry picked from commit b85b51f2a5254287ffcb28ebd6f744d857481afc) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 129 +++++++++++++++++++++++++--------------------------- - 1 file changed, 63 insertions(+), 66 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 18dbf86..5921263 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -57,6 +57,32 @@ struct ppc64_map { - struct ppc64_model *models; - }; - -+static void -+ppc64VendorFree(struct ppc64_vendor *vendor) -+{ -+ if (!vendor) -+ return; -+ -+ VIR_FREE(vendor->name); -+ VIR_FREE(vendor); -+} -+ -+static struct ppc64_vendor * -+ppc64VendorFind(const struct ppc64_map *map, -+ const char *name) -+{ -+ struct ppc64_vendor *vendor; -+ -+ vendor = map->vendors; -+ while (vendor) { -+ if (STREQ(vendor->name, name)) -+ return vendor; -+ -+ vendor = vendor->next; -+ } -+ -+ return NULL; -+} - - static void - ppc64ModelFree(struct ppc64_model *model) -@@ -69,6 +95,23 @@ ppc64ModelFree(struct ppc64_model *model) - } - - static struct ppc64_model * -+ppc64ModelCopy(const struct ppc64_model *model) -+{ -+ struct ppc64_model *copy; -+ -+ if (VIR_ALLOC(copy) < 0 || -+ VIR_STRDUP(copy->name, model->name) < 0) { -+ ppc64ModelFree(copy); -+ return NULL; -+ } -+ -+ copy->data.pvr = model->data.pvr; -+ copy->vendor = model->vendor; -+ -+ return copy; -+} -+ -+static struct ppc64_model * - ppc64ModelFind(const struct ppc64_map *map, - const char *name) - { -@@ -111,50 +154,6 @@ ppc64ModelFindPVR(const struct ppc64_map *map, - } - - static struct ppc64_model * --ppc64ModelCopy(const struct ppc64_model *model) --{ -- struct ppc64_model *copy; -- -- if (VIR_ALLOC(copy) < 0 || -- VIR_STRDUP(copy->name, model->name) < 0) { -- ppc64ModelFree(copy); -- return NULL; -- } -- -- copy->data.pvr = model->data.pvr; -- copy->vendor = model->vendor; -- -- return copy; --} -- --static struct ppc64_vendor * --ppc64VendorFind(const struct ppc64_map *map, -- const char *name) --{ -- struct ppc64_vendor *vendor; -- -- vendor = map->vendors; -- while (vendor) { -- if (STREQ(vendor->name, name)) -- return vendor; -- -- vendor = vendor->next; -- } -- -- return NULL; --} -- --static void --ppc64VendorFree(struct ppc64_vendor *vendor) --{ -- if (!vendor) -- return; -- -- VIR_FREE(vendor->name); -- VIR_FREE(vendor); --} -- --static struct ppc64_model * - ppc64ModelFromCPU(const virCPUDef *cpu, - const struct ppc64_map *map) - { -@@ -169,6 +168,26 @@ ppc64ModelFromCPU(const virCPUDef *cpu, - return ppc64ModelCopy(model); - } - -+static void -+ppc64MapFree(struct ppc64_map *map) -+{ -+ if (!map) -+ return; -+ -+ while (map->models) { -+ struct ppc64_model *model = map->models; -+ map->models = model->next; -+ ppc64ModelFree(model); -+ } -+ -+ while (map->vendors) { -+ struct ppc64_vendor *vendor = map->vendors; -+ map->vendors = vendor->next; -+ ppc64VendorFree(vendor); -+ } -+ -+ VIR_FREE(map); -+} - - static int - ppc64VendorLoad(xmlXPathContextPtr ctxt, -@@ -293,27 +312,6 @@ ppc64MapLoadCallback(cpuMapElement element, - return 0; - } - --static void --ppc64MapFree(struct ppc64_map *map) --{ -- if (!map) -- return; -- -- while (map->models) { -- struct ppc64_model *model = map->models; -- map->models = model->next; -- ppc64ModelFree(model); -- } -- -- while (map->vendors) { -- struct ppc64_vendor *vendor = map->vendors; -- map->vendors = vendor->next; -- ppc64VendorFree(vendor); -- } -- -- VIR_FREE(map); --} -- - static struct ppc64_map * - ppc64LoadMap(void) - { -@@ -500,7 +498,6 @@ ppc64DriverDecode(virCPUDefPtr cpu, - return ret; - } - -- - static void - ppc64DriverFree(virCPUDataPtr data) - { --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Simplify-NULL-handling-in-ppc64-driver.patch b/SOURCES/libvirt-cpu-Simplify-NULL-handling-in-ppc64-driver.patch deleted file mode 100644 index e5c1354..0000000 --- a/SOURCES/libvirt-cpu-Simplify-NULL-handling-in-ppc64-driver.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 168e6ce50e183acb95a8ca49cee8114dd880f17a Mon Sep 17 00:00:00 2001 -Message-Id: <168e6ce50e183acb95a8ca49cee8114dd880f17a@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:54 +0200 -Subject: [PATCH] cpu: Simplify NULL handling in ppc64 driver - -Use briefer checks, eg. (!model) instead of (model == NULL), and -avoid initializing to NULL a pointer that would be assigned in -the first line of the function anyway. - -Also remove a pointless NULL assignment. - -No functional changes. - -(cherry picked from commit 4590f0678f7c74e988f53882e710a67a3b15fc68) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 33 ++++++++++++++++----------------- - 1 file changed, 16 insertions(+), 17 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 5140297..05ff8f2 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -61,7 +61,7 @@ struct ppc64_map { - static void - ppc64ModelFree(struct ppc64_model *model) - { -- if (model == NULL) -+ if (!model) - return; - - VIR_FREE(model->name); -@@ -75,7 +75,7 @@ ppc64ModelFind(const struct ppc64_map *map, - struct ppc64_model *model; - - model = map->models; -- while (model != NULL) { -+ while (model) { - if (STREQ(model->name, name)) - return model; - -@@ -92,7 +92,7 @@ ppc64ModelFindPVR(const struct ppc64_map *map, - struct ppc64_model *model; - - model = map->models; -- while (model != NULL) { -+ while (model) { - if (model->data.pvr == pvr) - return model; - -@@ -158,15 +158,15 @@ static struct ppc64_model * - ppc64ModelFromCPU(const virCPUDef *cpu, - const struct ppc64_map *map) - { -- struct ppc64_model *model = NULL; -+ struct ppc64_model *model; - -- if ((model = ppc64ModelFind(map, cpu->model)) == NULL) { -+ if (!(model = ppc64ModelFind(map, cpu->model))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown CPU model %s"), cpu->model); - goto error; - } - -- if ((model = ppc64ModelCopy(model)) == NULL) -+ if (!(model = ppc64ModelCopy(model))) - goto error; - - return model; -@@ -181,7 +181,7 @@ static int - ppc64VendorLoad(xmlXPathContextPtr ctxt, - struct ppc64_map *map) - { -- struct ppc64_vendor *vendor = NULL; -+ struct ppc64_vendor *vendor; - - if (VIR_ALLOC(vendor) < 0) - return -1; -@@ -264,7 +264,7 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - } - model->data.pvr = pvr; - -- if (map->models == NULL) { -+ if (!map->models) { - map->models = model; - } else { - model->next = map->models; -@@ -303,16 +303,16 @@ ppc64MapLoadCallback(cpuMapElement element, - static void - ppc64MapFree(struct ppc64_map *map) - { -- if (map == NULL) -+ if (!map) - return; - -- while (map->models != NULL) { -+ while (map->models) { - struct ppc64_model *model = map->models; - map->models = model->next; - ppc64ModelFree(model); - } - -- while (map->vendors != NULL) { -+ while (map->vendors) { - struct ppc64_vendor *vendor = map->vendors; - map->vendors = vendor->next; - ppc64VendorFree(vendor); -@@ -350,7 +350,6 @@ ppc64MakeCPUData(virArch arch, - - cpuData->arch = arch; - cpuData->data.ppc64 = *data; -- data = NULL; - - return cpuData; - } -@@ -417,7 +416,7 @@ ppc64Compute(virCPUDefPtr host, - !(guest_model = ppc64ModelFromCPU(cpu, map))) - goto cleanup; - -- if (guestData != NULL) { -+ if (guestData) { - if (cpu->type == VIR_CPU_TYPE_GUEST && - cpu->match == VIR_CPU_MATCH_STRICT && - STRNEQ(guest_model->name, host_model->name)) { -@@ -478,7 +477,7 @@ ppc64DriverDecode(virCPUDefPtr cpu, - - virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, -1); - -- if (data == NULL || (map = ppc64LoadMap()) == NULL) -+ if (!data || !(map = ppc64LoadMap())) - return -1; - - if (!(model = ppc64ModelFindPVR(map, data->data.ppc64.pvr))) { -@@ -512,7 +511,7 @@ ppc64DriverDecode(virCPUDefPtr cpu, - static void - ppc64DriverFree(virCPUDataPtr data) - { -- if (data == NULL) -+ if (!data) - return; - - VIR_FREE(data); -@@ -575,7 +574,7 @@ ppc64DriverBaseline(virCPUDefPtr *cpus, - unsigned int nmodels ATTRIBUTE_UNUSED, - unsigned int flags) - { -- struct ppc64_map *map = NULL; -+ struct ppc64_map *map; - const struct ppc64_model *model; - const struct ppc64_vendor *vendor = NULL; - virCPUDefPtr cpu = NULL; -@@ -667,7 +666,7 @@ ppc64DriverGetModels(char ***models) - goto error; - - model = map->models; -- while (model != NULL) { -+ while (model) { - if (models) { - if (VIR_STRDUP(name, model->name) < 0) - goto error; --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Simplify-ppc64-part-of-CPU-map-XML.patch b/SOURCES/libvirt-cpu-Simplify-ppc64-part-of-CPU-map-XML.patch deleted file mode 100644 index 45d478d..0000000 --- a/SOURCES/libvirt-cpu-Simplify-ppc64-part-of-CPU-map-XML.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 21dd3b6c09f3777e3859e74757372b59ebf4535e Mon Sep 17 00:00:00 2001 -Message-Id: <21dd3b6c09f3777e3859e74757372b59ebf4535e@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:06 +0200 -Subject: [PATCH] cpu: Simplify ppc64 part of CPU map XML - -Use multiple PVRs per CPU model to reduce the number of models we -need to keep track of. - -Remove specific CPU models (eg. POWER7+_v2.1): the corresponding -generic CPU model (eg. POWER7) should be used instead to ensure -the guest can be booted on any compatible host. - -Get rid of all the entries that did not match any of the CPU -models supported by QEMU, like power8 and power8e. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 -(cherry picked from commit d87359af5eb5b21848da1906f8e34f107bbea151) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_map.xml | 39 +++------------------------------------ - 1 file changed, 3 insertions(+), 36 deletions(-) - -diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml -index 50516e3..9474a1b 100644 ---- a/src/cpu/cpu_map.xml -+++ b/src/cpu/cpu_map.xml -@@ -628,53 +628,20 @@ - - - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+ - - - - -- -+ - - -- -- -- -- - - - -- -+ - - -- -- -- -- - - - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Simplify-ppc64ModelFromCPU.patch b/SOURCES/libvirt-cpu-Simplify-ppc64ModelFromCPU.patch deleted file mode 100644 index f954d76..0000000 --- a/SOURCES/libvirt-cpu-Simplify-ppc64ModelFromCPU.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b787e0f4846d1175c5ed7dd8aeecb4b78eaf0c47 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:55 +0200 -Subject: [PATCH] cpu: Simplify ppc64ModelFromCPU() - -(cherry picked from commit c238d16af4fccfb829274c1a4dbf2748d81f7714) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 11 ++--------- - 1 file changed, 2 insertions(+), 9 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 05ff8f2..18dbf86 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -163,17 +163,10 @@ ppc64ModelFromCPU(const virCPUDef *cpu, - if (!(model = ppc64ModelFind(map, cpu->model))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown CPU model %s"), cpu->model); -- goto error; -+ return NULL; - } - -- if (!(model = ppc64ModelCopy(model))) -- goto error; -- -- return model; -- -- error: -- ppc64ModelFree(model); -- return NULL; -+ return ppc64ModelCopy(model); - } - - --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Support-multiple-PVRs-in-the-ppc64-driver.patch b/SOURCES/libvirt-cpu-Support-multiple-PVRs-in-the-ppc64-driver.patch deleted file mode 100644 index 10c15ae..0000000 --- a/SOURCES/libvirt-cpu-Support-multiple-PVRs-in-the-ppc64-driver.patch +++ /dev/null @@ -1,195 +0,0 @@ -From 6b1d9c4ab470b81eb903bebc8255911142a01df9 Mon Sep 17 00:00:00 2001 -Message-Id: <6b1d9c4ab470b81eb903bebc8255911142a01df9@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:05 +0200 -Subject: [PATCH] cpu: Support multiple PVRs in the ppc64 driver - -This will allow us to perform PVR matching more broadly, eg. consider -both POWER8 and POWER8E CPUs to be the same even though they have -different PVR values. - -(cherry picked from commit 59fcc9619522d4ac837dafc3c04f6309761f3c5b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 71 ++++++++++++++++++++++++++++++++++++++++-------- - src/cpu/cpu_ppc64_data.h | 8 +++++- - 2 files changed, 66 insertions(+), 13 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 6c78ab8..ba33e05 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -60,6 +60,10 @@ struct ppc64_map { - static void - ppc64DataFree(virCPUppc64Data *data) - { -+ if (!data) -+ return; -+ -+ VIR_FREE(data->pvr); - VIR_FREE(data); - } - -@@ -67,13 +71,24 @@ static virCPUppc64Data * - ppc64DataCopy(const virCPUppc64Data *data) - { - virCPUppc64Data *copy; -+ size_t i; - - if (VIR_ALLOC(copy) < 0) -- return NULL; -+ goto error; - -- copy->pvr = data->pvr; -+ if (VIR_ALLOC_N(copy->pvr, data->len) < 0) -+ goto error; -+ -+ copy->len = data->len; -+ -+ for (i = 0; i < data->len; i++) -+ copy->pvr[i].value = data->pvr[i].value; - - return copy; -+ -+ error: -+ ppc64DataFree(copy); -+ return NULL; - } - - static void -@@ -159,12 +174,14 @@ ppc64ModelFindPVR(const struct ppc64_map *map, - uint32_t pvr) - { - struct ppc64_model *model; -+ size_t i; - - model = map->models; - while (model) { -- if (model->data->pvr == pvr) -- return model; -- -+ for (i = 0; i < model->data->len; i++) { -+ if (model->data->pvr[i].value == pvr) -+ return model; -+ } - model = model->next; - } - -@@ -257,8 +274,16 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - struct ppc64_map *map) - { - struct ppc64_model *model; -+ xmlNodePtr *nodes = NULL; -+ xmlNodePtr bookmark; - char *vendor = NULL; - unsigned long pvr; -+ size_t i; -+ int n; -+ -+ /* Save the node the context was pointing to, as we're going -+ * to change it later. It's going to be restored on exit */ -+ bookmark = ctxt->node; - - if (VIR_ALLOC(model) < 0) - return -1; -@@ -298,14 +323,29 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - } - } - -- if (!virXPathBoolean("boolean(./pvr)", ctxt) || -- virXPathULongHex("string(./pvr/@value)", ctxt, &pvr) < 0) { -+ if ((n = virXPathNodeSet("./pvr", ctxt, &nodes)) <= 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Missing or invalid PVR value in CPU model %s"), -+ _("Missing PVR information for CPU model %s"), - model->name); - goto ignore; - } -- model->data->pvr = pvr; -+ -+ if (VIR_ALLOC_N(model->data->pvr, n) < 0) -+ goto ignore; -+ -+ model->data->len = n; -+ -+ for (i = 0; i < n; i++) { -+ ctxt->node = nodes[i]; -+ -+ if (virXPathULongHex("string(./@value)", ctxt, &pvr) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Missing or invalid PVR value in CPU model %s"), -+ model->name); -+ goto ignore; -+ } -+ model->data->pvr[i].value = pvr; -+ } - - if (!map->models) { - map->models = model; -@@ -315,7 +355,9 @@ ppc64ModelLoad(xmlXPathContextPtr ctxt, - } - - cleanup: -+ ctxt->node = bookmark; - VIR_FREE(vendor); -+ VIR_FREE(nodes); - return 0; - - ignore: -@@ -506,10 +548,10 @@ ppc64DriverDecode(virCPUDefPtr cpu, - if (!data || !(map = ppc64LoadMap())) - return -1; - -- if (!(model = ppc64ModelFindPVR(map, data->data.ppc64->pvr))) { -+ if (!(model = ppc64ModelFindPVR(map, data->data.ppc64->pvr[0].value))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Cannot find CPU model with PVR 0x%08x"), -- data->data.ppc64->pvr); -+ data->data.ppc64->pvr[0].value); - goto cleanup; - } - -@@ -557,9 +599,14 @@ ppc64DriverNodeData(virArch arch) - - data = nodeData->data.ppc64; - -+ if (VIR_ALLOC_N(data->pvr, 1) < 0) -+ goto error; -+ -+ data->len = 1; -+ - #if defined(__powerpc__) || defined(__powerpc64__) - asm("mfpvr %0" -- : "=r" (data->pvr)); -+ : "=r" (data->pvr[0].value)); - #endif - - nodeData->arch = arch; -diff --git a/src/cpu/cpu_ppc64_data.h b/src/cpu/cpu_ppc64_data.h -index c18fc63..0d3cb0b 100644 ---- a/src/cpu/cpu_ppc64_data.h -+++ b/src/cpu/cpu_ppc64_data.h -@@ -26,9 +26,15 @@ - - # include - -+typedef struct _virCPUppc64PVR virCPUppc64PVR; -+struct _virCPUppc64PVR { -+ uint32_t value; -+}; -+ - typedef struct _virCPUppc64Data virCPUppc64Data; - struct _virCPUppc64Data { -- uint32_t pvr; -+ size_t len; -+ virCPUppc64PVR *pvr; - }; - - #endif /* __VIR_CPU_PPC64_DATA_H__ */ --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu-Use-ppc64Compute-to-implement-ppc64DriverCompare.patch b/SOURCES/libvirt-cpu-Use-ppc64Compute-to-implement-ppc64DriverCompare.patch deleted file mode 100644 index ec2af7e..0000000 --- a/SOURCES/libvirt-cpu-Use-ppc64Compute-to-implement-ppc64DriverCompare.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 9dcd200a892eb8880baff291e42a630252c15a3d Mon Sep 17 00:00:00 2001 -Message-Id: <9dcd200a892eb8880baff291e42a630252c15a3d@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:02 +0200 -Subject: [PATCH] cpu: Use ppc64Compute() to implement ppc64DriverCompare() - -This ensures comparison of two CPU definitions will be consistent -regardless of the fact that it is performed using cpuCompare() or -cpuGuestData(). The x86 driver uses the same exact code. - -(cherry picked from commit d574094d309eee5fdfcea3de4f06aed154975d83) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/cpu/cpu_ppc64.c | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c -index 0769956..efac739 100644 ---- a/src/cpu/cpu_ppc64.c -+++ b/src/cpu/cpu_ppc64.c -@@ -438,16 +438,22 @@ ppc64DriverCompare(virCPUDefPtr host, - virCPUDefPtr cpu, - bool failIncompatible) - { -- if ((cpu->arch == VIR_ARCH_NONE || host->arch == cpu->arch) && -- STREQ(host->model, cpu->model)) -- return VIR_CPU_COMPARE_IDENTICAL; -+ virCPUCompareResult ret; -+ char *message = NULL; - -- if (failIncompatible) { -- virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); -- return VIR_CPU_COMPARE_ERROR; -- } else { -- return VIR_CPU_COMPARE_INCOMPATIBLE; -+ ret = ppc64Compute(host, cpu, NULL, &message); -+ -+ if (failIncompatible && ret == VIR_CPU_COMPARE_INCOMPATIBLE) { -+ ret = VIR_CPU_COMPARE_ERROR; -+ if (message) { -+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message); -+ } else { -+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); -+ } - } -+ VIR_FREE(message); -+ -+ return ret; - } - - static int --- -2.5.0 - diff --git a/SOURCES/libvirt-cpu_x86-Fix-host-model-CPUs-on-hosts-with-CMT.patch b/SOURCES/libvirt-cpu_x86-Fix-host-model-CPUs-on-hosts-with-CMT.patch new file mode 100644 index 0000000..47e5623 --- /dev/null +++ b/SOURCES/libvirt-cpu_x86-Fix-host-model-CPUs-on-hosts-with-CMT.patch @@ -0,0 +1,68 @@ +From cdc937aeef0901ba76e3b51029b8ae3cef58c9de Mon Sep 17 00:00:00 2001 +Message-Id: +From: Jiri Denemark +Date: Tue, 9 Aug 2016 15:15:20 +0200 +Subject: [PATCH] cpu_x86: Fix host-model CPUs on hosts with CMT + +Since the introduction of CMT features (commit v1.3.5-461-gf294b83) +starting a domain with host-model CPU on a host which supports CMT fails +because QEMU complains about unknown 'cmt' feature: + + qemu-system-x86_64: CPU feature cmt not found + +https://bugzilla.redhat.com/show_bug.cgi?id=1355857 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 300f668c665f1ec0f834917fe8a58b5991322441) + +RHEL changes: + - since commit v2.0.0-8-g0c8ec3b libvirt in RHEL always passes + +rtm,+hle options to Haswell and Broadwell CPUs + +https://bugzilla.redhat.com/show_bug.cgi?id=1365500 + +Signed-off-by: Jiri Denemark +--- + src/cpu/cpu_x86.c | 8 ++++++-- + tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args | 2 +- + 2 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c +index 24ef76b..670b02e 100644 +--- a/src/cpu/cpu_x86.c ++++ b/src/cpu/cpu_x86.c +@@ -2542,12 +2542,16 @@ x86UpdateHostModel(virCPUDefPtr guest, + goto cleanup; + } + +- /* Remove non-migratable features by default ++ /* Remove non-migratable features and CMT related features which QEMU ++ * knows nothing about. + * Note: this only works as long as no CPU model contains non-migratable + * features directly */ + i = 0; + while (i < guest->nfeatures) { +- if (x86FeatureIsMigratable(guest->features[i].name, map)) { ++ if (x86FeatureIsMigratable(guest->features[i].name, map) && ++ STRNEQ(guest->features[i].name, "cmt") && ++ STRNEQ(guest->features[i].name, "mbm_total") && ++ STRNEQ(guest->features[i].name, "mbm_local")) { + i++; + } else { + VIR_FREE(guest->features[i].name); +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args +index 884ca57..b7fdf4b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\ +-+smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+cmt,+pdpe1gb,+abm,+rtm,+hle \ +++smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+rtm,+hle \ + -m 214 \ + -smp 6 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-- +2.9.2 + diff --git a/SOURCES/libvirt-cpu_x86-Fix-minimum-match-custom-CPUs-on-hosts-with-CMT.patch b/SOURCES/libvirt-cpu_x86-Fix-minimum-match-custom-CPUs-on-hosts-with-CMT.patch new file mode 100644 index 0000000..828aa00 --- /dev/null +++ b/SOURCES/libvirt-cpu_x86-Fix-minimum-match-custom-CPUs-on-hosts-with-CMT.patch @@ -0,0 +1,84 @@ +From 1433f648ba50ee55b5c4ee2170fbe9433795d7c8 Mon Sep 17 00:00:00 2001 +Message-Id: <1433f648ba50ee55b5c4ee2170fbe9433795d7c8@dist-git> +From: Jiri Denemark +Date: Wed, 7 Sep 2016 15:16:57 +0200 +Subject: [PATCH] cpu_x86: Fix minimum match custom CPUs on hosts with CMT + +Since the introduction of CMT features (commit v1.3.5-461-gf294b83) +starting a domain with custom CPU and match='minimum' on a host which +supports CMT fails because QEMU complains about unknown 'cmt' feature. + +"cpu_x86: Fix host-model CPUs on hosts with CMT" commit fixed similar +issue for host-model CPUs. + +This patch is a RHEL-only hack because upstream fixes this by unifying +the code for these two types of CPUs, but the upstream solution is +invasive and cannot be easily backported. + +https://bugzilla.redhat.com/show_bug.cgi?id=1365500 + +Signed-off-by: Jiri Denemark +--- + src/cpu/cpu_x86.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c +index 670b02e..d7c58cf 100644 +--- a/src/cpu/cpu_x86.c ++++ b/src/cpu/cpu_x86.c +@@ -456,7 +456,8 @@ static int + x86DataToCPUFeatures(virCPUDefPtr cpu, + int policy, + virCPUx86Data *data, +- virCPUx86MapPtr map) ++ virCPUx86MapPtr map, ++ bool filter) + { + size_t i; + +@@ -464,6 +465,13 @@ x86DataToCPUFeatures(virCPUDefPtr cpu, + virCPUx86FeaturePtr feature = map->features[i]; + if (x86DataIsSubset(data, &feature->data)) { + x86DataSubtract(data, &feature->data); ++ ++ if (filter && ++ (STREQ(feature->name, "cmt") || ++ STREQ(feature->name, "mbm_total") || ++ STREQ(feature->name, "mbm_local"))) ++ continue; ++ + if (virCPUDefAddFeature(cpu, feature->name, policy) < 0) + return -1; + } +@@ -595,8 +603,8 @@ x86DataToCPU(const virCPUx86Data *data, + /* because feature policy is ignored for host CPU */ + cpu->type = VIR_CPU_TYPE_GUEST; + +- if (x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_REQUIRE, ©, map) || +- x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_DISABLE, &modelData, map)) ++ if (x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_REQUIRE, ©, map, false) || ++ x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_DISABLE, &modelData, map, false)) + goto error; + + cleanup: +@@ -1835,7 +1843,7 @@ x86Decode(virCPUDefPtr cpu, + + x86DataSubtract(©, &features); + if (x86DataToCPUFeatures(cpuModel, VIR_CPU_FEATURE_REQUIRE, +- ©, map) < 0) ++ ©, map, false) < 0) + goto cleanup; + } + +@@ -2503,7 +2511,7 @@ x86UpdateCustom(virCPUDefPtr guest, + guest->match = VIR_CPU_MATCH_EXACT; + if (x86ModelSubtractCPU(host_model, guest, map) || + x86DataToCPUFeatures(guest, VIR_CPU_FEATURE_REQUIRE, +- &host_model->data, map)) ++ &host_model->data, map, true)) + goto cleanup; + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-cpu_x86-Introduce-x86FeatureIsMigratable.patch b/SOURCES/libvirt-cpu_x86-Introduce-x86FeatureIsMigratable.patch new file mode 100644 index 0000000..6be35a7 --- /dev/null +++ b/SOURCES/libvirt-cpu_x86-Introduce-x86FeatureIsMigratable.patch @@ -0,0 +1,81 @@ +From 780500abda14bb71111592254d01c973d16be320 Mon Sep 17 00:00:00 2001 +Message-Id: <780500abda14bb71111592254d01c973d16be320@dist-git> +From: Jiri Denemark +Date: Tue, 28 Jun 2016 10:51:41 +0200 +Subject: [PATCH] cpu_x86: Introduce x86FeatureIsMigratable + +Signed-off-by: Jiri Denemark +(cherry picked from commit dbb14bb0f1316d92c89541fca816c91dce0dc8fb) + +https://bugzilla.redhat.com/show_bug.cgi?id=1365500 + +Signed-off-by: Jiri Denemark +--- + src/cpu/cpu_x86.c | 37 +++++++++++++++++++++++-------------- + 1 file changed, 23 insertions(+), 14 deletions(-) + +diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c +index d9646eb..7bb2bb6 100644 +--- a/src/cpu/cpu_x86.c ++++ b/src/cpu/cpu_x86.c +@@ -767,6 +767,22 @@ x86FeatureFindInternal(const char *name) + } + + ++static bool ++x86FeatureIsMigratable(const char *name, ++ void *cpu_map) ++{ ++ virCPUx86MapPtr map = cpu_map; ++ size_t i; ++ ++ for (i = 0; i < map->nblockers; i++) { ++ if (STREQ(name, map->migrate_blockers[i]->name)) ++ return false; ++ } ++ ++ return true; ++} ++ ++ + static char * + x86FeatureNames(virCPUx86MapPtr map, + const char *separator, +@@ -1801,14 +1817,10 @@ x86Decode(virCPUDefPtr cpu, + * features directly */ + if (flags & VIR_CONNECT_BASELINE_CPU_MIGRATABLE) { + for (i = 0; i < cpuModel->nfeatures; i++) { +- size_t j; +- for (j = 0; j < map->nblockers; j++) { +- if (STREQ(map->migrate_blockers[j]->name, +- cpuModel->features[i].name)) { +- VIR_FREE(cpuModel->features[i].name); +- VIR_DELETE_ELEMENT_INPLACE(cpuModel->features, i, +- cpuModel->nfeatures); +- } ++ if (!x86FeatureIsMigratable(cpuModel->features[i].name, map)) { ++ VIR_FREE(cpuModel->features[i].name); ++ VIR_DELETE_ELEMENT_INPLACE(cpuModel->features, i, ++ cpuModel->nfeatures); + } + } + } +@@ -2531,12 +2543,9 @@ x86UpdateHostModel(virCPUDefPtr guest, + * Note: this only works as long as no CPU model contains non-migratable + * features directly */ + for (i = 0; i < guest->nfeatures; i++) { +- size_t j; +- for (j = 0; j < map->nblockers; j++) { +- if (STREQ(map->migrate_blockers[j]->name, guest->features[i].name)) { +- VIR_FREE(guest->features[i].name); +- VIR_DELETE_ELEMENT_INPLACE(guest->features, i, guest->nfeatures); +- } ++ if (!x86FeatureIsMigratable(guest->features[i].name, map)) { ++ VIR_FREE(guest->features[i].name); ++ VIR_DELETE_ELEMENT_INPLACE(guest->features, i, guest->nfeatures); + } + } + for (i = 0; !passthrough && i < oldguest->nfeatures; i++) { +-- +2.9.2 + diff --git a/SOURCES/libvirt-cpu_x86-Properly-drop-non-migratable-features.patch b/SOURCES/libvirt-cpu_x86-Properly-drop-non-migratable-features.patch new file mode 100644 index 0000000..6885e95 --- /dev/null +++ b/SOURCES/libvirt-cpu_x86-Properly-drop-non-migratable-features.patch @@ -0,0 +1,55 @@ +From 50244446129418acbd9efd72ebbd5c166d62dc62 Mon Sep 17 00:00:00 2001 +Message-Id: <50244446129418acbd9efd72ebbd5c166d62dc62@dist-git> +From: Jiri Denemark +Date: Tue, 28 Jun 2016 11:12:41 +0200 +Subject: [PATCH] cpu_x86: Properly drop non-migratable features + +By removing a non-migratable feature in a for loop we would fail to drop +every second non-migratable feature if the features array contained +several of them in a row. + +Signed-off-by: Jiri Denemark +(cherry picked from commit 1ac897a15da11d1bfca2642bce3b0beaad32bcf1) + +https://bugzilla.redhat.com/show_bug.cgi?id=1365500 + +Signed-off-by: Jiri Denemark +--- + src/cpu/cpu_x86.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c +index 7bb2bb6..24ef76b 100644 +--- a/src/cpu/cpu_x86.c ++++ b/src/cpu/cpu_x86.c +@@ -1816,8 +1816,11 @@ x86Decode(virCPUDefPtr cpu, + * Note: this only works as long as no CPU model contains non-migratable + * features directly */ + if (flags & VIR_CONNECT_BASELINE_CPU_MIGRATABLE) { +- for (i = 0; i < cpuModel->nfeatures; i++) { +- if (!x86FeatureIsMigratable(cpuModel->features[i].name, map)) { ++ i = 0; ++ while (i < cpuModel->nfeatures) { ++ if (x86FeatureIsMigratable(cpuModel->features[i].name, map)) { ++ i++; ++ } else { + VIR_FREE(cpuModel->features[i].name); + VIR_DELETE_ELEMENT_INPLACE(cpuModel->features, i, + cpuModel->nfeatures); +@@ -2542,8 +2545,11 @@ x86UpdateHostModel(virCPUDefPtr guest, + /* Remove non-migratable features by default + * Note: this only works as long as no CPU model contains non-migratable + * features directly */ +- for (i = 0; i < guest->nfeatures; i++) { +- if (!x86FeatureIsMigratable(guest->features[i].name, map)) { ++ i = 0; ++ while (i < guest->nfeatures) { ++ if (x86FeatureIsMigratable(guest->features[i].name, map)) { ++ i++; ++ } else { + VIR_FREE(guest->features[i].name); + VIR_DELETE_ELEMENT_INPLACE(guest->features, i, guest->nfeatures); + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-daemon-sasl-Don-t-forget-to-save-SASL-username-to-client-s-identity.patch b/SOURCES/libvirt-daemon-sasl-Don-t-forget-to-save-SASL-username-to-client-s-identity.patch new file mode 100644 index 0000000..e151021 --- /dev/null +++ b/SOURCES/libvirt-daemon-sasl-Don-t-forget-to-save-SASL-username-to-client-s-identity.patch @@ -0,0 +1,58 @@ +From 4046e4e0a1d031f37b7e614e64ee0eeb968ecaeb Mon Sep 17 00:00:00 2001 +Message-Id: <4046e4e0a1d031f37b7e614e64ee0eeb968ecaeb@dist-git> +From: Erik Skultety +Date: Tue, 2 Aug 2016 08:47:45 +0200 +Subject: [PATCH] daemon: sasl: Don't forget to save SASL username to client's + identity + +Once the SASL authentication process has successfully passed, we should also +save the SASL username used to client's identity, so that when a client like +virt-admin tries to obtain it, the server will actually format the username to +the response data. + +Signed-off-by: Erik Skultety +(cherry picked from commit 5289e21f31be226fd22bc3b512b8cc233fa24046) + +https://bugzilla.redhat.com/show_bug.cgi?id=1361948 +Signed-off-by: Erik Skultety +--- + daemon/remote.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/daemon/remote.c b/daemon/remote.c +index 4aa43c2..6991a7e 100644 +--- a/daemon/remote.c ++++ b/daemon/remote.c +@@ -3116,6 +3116,7 @@ static int + remoteSASLFinish(virNetServerPtr server, + virNetServerClientPtr client) + { ++ virIdentityPtr clnt_identity = NULL; + const char *identity; + struct daemonClientPrivate *priv = virNetServerClientGetPrivateData(client); + int ssf; +@@ -3138,9 +3139,13 @@ remoteSASLFinish(virNetServerPtr server, + if (!virNetSASLContextCheckIdentity(saslCtxt, identity)) + return -2; + ++ if (!(clnt_identity = virNetServerClientGetIdentity(client))) ++ goto error; ++ + virNetServerClientSetAuth(client, 0); + virNetServerTrackCompletedAuth(server); + virNetServerClientSetSASLSession(client, priv->sasl); ++ virIdentitySetSASLUserName(clnt_identity, identity); + + VIR_DEBUG("Authentication successful %d", virNetServerClientGetFD(client)); + +@@ -3148,6 +3153,7 @@ remoteSASLFinish(virNetServerPtr server, + "client=%p auth=%d identity=%s", + client, REMOTE_AUTH_SASL, identity); + ++ virObjectUnref(clnt_identity); + virObjectUnref(priv->sasl); + priv->sasl = NULL; + +-- +2.9.2 + diff --git a/SOURCES/libvirt-dbus-Don-t-unref-NULL-messages.patch b/SOURCES/libvirt-dbus-Don-t-unref-NULL-messages.patch deleted file mode 100644 index e3f9ead..0000000 --- a/SOURCES/libvirt-dbus-Don-t-unref-NULL-messages.patch +++ /dev/null @@ -1,327 +0,0 @@ -From 58235a6cc62f33a6934d214e967b6ef879a77ec0 Mon Sep 17 00:00:00 2001 -Message-Id: <58235a6cc62f33a6934d214e967b6ef879a77ec0@dist-git> -From: Michal Privoznik -Date: Tue, 16 Feb 2016 11:55:12 +0100 -Subject: [PATCH] dbus: Don't unref NULL messages - -https://bugzilla.redhat.com/show_bug.cgi?id=1308494 - -Apparently we are not the only ones with dumb free functions -because dbus_message_unref() does not accept NULL either. But if -I were to vote, this one is even more evil. Instead of returning -an error just like we do it immediately dereference any pointer -passed and thus crash you app. Well done DBus! - - Program received signal SIGSEGV, Segmentation fault. - [Switching to Thread 0x7f878ebda700 (LWP 31264)] - 0x00007f87be4016e5 in ?? () from /usr/lib64/libdbus-1.so.3 - (gdb) bt - #0 0x00007f87be4016e5 in ?? () from /usr/lib64/libdbus-1.so.3 - #1 0x00007f87be3f004e in dbus_message_unref () from /usr/lib64/libdbus-1.so.3 - #2 0x00007f87bf6ecf95 in virSystemdGetMachineNameByPID (pid=9849) at util/virsystemd.c:228 - #3 0x00007f879761bd4d in qemuConnectCgroup (driver=0x7f87600a32a0, vm=0x7f87600c7550) at qemu/qemu_cgroup.c:909 - #4 0x00007f87976386b7 in qemuProcessReconnect (opaque=0x7f87600db840) at qemu/qemu_process.c:3386 - #5 0x00007f87bf6edfff in virThreadHelper (data=0x7f87600d5580) at util/virthread.c:206 - #6 0x00007f87bb602334 in start_thread (arg=0x7f878ebda700) at pthread_create.c:333 - #7 0x00007f87bb3481bd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 - (gdb) frame 2 - #2 0x00007f87bf6ecf95 in virSystemdGetMachineNameByPID (pid=9849) at util/virsystemd.c:228 - 228 dbus_message_unref(reply); - (gdb) p reply - $1 = (DBusMessage *) 0x0 - -Signed-off-by: Michal Privoznik -(cherry picked from commit 862298a2e7bef059b73f477e8a88d403c523e10b) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/rpc/virnetdaemon.c | 4 ++-- - src/util/virdbus.c | 14 +++++++------- - src/util/virdbus.h | 1 - - src/util/virfirewall.c | 3 +-- - src/util/virsystemd.c | 2 +- - tests/virdbustest.c | 20 ++++++++++---------- - tests/virfirewalltest.c | 3 +-- - tests/virpolkittest.c | 2 +- - tests/virsystemdtest.c | 3 ++- - 10 files changed, 26 insertions(+), 27 deletions(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 4ad9266..86909c1 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1348,6 +1348,7 @@ virDBusHasSystemBus; - virDBusMessageDecode; - virDBusMessageEncode; - virDBusMessageRead; -+virDBusMessageUnref; - virDBusSetSharedBus; - - -diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c -index 910f266..18c962c 100644 ---- a/src/rpc/virnetdaemon.c -+++ b/src/rpc/virnetdaemon.c -@@ -374,7 +374,7 @@ virNetDaemonGotInhibitReply(DBusPendingCall *pending, - VIR_FORCE_CLOSE(fd); - } - } -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - - cleanup: - virObjectUnlock(dmn); -@@ -426,7 +426,7 @@ virNetDaemonCallInhibit(virNetDaemonPtr dmn, - dmn, NULL); - dmn->autoShutdownCallingInhibit = true; - } -- dbus_message_unref(message); -+ virDBusMessageUnref(message); - } - #endif - -diff --git a/src/util/virdbus.c b/src/util/virdbus.c -index 1cf1eef..a34e845 100644 ---- a/src/util/virdbus.c -+++ b/src/util/virdbus.c -@@ -1394,7 +1394,7 @@ int virDBusCreateMethodV(DBusMessage **call, - } - - if (virDBusMessageEncodeArgs(*call, types, args) < 0) { -- dbus_message_unref(*call); -+ virDBusMessageUnref(*call); - *call = NULL; - goto cleanup; - } -@@ -1463,7 +1463,7 @@ int virDBusCreateReplyV(DBusMessage **reply, - } - - if (virDBusMessageEncodeArgs(*reply, types, args) < 0) { -- dbus_message_unref(*reply); -+ virDBusMessageUnref(*reply); - *reply = NULL; - goto cleanup; - } -@@ -1582,7 +1582,7 @@ virDBusCall(DBusConnection *conn, - if (ret == 0 && replyout) - *replyout = reply; - else -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - } - return ret; - } -@@ -1646,8 +1646,7 @@ int virDBusCallMethod(DBusConnection *conn, - ret = virDBusCall(conn, call, replyout, error); - - cleanup: -- if (call) -- dbus_message_unref(call); -+ virDBusMessageUnref(call); - return ret; - } - -@@ -1723,7 +1722,7 @@ static int virDBusIsServiceInList(const char *listMethod, const char *name) - } - - cleanup: -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - return ret; - } - -@@ -1759,7 +1758,8 @@ int virDBusIsServiceRegistered(const char *name) - - void virDBusMessageUnref(DBusMessage *msg) - { -- dbus_message_unref(msg); -+ if (msg) -+ dbus_message_unref(msg); - } - - #else /* ! WITH_DBUS */ -diff --git a/src/util/virdbus.h b/src/util/virdbus.h -index 9e86538..86b4223 100644 ---- a/src/util/virdbus.h -+++ b/src/util/virdbus.h -@@ -28,7 +28,6 @@ - # else - # define DBusConnection void - # define DBusMessage void --# define dbus_message_unref(m) do {} while (0) - # endif - # include "internal.h" - -diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c -index a972c05..f26fd86 100644 ---- a/src/util/virfirewall.c -+++ b/src/util/virfirewall.c -@@ -822,8 +822,7 @@ virFirewallApplyRuleFirewallD(virFirewallRulePtr rule, - - cleanup: - virResetError(&error); -- if (reply) -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - return ret; - } - -diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c -index 7bc5d55..08fd6bb 100644 ---- a/src/util/virsystemd.c -+++ b/src/util/virsystemd.c -@@ -225,7 +225,7 @@ virSystemdGetMachineNameByPID(pid_t pid) - - cleanup: - VIR_FREE(object); -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - - return name; - } -diff --git a/tests/virdbustest.c b/tests/virdbustest.c -index 4ec3c0d..1622b03 100644 ---- a/tests/virdbustest.c -+++ b/tests/virdbustest.c -@@ -121,7 +121,7 @@ static int testMessageSimple(const void *args ATTRIBUTE_UNUSED) - VIR_FREE(out_string); - VIR_FREE(out_signature); - VIR_FREE(out_objectpath); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -171,7 +171,7 @@ static int testMessageVariant(const void *args ATTRIBUTE_UNUSED) - cleanup: - VIR_FREE(out_str1); - VIR_FREE(out_str2); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -230,7 +230,7 @@ static int testMessageArray(const void *args ATTRIBUTE_UNUSED) - cleanup: - VIR_FREE(out_str1); - VIR_FREE(out_str2); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -274,7 +274,7 @@ static int testMessageEmptyArrayRef(const void *args ATTRIBUTE_UNUSED) - ret = 0; - - cleanup: -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -323,7 +323,7 @@ static int testMessageSingleArrayRef(const void *args ATTRIBUTE_UNUSED) - cleanup: - if (out_strv1) - VIR_FREE(out_strv1[0]); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -436,7 +436,7 @@ static int testMessageArrayRef(const void *args ATTRIBUTE_UNUSED) - for (i = 0; i < out_nstrv2; i++) - VIR_FREE(out_strv2[i]); - VIR_FREE(out_strv2); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -511,7 +511,7 @@ static int testMessageStruct(const void *args ATTRIBUTE_UNUSED) - VIR_FREE(out_string); - VIR_FREE(out_signature); - VIR_FREE(out_objectpath); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -581,7 +581,7 @@ static int testMessageDict(const void *args ATTRIBUTE_UNUSED) - VIR_FREE(out_key1); - VIR_FREE(out_key2); - VIR_FREE(out_key3); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -652,7 +652,7 @@ static int testMessageDictRef(const void *args ATTRIBUTE_UNUSED) - VIR_FREE(out_strv1[5]); - } - VIR_FREE(out_strv1); -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -@@ -695,7 +695,7 @@ static int testMessageEmptyDictRef(const void *args ATTRIBUTE_UNUSED) - ret = 0; - - cleanup: -- dbus_message_unref(msg); -+ virDBusMessageUnref(msg); - return ret; - } - -diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c -index 1f8d8f1..8f6fc9e 100644 ---- a/tests/virfirewalltest.c -+++ b/tests/virfirewalltest.c -@@ -179,8 +179,7 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block, - return reply; - - error: -- if (reply) -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - reply = NULL; - if (error && !dbus_error_is_set(error)) - dbus_set_error_const(error, -diff --git a/tests/virpolkittest.c b/tests/virpolkittest.c -index cdf78f5..b39beed 100644 ---- a/tests/virpolkittest.c -+++ b/tests/virpolkittest.c -@@ -140,7 +140,7 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block, - return reply; - - error: -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - return NULL; - } - -diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c -index 46452dd..101f5e0 100644 ---- a/tests/virsystemdtest.c -+++ b/tests/virsystemdtest.c -@@ -28,6 +28,7 @@ - # include - - # include "virsystemd.h" -+# include "virdbus.h" - # include "virlog.h" - # include "virmock.h" - # define VIR_FROM_THIS VIR_FROM_NONE -@@ -151,7 +152,7 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block, - return reply; - - error: -- dbus_message_unref(reply); -+ virDBusMessageUnref(reply); - return NULL; - } - --- -2.7.2 - diff --git a/SOURCES/libvirt-doc-clarify-documentation-for-vcpu-order.patch b/SOURCES/libvirt-doc-clarify-documentation-for-vcpu-order.patch new file mode 100644 index 0000000..00bae1a --- /dev/null +++ b/SOURCES/libvirt-doc-clarify-documentation-for-vcpu-order.patch @@ -0,0 +1,41 @@ +From c7e89383dcdf9bfb6a51c0b22cacbf54bd44995d Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Fri, 26 Aug 2016 15:45:25 -0400 +Subject: [PATCH] doc: clarify documentation for vcpu order + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Make it clear that vcpu order is valid for online vcpus only and state +that it has to be specified for all vcpus or not provided at all. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1370043 +(cherry picked from commit 54147fd9be31838904f6f2251510da91a1bd0ca7) +--- + docs/formatdomain.html.in | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index a838bff..c080bdf 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -564,11 +564,12 @@ + all disabled vcpus must be hotpluggable. Valid values are + yes and no. + +- order allows to specify the order to add the vcpus. For +- hypervisors/platforms that require to insert multiple vcpus at once ++ order allows to specify the order to add the online vcpus. ++ For hypervisors/platforms that require to insert multiple vcpus at once + the order may be be duplicated accross all vcpus that need to be + enabled at once. Specifying order is not necessary, vcpus are then +- added in an arbitrary order. ++ added in an arbitrary order. If order info is used, it must be used for ++ all online vcpus. + + Note that hypervisors may create hotpluggable vcpus differently from + boot vcpus thus special initialization may be necessary. +-- +2.10.0 + diff --git a/SOURCES/libvirt-docs-Add-Fibre-Channel-NPIV-supported-option-for-volume-lun-config.patch b/SOURCES/libvirt-docs-Add-Fibre-Channel-NPIV-supported-option-for-volume-lun-config.patch deleted file mode 100644 index f02c3ea..0000000 --- a/SOURCES/libvirt-docs-Add-Fibre-Channel-NPIV-supported-option-for-volume-lun-config.patch +++ /dev/null @@ -1,40 +0,0 @@ -From a45c385857dc2d5a19f9d1509e1d473466d68a60 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Tue, 4 Aug 2015 08:05:51 -0400 -Subject: [PATCH] docs: Add Fibre Channel NPIV supported option for volume lun - config - -https://bugzilla.redhat.com/show_bug.cgi?id=1238545 - -"Further" clarification (and testing) shows that using a SCSI Fibre -Channel NPIV device/lun from a storage pool as a will work. So just add that to the allowable options - -Related to: https://bugzilla.redhat.com/show_bug.cgi?id=1230179 - -(cherry picked from commit 4ae72f131b7eb7e860d4400378f47d5383f13705) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - docs/formatdomain.html.in | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in -index ea2fff8..8785200 100644 ---- a/docs/formatdomain.html.in -+++ b/docs/formatdomain.html.in -@@ -1973,7 +1973,9 @@ - valid when the type is "block" or "network" for - protocol='iscsi' or when the type - is "volume" when using an iSCSI source pool -- for mode "host". -+ for mode "host" or as an -+ NPIV -+ virtual Host Bus Adapter (vHBA) using a Fibre Channel storage pool. - Configured in this manner, the LUN behaves identically to "disk", - except that generic SCSI commands from the guest are accepted - and passed through to the physical device. Also note that --- -2.5.0 - diff --git a/SOURCES/libvirt-docs-Clarify-unprivileged-sgio-feature.patch b/SOURCES/libvirt-docs-Clarify-unprivileged-sgio-feature.patch deleted file mode 100644 index a143358..0000000 --- a/SOURCES/libvirt-docs-Clarify-unprivileged-sgio-feature.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 63bdd9e26d72427008c4a63ea371d0da0329947f Mon Sep 17 00:00:00 2001 -Message-Id: <63bdd9e26d72427008c4a63ea371d0da0329947f@dist-git> -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:50 -0400 -Subject: [PATCH] docs: Clarify unprivileged sgio feature - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Update the descriptions for disk and hostdev sgio in order to indicate -not all hypervisors and OS's support this feature - -Signed-off-by: John Ferlan -(cherry picked from commit 4f4ac3913a379ad7d3880c57cfe7304c4a22cc22) -Signed-off-by: Jiri Denemark ---- - docs/formatdomain.html.in | 19 ++++++++++--------- - 1 file changed, 10 insertions(+), 9 deletions(-) - -diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in -index e2ccfa5..cb11b1f 100644 ---- a/docs/formatdomain.html.in -+++ b/docs/formatdomain.html.in -@@ -2004,10 +2004,10 @@ -
sgio attribute - since 1.0.2
-
-- Indicates whether the kernel will filter unprivileged -- SG_IO commands for the disk, valid settings are "filtered" or -- "unfiltered". Defaults to "filtered". Similar to rawio, -- sgio is only valid for device 'lun'. -+ If supported by the hypervisor and OS, indicates whether -+ unprivileged SG_IO commands are filtered for the disk. Valid -+ settings are "filtered" or "unfiltered" where the default is -+ "filtered". Only available when the device is 'lun'. -
-
snapshot attribute - since 0.9.5
-@@ -3239,11 +3239,12 @@ - -
scsi
-
For SCSI devices, user is responsible to make sure the device -- is not used by host. The optional sgio -- (since 1.0.6) attribute indicates -- whether the kernel will filter unprivileged SG_IO commands for -- the disk, valid settings are "filtered" or "unfiltered". -- The default is "filtered". The optional rawio -+ is not used by host. If supported by the hypervisor and OS, the -+ optional sgio (since 1.0.6) -+ attribute indicates whether unprivileged SG_IO commands are -+ filtered for the disk. Valid settings are "filtered" or -+ "unfiltered", where the default is "filtered". -+ The optional rawio - (since 1.2.9) attribute indicates - whether the lun needs the rawio capability. Valid settings are - "yes" or "no". See the rawio description within the --- -2.5.1 - diff --git a/SOURCES/libvirt-docs-Distribute-subsite.xsl.patch b/SOURCES/libvirt-docs-Distribute-subsite.xsl.patch new file mode 100644 index 0000000..cfd0439 --- /dev/null +++ b/SOURCES/libvirt-docs-Distribute-subsite.xsl.patch @@ -0,0 +1,50 @@ +From 3070510fac4e5462ede573b2127514483edaef36 Mon Sep 17 00:00:00 2001 +Message-Id: <3070510fac4e5462ede573b2127514483edaef36@dist-git> +From: Michal Privoznik +Date: Mon, 8 Aug 2016 13:08:50 +0200 +Subject: [PATCH] docs: Distribute subsite.xsl + +https://bugzilla.redhat.com/show_bug.cgi?id=1365004 + +So, I've ran into very interesting problem lately. When doing the +following, I've encountered an error: + + libvirt.git $ make dist && tar -xJf libvirt-2.2.0.tar.xz && \ + cd libvirt-2.2.0 && ./configure && \ + rm docs/formatdomain.html && make -C docs + + make: Entering directory 'docs' + make: *** No rule to make target 'formatdomain.html', needed by 'web'. Stop. + make: Leaving directory 'docs' + +I had no idea what was going on, so I've nailed down the commit +that "broke it" via running git-bisect. It was this one: +7659bd9221b9dd1cdf. But that shed no more light until I realized +that the commit might actually just exposed a problem we had. And +guess what - I've nailed it down. Of course we are not +distributing subsite.xsl that's why make prints error message. +Very misleading one I must say. + +Signed-off-by: Michal Privoznik +(cherry picked from commit e396de03f31d87f3e81c7820739951d50367ddb8) +Signed-off-by: Michal Privoznik +--- + docs/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/docs/Makefile.am b/docs/Makefile.am +index 206ef3b..14aad83 100644 +--- a/docs/Makefile.am ++++ b/docs/Makefile.am +@@ -152,7 +152,7 @@ schema_DATA = $(wildcard $(srcdir)/schemas/*.rng) + + EXTRA_DIST= \ + apibuild.py genaclperms.pl \ +- site.xsl newapi.xsl news.xsl page.xsl \ ++ site.xsl subsite.xsl newapi.xsl news.xsl page.xsl \ + hacking1.xsl hacking2.xsl wrapstring.xsl \ + $(dot_html) $(dot_html_in) $(gif) $(apihtml) $(apipng) \ + $(devhelphtml) $(devhelppng) $(devhelpcss) $(devhelpxsl) \ +-- +2.9.2 + diff --git a/SOURCES/libvirt-docs-Document-how-libvirt-handles-companion-controllers.patch b/SOURCES/libvirt-docs-Document-how-libvirt-handles-companion-controllers.patch deleted file mode 100644 index d2c1e2a..0000000 --- a/SOURCES/libvirt-docs-Document-how-libvirt-handles-companion-controllers.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 476ed77dafaf2b43298ddd936320cd5d3739e0a1 Mon Sep 17 00:00:00 2001 -Message-Id: <476ed77dafaf2b43298ddd936320cd5d3739e0a1@dist-git> -From: Martin Kletzander -Date: Thu, 6 Aug 2015 13:10:43 +0200 -Subject: [PATCH] docs: Document how libvirt handles companion controllers - -The information on companion controllers we give in our documentation is -rather sparse. For example, it looks like any controller can be used as -a companion one. Also, when using ich9-uhci2, for example, we are able -to set some sensible defaults, but it might get confusing for the user -as we don't do that for all controller models. - -https://bugzilla.redhat.com/show_bug.cgi?id=1069590 - -Signed-off-by: Martin Kletzander -(cherry picked from commit b84a2cd87dad4a10e3a0064c30ac3df037048101) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - docs/formatdomain.html.in | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in -index 8785200..e2ccfa5 100644 ---- a/docs/formatdomain.html.in -+++ b/docs/formatdomain.html.in -@@ -3007,6 +3007,11 @@ - relationship of the companion to its master controller. - A companion controller is on the same bus as its master, so - the companion index value should be equal. -+ Not all controller models can be used as companion controllers -+ and libvirt might provide some sensible defaults (settings -+ of master startport and function of an -+ address) for some particular models. -+ Preferred companion controllers are ich-uhci[123]. -

- -
--- 
-2.5.0
-
diff --git a/SOURCES/libvirt-docs-Update-docs-to-reflect-LUKS-secret-changes.patch b/SOURCES/libvirt-docs-Update-docs-to-reflect-LUKS-secret-changes.patch
new file mode 100644
index 0000000..cfc2e82
--- /dev/null
+++ b/SOURCES/libvirt-docs-Update-docs-to-reflect-LUKS-secret-changes.patch
@@ -0,0 +1,220 @@
+From 778fbc28f6ae7f40082d48bc57c224cd7a8d45d0 Mon Sep 17 00:00:00 2001
+Message-Id: <778fbc28f6ae7f40082d48bc57c224cd7a8d45d0@dist-git>
+From: John Ferlan 
+Date: Mon, 25 Jul 2016 12:42:52 -0400
+Subject: [PATCH] docs: Update docs to reflect LUKS secret changes
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1301021
+
+Commit id's 'c8438010', '9bbf0d7e', and '2552fec24' altered the documentation
+to describe adding a 'passphrase' type secret usage model in order to reference
+the secret for a luks volume. After commit, it was deemed that a 'volume'
+usage model should be used, so adjust the various documents in order rephrase
+descriptions in order to follow the correct usage model.
+
+Signed-off-by: John Ferlan 
+(cherry picked from commit a6bab5c34313497f80e8bbae5a5da405d3c4264b)
+
+Resolved some minor formatting conflicts from docs/formatsecret.html.in
+since commit id 'c84380106fe69f86842dc7e8c032af6740bef77e' is not present
+for downstream
+
+Signed-off-by: John Ferlan 
+---
+ docs/formatsecret.html.in            | 45 +++++++++++++++++++++++++++++-------
+ docs/formatstorage.html.in           | 16 +++++++++++++
+ docs/formatstorageencryption.html.in | 29 ++++++++++-------------
+ 3 files changed, 65 insertions(+), 25 deletions(-)
+
+diff --git a/docs/formatsecret.html.in b/docs/formatsecret.html.in
+index c39d2a7..fd698a4 100644
+--- a/docs/formatsecret.html.in
++++ b/docs/formatsecret.html.in
+@@ -41,7 +41,7 @@
+       
+ Specifies what this secret is used for. A mandatory + type attribute specifies the usage category, currently +- only volume, ceph and iscsi ++ only volume, ceph, and iscsi + are defined. Specific usage categories are described below. +
+ +@@ -49,10 +49,12 @@ +

Usage type "volume"

+ +

+- This secret is associated with a volume, and it is safe to delete the +- secret after the volume is deleted. The <usage +- type='volume'> element must contain a +- single volume element that specifies the key of the volume ++ This secret is associated with a volume, whether the format is either ++ for a "qcow" or a "luks" encrypted volume. Each volume will have a ++ unique secret associated with it and it is safe to delete the ++ secret after the volume is deleted. The ++ <usage type='volume'> element must contain a ++ single volume element that specifies the path of the volume + this secret is associated with. For example, create a volume-secret.xml + file as follows: +

+@@ -68,7 +70,7 @@ +
+ +

+- Define the secret and set the pass phrase as follows: ++ Define the secret and set the passphrase as follows: +

+
+       # virsh secret-define volume-secret.xml
+@@ -81,8 +83,8 @@
+     
+ +

+- The volume type secret can then be used in the XML for a storage volume +- encryption as follows: ++ The volume type secret can be supplied in domain XML for a qcow storage ++ volume encryption as follows: +

+
+       <encryption format='qcow'>
+@@ -90,6 +92,33 @@
+       </encryption>
+     
+ ++

++ The volume type secret can be supplied either in volume XML during ++ creation of a storage volume ++ in order to provide the passphrase to encrypt the volume or in ++ domain XML disk device ++ in order to provide the passphrase to decrypt the volume, ++ since 2.1.0. An example follows: ++

++
++      # cat luks-secret.xml
++      <secret ephemeral='no' private='yes'>
++         <description>LUKS Sample Secret</description>
++         <uuid>f52a81b2-424e-490c-823d-6bd4235bc57</uuid>
++         <usage type='volume'>
++            <volume>/var/lib/libvirt/images/luks-sample.img</volume>
++         </usage>
++      </secret>
++
++      # virsh secret-define luks-secret.xml
++      Secret f52a81b2-424e-490c-823d-6bd4235bc57 created
++      #
++      # MYSECRET=`printf %s "letmein" | base64`
++      # virsh secret-set-value f52a81b2-424e-490c-823d-6bd4235bc57 $MYSECRET
++      Secret value set
++      #
++    
++ +

Usage type "ceph"

+

+ This secret is associated with a Ceph RBD (rados block device). +diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in +index 94277a1..a700e85 100644 +--- a/docs/formatstorage.html.in ++++ b/docs/formatstorage.html.in +@@ -752,5 +752,21 @@ + </permissions> + </target> + </volume> ++ ++

Storage volume using LUKS

++ ++
++      <volume>
++        <name>MyLuks.img</name>
++        <capacity unit="G">5</capacity>
++        <target>
++          <path>/var/lib/virt/images/MyLuks.img</path>
++          <format type='luks'/>
++          <encryption format='luks'>
++            <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
++          </encryption>
++        </target>
++      </volume>
++    
+ + +diff --git a/docs/formatstorageencryption.html.in b/docs/formatstorageencryption.html.in +index f2b0ffd..11af97e 100644 +--- a/docs/formatstorageencryption.html.in ++++ b/docs/formatstorageencryption.html.in +@@ -27,9 +27,9 @@ + secret tags, each with mandatory attributes type + and either uuid or usage + (since 2.1.0). The only currently defined +- value of type is passphrase. The ++ value of type is volume. The + uuid is "uuid" of the secret while +- usage is the value "usage" subelement field. ++ usage is the "usage" subelement field. + A secret value can be set in libvirt by the + + virSecretSetValue API. Alternatively, if supported +@@ -40,7 +40,7 @@ +

"default" format

+

+ <encryption format="default"/> can be specified only +- when creating a volume. If the volume is successfully created, the ++ when creating a qcow volume. If the volume is successfully created, the + encryption formats, parameters and secrets will be auto-generated by + libvirt and the attached encryption tag will be updated. + The unmodified contents of the encryption tag can be used +@@ -59,13 +59,9 @@ +

"luks" format

+

+ The luks format is specific to a luks encrypted volume +- and the secret used in order to either encrypt or decrypt the volume. +- A single <secret type='passphrase'...> element is +- expected. The secret may be referenced via either a uuid or +- usage attribute. One of the two must be present. When +- present for volume creation, the secret will be used in order for +- volume encryption. When present for domain usage, the secret will +- be used as the passphrase to decrypt the volume. ++ and the secret is used in order to either encrypt during volume creation ++ or decrypt the volume for usage by the domain. A single ++ <secret type='passphrase'...> element is expected. + Since 2.1.0. +

+

+@@ -135,22 +131,21 @@ + </encryption> + +

+- Assuming a +- luks secret is already defined using a +- usage element with an name of "luks_example", ++ Assuming a ++ luks volume type secret is already defined, + a simple example specifying use of the luks format + for either volume creation without a specific cipher being defined or + as part of a domain volume definition: +

+
+       <encryption format='luks'>
+-         <secret type='passphrase' usage='luks_example'/>
++        <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
+       </encryption>
+     
+ +

+- Here is an example, specifying use of the luks format for +- a specific cipher algorihm for volume creation: ++ Here is an example specifying use of the luks format for ++ a specific cipher algorithm for volume creation: +

+
+       <volume>
+@@ -160,7 +155,7 @@
+           <path>/var/lib/libvirt/images/demo.luks</path>
+           <format type='luks'/>
+           <encryption format='luks'>
+-             <secret type='passphrase' usage='luks_example'/>
++             <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
+              <cipher name='twofish' size='256' mode='cbc' hash='sha256'/>
+              <ivgen name='plain64' hash='sha256'/>
+           </encryption>
+-- 
+2.9.2
+
diff --git a/SOURCES/libvirt-domain-Fix-crash-if-trying-to-live-update-disk-serial.patch b/SOURCES/libvirt-domain-Fix-crash-if-trying-to-live-update-disk-serial.patch
deleted file mode 100644
index 655e23a..0000000
--- a/SOURCES/libvirt-domain-Fix-crash-if-trying-to-live-update-disk-serial.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From af566a030c4a70ed037eda075a4c09f14732482b Mon Sep 17 00:00:00 2001
-Message-Id: 
-From: Cole Robinson 
-Date: Wed, 12 Aug 2015 10:47:16 +0200
-Subject: [PATCH] domain: Fix crash if trying to live update disk 
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1007228
-
-If you pass  XML to UpdateDevice, and the original device
-didn't have a  block, libvirtd crashes trying to read the original
-NULL serial string.
-
-Use _NULLABLE string comparisons to avoid the crash. A couple other
-properties needed the change too.
-
-(cherry picked from commit c7790408d7e16b1ad00a690433d9310f104994f7)
-Signed-off-by: Martin Kletzander 
-Signed-off-by: Jiri Denemark 
----
- src/conf/domain_conf.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index aa1b860..8784367 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -5783,28 +5783,28 @@ virDomainDiskDiffersSourceOnly(virDomainDiskDefPtr disk,
- 
-     CHECK_EQ(transient, "transient", true);
- 
--    if (disk->serial && STRNEQ(disk->serial, orig_disk->serial)) {
-+    if (disk->serial && STRNEQ_NULLABLE(disk->serial, orig_disk->serial)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-                        _("cannot modify field '%s' of the disk"),
-                        "serial");
-         return false;
-     }
- 
--    if (disk->wwn && STRNEQ(disk->wwn, orig_disk->wwn)) {
-+    if (disk->wwn && STRNEQ_NULLABLE(disk->wwn, orig_disk->wwn)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-                        _("cannot modify field '%s' of the disk"),
-                        "wwn");
-         return false;
-     }
- 
--    if (disk->vendor && STRNEQ(disk->vendor, orig_disk->vendor)) {
-+    if (disk->vendor && STRNEQ_NULLABLE(disk->vendor, orig_disk->vendor)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-                        _("cannot modify field '%s' of the disk"),
-                        "vendor");
-         return false;
-     }
- 
--    if (disk->product && STRNEQ(disk->product, orig_disk->product)) {
-+    if (disk->product && STRNEQ_NULLABLE(disk->product, orig_disk->product)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-                        _("cannot modify field '%s' of the disk"),
-                        "product");
--- 
-2.5.0
-
diff --git a/SOURCES/libvirt-domain-Fix-migratable-XML-with-graphics-listen.patch b/SOURCES/libvirt-domain-Fix-migratable-XML-with-graphics-listen.patch
deleted file mode 100644
index da96777..0000000
--- a/SOURCES/libvirt-domain-Fix-migratable-XML-with-graphics-listen.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 180a82fb0eb876cd8d42aedb4ecf05f0423ffe9b Mon Sep 17 00:00:00 2001
-Message-Id: <180a82fb0eb876cd8d42aedb4ecf05f0423ffe9b@dist-git>
-From: Jiri Denemark 
-Date: Wed, 23 Sep 2015 14:48:06 +0200
-Subject: [PATCH] domain: Fix migratable XML with graphics/@listen
-
-As of commit 6992994, we set graphics/@listen attribute according to the
-first listen child element even if that element is of type='network'.
-This was done for backward compatibility with applications which only
-support the original listen attribute. However, by doing so we broke
-migration to older libvirt which tried to check that the listen
-attribute matches one of the listen child elements but which did not
-take type='network' elements into account.
-
-We are not concerned about compatibility with old applications when
-formatting domain XML for migration for two reasons. The XML is consumed
-only by libvirtd and the IP address associated with type='network'
-listen address on the source host is just useless on the destination
-host. Thus, we can safely avoid propagating the type='network' IP
-address to graphics/@listen attribute when creating migratable XML.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1265111
-
-Signed-off-by: Jiri Denemark 
-(cherry picked from commit c0806dc30bda562810b0d686e33c903862e3c8f1)
-Signed-off-by: Jiri Denemark 
----
- src/conf/domain_conf.c | 16 +++++++---------
- 1 file changed, 7 insertions(+), 9 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index f5320fe..a0ecc94 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -20824,19 +20824,17 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
-     * . This is done to improve backward compatibility.
-     */
-     for (i = 0; i < def->nListens; i++) {
--        virDomainGraphicsListenType listenType;
--
-         if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
-             def->listens[i].fromConfig)
-             continue;
--        listenType = virDomainGraphicsListenGetType(def, i);
- 
--        if (listenType == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS ||
--            (listenType == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK &&
--             !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))) {
--            if ((listenAddr = virDomainGraphicsListenGetAddress(def, i)))
--                break;
--        }
-+        if (def->listens[i].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK &&
-+            flags & (VIR_DOMAIN_DEF_FORMAT_INACTIVE |
-+                     VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))
-+            continue;
-+
-+        if ((listenAddr = virDomainGraphicsListenGetAddress(def, i)))
-+            break;
-     }
- 
-     virBufferAsprintf(buf, "
+From: John Ferlan 
+Date: Mon, 25 Jul 2016 12:42:49 -0400
+Subject: [PATCH] encryption: Add  and  to encryption
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1301021
+
+For a luks device, allow the configuration of a specific cipher to be
+used for encrypting the volume.
+
+Signed-off-by: John Ferlan 
+(cherry picked from commit 2552fec248c665f3417a5d36840555da6bbe96a4)
+---
+ docs/formatstorageencryption.html.in               |  83 ++++++++++++-
+ docs/schemas/storagecommon.rng                     |  44 ++++++-
+ src/conf/domain_conf.c                             |  11 ++
+ src/util/virstorageencryption.c                    | 136 +++++++++++++++++++++
+ src/util/virstorageencryption.h                    |  14 +++
+ .../qemuxml2argv-luks-disk-cipher.xml              |  45 +++++++
+ .../qemuxml2xmlout-luks-disk-cipher.xml            |   1 +
+ tests/qemuxml2xmltest.c                            |   1 +
+ tests/storagevolxml2xmlin/vol-luks-cipher.xml      |  23 ++++
+ tests/storagevolxml2xmlout/vol-luks-cipher.xml     |  23 ++++
+ tests/storagevolxml2xmltest.c                      |   1 +
+ 11 files changed, 376 insertions(+), 6 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml
+ create mode 120000 tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml
+ create mode 100644 tests/storagevolxml2xmlin/vol-luks-cipher.xml
+ create mode 100644 tests/storagevolxml2xmlout/vol-luks-cipher.xml
+
+diff --git a/docs/formatstorageencryption.html.in b/docs/formatstorageencryption.html.in
+index 380763e..f2b0ffd 100644
+--- a/docs/formatstorageencryption.html.in
++++ b/docs/formatstorageencryption.html.in
+@@ -68,6 +68,60 @@
+       be used as the passphrase to decrypt the volume.
+       Since 2.1.0.
+     

++

++ For volume creation, it is possible to specify the encryption ++ algorithm used to encrypt the luks volume. The following two ++ optional elements may be provided for that purpose. It is hypervisor ++ dependent as to which algorithms are supported. The default algorithm ++ used by the storage driver backend when using qemu-img to create ++ the volume is 'aes-256-cbc' using 'essiv' for initialization vector ++ generation and 'sha256' hash algorithm for both the cipher and the ++ initialization vector generation. ++

++ ++
++
cipher
++
This element describes the cipher algorithm to be used to either ++ encrypt or decrypt the luks volume. This element has the following ++ attributes: ++
++
name
++
The name of the cipher algorithm used for data encryption, ++ such as 'aes', 'des', 'cast5', 'serpent', 'twofish', etc. ++ Support of the specific algorithm is storage driver ++ implementation dependent.
++
size
++
The size of the cipher in bits, such as '256', '192', '128', ++ etc. Support of the specific size for a specific cipher is ++ hypervisor dependent.
++
mode
++
An optional cipher algorithm mode such as 'cbc', 'xts', ++ 'ecb', etc. Support of the specific cipher mode is ++ hypervisor dependent.
++
hash
++
An optional master key hash algorithm such as 'md5', 'sha1', ++ 'sha256', etc. Support of the specific hash algorithm is ++ hypervisor dependent.
++
++
++
ivgen
++
This optional element describes the initialization vector ++ generation algorithm used in conjunction with the ++ cipher. If the cipher is not provided, ++ then an error will be generated by the parser. ++
++
name
++
The name of the algorithm, such as 'plain', 'plain64', ++ 'essiv', etc. Support of the specific algorithm is hypervisor ++ dependent.
++
hash
++
An optional hash algorithm such as 'md5', 'sha1', 'sha256', ++ etc. Support of the specific ivgen hash algorithm is hypervisor ++ dependent.
++
++
++
++ + +

Examples

+ +@@ -81,9 +135,12 @@ + </encryption>
+ +

+- Here is a simple example, specifying use of the luks format +- where it's assumed that a secret has been defined using a +- usage element with a id of "luks_example": ++ Assuming a ++ luks secret is already defined using a ++ usage element with an name of "luks_example", ++ a simple example specifying use of the luks format ++ for either volume creation without a specific cipher being defined or ++ as part of a domain volume definition: +

+
+       <encryption format='luks'>
+@@ -91,5 +148,25 @@
+       </encryption>
+     
+ ++

++ Here is an example, specifying use of the luks format for ++ a specific cipher algorihm for volume creation: ++

++
++      <volume>
++        <name>twofish.luks</name>
++        <capacity unit='G'>5</capacity>
++        <target>
++          <path>/var/lib/libvirt/images/demo.luks</path>
++          <format type='luks'/>
++          <encryption format='luks'>
++             <secret type='passphrase' usage='luks_example'/>
++             <cipher name='twofish' size='256' mode='cbc' hash='sha256'/>
++             <ivgen name='plain64' hash='sha256'/>
++          </encryption>
++        </target>
++      </volume>
++    
++ + + +diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng +index 63b55b4..316fbae 100644 +--- a/docs/schemas/storagecommon.rng ++++ b/docs/schemas/storagecommon.rng +@@ -15,9 +15,19 @@ + luks + + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +@@ -136,4 +146,32 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 8b9b623..abf889a 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -7869,6 +7869,17 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, + def->startupPolicy = val; + } + ++ if (encryption) { ++ if (encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS && ++ encryption->encinfo.cipher_name) { ++ ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("supplying the for a domain is " ++ "unnecessary")); ++ goto error; ++ } ++ } ++ + def->dst = target; + target = NULL; + def->src->auth = authdef; +diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c +index 2b59420..116a235 100644 +--- a/src/util/virstorageencryption.c ++++ b/src/util/virstorageencryption.c +@@ -35,6 +35,7 @@ + #include "viruuid.h" + #include "virfile.h" + #include "virsecret.h" ++#include "virstring.h" + + #define VIR_FROM_THIS VIR_FROM_STORAGE + +@@ -46,6 +47,17 @@ VIR_ENUM_IMPL(virStorageEncryptionFormat, + "default", "qcow", "luks") + + static void ++virStorageEncryptionInfoDefFree(virStorageEncryptionInfoDefPtr def) ++{ ++ VIR_FREE(def->cipher_name); ++ VIR_FREE(def->cipher_mode); ++ VIR_FREE(def->cipher_hash); ++ VIR_FREE(def->ivgen_name); ++ VIR_FREE(def->ivgen_hash); ++} ++ ++ ++static void + virStorageEncryptionSecretFree(virStorageEncryptionSecretPtr secret) + { + if (!secret) +@@ -64,6 +76,7 @@ virStorageEncryptionFree(virStorageEncryptionPtr enc) + + for (i = 0; i < enc->nsecrets; i++) + virStorageEncryptionSecretFree(enc->secrets[i]); ++ virStorageEncryptionInfoDefFree(&enc->encinfo); + VIR_FREE(enc->secrets); + VIR_FREE(enc); + } +@@ -81,6 +94,23 @@ virStorageEncryptionSecretCopy(const virStorageEncryptionSecret *src) + return ret; + } + ++ ++static int ++virStorageEncryptionInfoDefCopy(const virStorageEncryptionInfoDef *src, ++ virStorageEncryptionInfoDefPtr dst) ++{ ++ dst->cipher_size = src->cipher_size; ++ if (VIR_STRDUP(dst->cipher_name, src->cipher_name) < 0 || ++ VIR_STRDUP(dst->cipher_mode, src->cipher_mode) < 0 || ++ VIR_STRDUP(dst->cipher_hash, src->cipher_hash) < 0 || ++ VIR_STRDUP(dst->ivgen_name, src->ivgen_name) < 0 || ++ VIR_STRDUP(dst->ivgen_hash, src->ivgen_hash) < 0) ++ return -1; ++ ++ return 0; ++} ++ ++ + virStorageEncryptionPtr + virStorageEncryptionCopy(const virStorageEncryption *src) + { +@@ -101,6 +131,9 @@ virStorageEncryptionCopy(const virStorageEncryption *src) + goto error; + } + ++ if (virStorageEncryptionInfoDefCopy(&src->encinfo, &ret->encinfo) < 0) ++ goto error; ++ + return ret; + + error: +@@ -154,6 +187,61 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, + return NULL; + } + ++ ++static int ++virStorageEncryptionInfoParseCipher(xmlNodePtr info_node, ++ virStorageEncryptionInfoDefPtr info) ++{ ++ int ret = -1; ++ char *size_str = NULL; ++ ++ if (!(info->cipher_name = virXMLPropString(info_node, "name"))) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("cipher info missing 'name' attribute")); ++ goto cleanup; ++ } ++ ++ if ((size_str = virXMLPropString(info_node, "size")) && ++ virStrToLong_uip(size_str, NULL, 10, &info->cipher_size) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("cannot parse cipher size: '%s'"), ++ size_str); ++ goto cleanup; ++ } ++ ++ if (!size_str) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("cipher info missing 'size' attribute")); ++ goto cleanup; ++ } ++ ++ info->cipher_mode = virXMLPropString(info_node, "mode"); ++ info->cipher_hash = virXMLPropString(info_node, "hash"); ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(size_str); ++ return ret; ++} ++ ++ ++static int ++virStorageEncryptionInfoParseIvgen(xmlNodePtr info_node, ++ virStorageEncryptionInfoDefPtr info) ++{ ++ if (!(info->ivgen_name = virXMLPropString(info_node, "name"))) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("missing ivgen info name string")); ++ return -1; ++ } ++ ++ info->ivgen_hash = virXMLPropString(info_node, "hash"); ++ ++ return 0; ++} ++ ++ + static virStorageEncryptionPtr + virStorageEncryptionParseXML(xmlXPathContextPtr ctxt) + { +@@ -197,6 +285,28 @@ virStorageEncryptionParseXML(xmlXPathContextPtr ctxt) + VIR_FREE(nodes); + } + ++ if (ret->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { ++ xmlNodePtr tmpnode; ++ ++ if ((tmpnode = virXPathNode("./cipher[1]", ctxt))) { ++ if (virStorageEncryptionInfoParseCipher(tmpnode, &ret->encinfo) < 0) ++ goto cleanup; ++ } ++ ++ if ((tmpnode = virXPathNode("./ivgen[1]", ctxt))) { ++ /* If no cipher node, then fail */ ++ if (!ret->encinfo.cipher_name) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("ivgen element found, but cipher is missing")); ++ goto cleanup; ++ } ++ ++ if (virStorageEncryptionInfoParseIvgen(tmpnode, &ret->encinfo) < 0) ++ goto cleanup; ++ } ++ } ++ ++ + return ret; + + cleanup: +@@ -251,6 +361,28 @@ virStorageEncryptionSecretFormat(virBufferPtr buf, + return 0; + } + ++ ++static void ++virStorageEncryptionInfoDefFormat(virBufferPtr buf, ++ const virStorageEncryptionInfoDef *enc) ++{ ++ virBufferEscapeString(buf, "cipher_name); ++ virBufferAsprintf(buf, " size='%u'", enc->cipher_size); ++ if (enc->cipher_mode) ++ virBufferEscapeString(buf, " mode='%s'", enc->cipher_mode); ++ if (enc->cipher_hash) ++ virBufferEscapeString(buf, " hash='%s'", enc->cipher_hash); ++ virBufferAddLit(buf, "/>\n"); ++ ++ if (enc->ivgen_name) { ++ virBufferEscapeString(buf, "ivgen_name); ++ if (enc->ivgen_hash) ++ virBufferEscapeString(buf, " hash='%s'", enc->ivgen_hash); ++ virBufferAddLit(buf, "/>\n"); ++ } ++} ++ ++ + int + virStorageEncryptionFormat(virBufferPtr buf, + virStorageEncryptionPtr enc) +@@ -271,6 +403,10 @@ virStorageEncryptionFormat(virBufferPtr buf, + return -1; + } + ++ if (enc->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS && ++ enc->encinfo.cipher_name) ++ virStorageEncryptionInfoDefFormat(buf, &enc->encinfo); ++ + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + +diff --git a/src/util/virstorageencryption.h b/src/util/virstorageencryption.h +index 5e1be3b..fa439fb 100644 +--- a/src/util/virstorageencryption.h ++++ b/src/util/virstorageencryption.h +@@ -44,6 +44,18 @@ struct _virStorageEncryptionSecret { + virSecretLookupTypeDef seclookupdef; + }; + ++/* It's possible to dictate the cipher and if necessary iv */ ++typedef struct _virStorageEncryptionInfoDef virStorageEncryptionInfoDef; ++typedef virStorageEncryptionInfoDef *virStorageEncryptionInfoDefPtr; ++struct _virStorageEncryptionInfoDef { ++ unsigned int cipher_size; ++ char *cipher_name; ++ char *cipher_mode; ++ char *cipher_hash; ++ char *ivgen_name; ++ char *ivgen_hash; ++}; ++ + typedef enum { + /* "default" is only valid for volume creation */ + VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT = 0, +@@ -61,6 +73,8 @@ struct _virStorageEncryption { + + size_t nsecrets; + virStorageEncryptionSecretPtr *secrets; ++ ++ virStorageEncryptionInfoDef encinfo; + }; + + virStorageEncryptionPtr virStorageEncryptionCopy(const virStorageEncryption *src) +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml b/tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml +new file mode 100644 +index 0000000..9ce15c0 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml +@@ -0,0 +1,45 @@ ++ ++ encryptdisk ++ 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 ++ 1048576 ++ 524288 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++
++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml +new file mode 120000 +index 0000000..fa55233 +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml +@@ -0,0 +1 @@ ++../qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml +\ No newline at end of file +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index a757fdb..d00d209 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -503,6 +503,7 @@ mymain(void) + DO_TEST("encrypted-disk"); + DO_TEST("encrypted-disk-usage"); + DO_TEST("luks-disks"); ++ DO_TEST("luks-disk-cipher"); + DO_TEST("memtune"); + DO_TEST("memtune-unlimited"); + DO_TEST("blkiotune"); +diff --git a/tests/storagevolxml2xmlin/vol-luks-cipher.xml b/tests/storagevolxml2xmlin/vol-luks-cipher.xml +new file mode 100644 +index 0000000..009246f +--- /dev/null ++++ b/tests/storagevolxml2xmlin/vol-luks-cipher.xml +@@ -0,0 +1,23 @@ ++ ++ LuksDemo.img ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 5 ++ 294912 ++ ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 0644 ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/storagevolxml2xmlout/vol-luks-cipher.xml b/tests/storagevolxml2xmlout/vol-luks-cipher.xml +new file mode 100644 +index 0000000..9014849 +--- /dev/null ++++ b/tests/storagevolxml2xmlout/vol-luks-cipher.xml +@@ -0,0 +1,23 @@ ++ ++ LuksDemo.img ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 5368709120 ++ 294912 ++ ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 0644 ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/storagevolxml2xmltest.c b/tests/storagevolxml2xmltest.c +index a36a706..db82bea 100644 +--- a/tests/storagevolxml2xmltest.c ++++ b/tests/storagevolxml2xmltest.c +@@ -106,6 +106,7 @@ mymain(void) + DO_TEST("pool-dir", "vol-qcow2-0.10-lazy"); + DO_TEST("pool-dir", "vol-qcow2-nobacking"); + DO_TEST("pool-dir", "vol-luks"); ++ DO_TEST("pool-dir", "vol-luks-cipher"); + DO_TEST("pool-disk", "vol-partition"); + DO_TEST("pool-logical", "vol-logical"); + DO_TEST("pool-logical", "vol-logical-backing"); +-- +2.9.2 + diff --git a/SOURCES/libvirt-encryption-Add-luks-parsing-for-storageencryption.patch b/SOURCES/libvirt-encryption-Add-luks-parsing-for-storageencryption.patch new file mode 100644 index 0000000..570c4cc --- /dev/null +++ b/SOURCES/libvirt-encryption-Add-luks-parsing-for-storageencryption.patch @@ -0,0 +1,330 @@ +From 155f32761f7f6569fde7c4c718169fb4f514d2c3 Mon Sep 17 00:00:00 2001 +Message-Id: <155f32761f7f6569fde7c4c718169fb4f514d2c3@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:48 -0400 +Subject: [PATCH] encryption: Add luks parsing for storageencryption + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Add parse and format of the luks/passphrase secret including tests for +volume XML parsing. + +Signed-off-by: John Ferlan +(cherry picked from commit 9bbf0d7e6457e5a0668017eb8e17276f747fc9cc) + +Resolved conflict in docs/formatsecret.html.in since commit id +c84380106fe69f86842dc7e8c032af6740bef77e is not present downstream + +Signed-off-by: John Ferlan +--- + docs/formatstorageencryption.html.in | 26 ++++++++++++- + docs/schemas/storagecommon.rng | 2 + + src/qemu/qemu_process.c | 6 +++ + src/storage/storage_backend.c | 3 +- + src/storage/storage_backend_fs.c | 7 +++- + src/storage/storage_backend_gluster.c | 2 + + src/util/virstorageencryption.c | 2 +- + src/util/virstorageencryption.h | 1 + + tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml | 45 ++++++++++++++++++++++ + .../qemuxml2xmlout-luks-disks.xml | 1 + + tests/qemuxml2xmltest.c | 1 + + tests/storagevolxml2xmlin/vol-luks.xml | 21 ++++++++++ + tests/storagevolxml2xmlout/vol-luks.xml | 21 ++++++++++ + tests/storagevolxml2xmltest.c | 1 + + 14 files changed, 134 insertions(+), 5 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml + create mode 120000 tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disks.xml + create mode 100644 tests/storagevolxml2xmlin/vol-luks.xml + create mode 100644 tests/storagevolxml2xmlout/vol-luks.xml + +diff --git a/docs/formatstorageencryption.html.in b/docs/formatstorageencryption.html.in +index 58e1073..380763e 100644 +--- a/docs/formatstorageencryption.html.in ++++ b/docs/formatstorageencryption.html.in +@@ -56,8 +56,20 @@ + the secret element is not present during volume creation, + a secret is automatically generated and attached to the volume. +

++

"luks" format

++

++ The luks format is specific to a luks encrypted volume ++ and the secret used in order to either encrypt or decrypt the volume. ++ A single <secret type='passphrase'...> element is ++ expected. The secret may be referenced via either a uuid or ++ usage attribute. One of the two must be present. When ++ present for volume creation, the secret will be used in order for ++ volume encryption. When present for domain usage, the secret will ++ be used as the passphrase to decrypt the volume. ++ Since 2.1.0. ++

+ +-

Example

++

Examples

+ +

+ Here is a simple example, specifying use of the qcow format: +@@ -67,5 +79,17 @@ + <encryption format='qcow'> + <secret type='passphrase' uuid='c1f11a6d-8c5d-4a3e-ac7a-4e171c5e0d4a' /> + </encryption> ++ ++

++ Here is a simple example, specifying use of the luks format ++ where it's assumed that a secret has been defined using a ++ usage element with a id of "luks_example": ++

++
++      <encryption format='luks'>
++         <secret type='passphrase' usage='luks_example'/>
++      </encryption>
++    
++ + + +diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng +index c5b71de..63b55b4 100644 +--- a/docs/schemas/storagecommon.rng ++++ b/docs/schemas/storagecommon.rng +@@ -12,6 +12,7 @@ + + default + qcow ++ luks + + + +@@ -81,6 +82,7 @@ + fat + vhd + ploop ++ luks + + + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 4ffd9b7..129c070 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -2414,6 +2414,12 @@ qemuProcessInitPasswords(virConnectPtr conn, + !virDomainDiskGetSource(vm->def->disks[i])) + continue; + ++ if (vm->def->disks[i]->src->encryption->format != ++ VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT && ++ vm->def->disks[i]->src->encryption->format != ++ VIR_STORAGE_ENCRYPTION_FORMAT_QCOW) ++ continue; ++ + VIR_FREE(secret); + if (qemuProcessGetVolumeQcowPassphrase(conn, + vm->def->disks[i], +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index d6a451d..97f6ffe 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -1027,8 +1027,7 @@ virStorageBackendCreateQemuImgCheckEncryption(int format, + } + } else { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +- _("qcow volume encryption unsupported with " +- "volume format %s"), type); ++ _("volume encryption unsupported with format %s"), type); + return -1; + } + +diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c +index 839a2c7..0a12ecb 100644 +--- a/src/storage/storage_backend_fs.c ++++ b/src/storage/storage_backend_fs.c +@@ -157,7 +157,12 @@ virStorageBackendProbeTarget(virStorageSourcePtr target, + case VIR_STORAGE_FILE_QCOW2: + (*encryption)->format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW; + break; +- default: ++ ++ case VIR_STORAGE_FILE_LUKS: ++ (*encryption)->format = VIR_STORAGE_ENCRYPTION_FORMAT_LUKS; ++ break; ++ ++ case VIR_STORAGE_ENCRYPTION_FORMAT_LAST: + break; + } + +diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c +index 0085052..eda060d 100644 +--- a/src/storage/storage_backend_gluster.c ++++ b/src/storage/storage_backend_gluster.c +@@ -321,6 +321,8 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state, + if (vol->target.format == VIR_STORAGE_FILE_QCOW || + vol->target.format == VIR_STORAGE_FILE_QCOW2) + vol->target.encryption->format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW; ++ if (vol->target.format == VIR_STORAGE_FILE_LUKS) ++ vol->target.encryption->format = VIR_STORAGE_ENCRYPTION_FORMAT_LUKS; + } + vol->target.features = meta->features; + meta->features = NULL; +diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c +index cd17554..2b59420 100644 +--- a/src/util/virstorageencryption.c ++++ b/src/util/virstorageencryption.c +@@ -43,7 +43,7 @@ VIR_ENUM_IMPL(virStorageEncryptionSecret, + + VIR_ENUM_IMPL(virStorageEncryptionFormat, + VIR_STORAGE_ENCRYPTION_FORMAT_LAST, +- "default", "qcow") ++ "default", "qcow", "luks") + + static void + virStorageEncryptionSecretFree(virStorageEncryptionSecretPtr secret) +diff --git a/src/util/virstorageencryption.h b/src/util/virstorageencryption.h +index c68c66e..5e1be3b 100644 +--- a/src/util/virstorageencryption.h ++++ b/src/util/virstorageencryption.h +@@ -48,6 +48,7 @@ typedef enum { + /* "default" is only valid for volume creation */ + VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT = 0, + VIR_STORAGE_ENCRYPTION_FORMAT_QCOW, /* Both qcow and qcow2 */ ++ VIR_STORAGE_ENCRYPTION_FORMAT_LUKS, + + VIR_STORAGE_ENCRYPTION_FORMAT_LAST, + } virStorageEncryptionFormatType; +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml +new file mode 100644 +index 0000000..9ce15c0 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml +@@ -0,0 +1,45 @@ ++ ++ encryptdisk ++ 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 ++ 1048576 ++ 524288 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++
++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disks.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disks.xml +new file mode 120000 +index 0000000..b59dc67 +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disks.xml +@@ -0,0 +1 @@ ++../qemuxml2argvdata/qemuxml2argv-luks-disks.xml +\ No newline at end of file +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index 693e712..a757fdb 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -502,6 +502,7 @@ mymain(void) + + DO_TEST("encrypted-disk"); + DO_TEST("encrypted-disk-usage"); ++ DO_TEST("luks-disks"); + DO_TEST("memtune"); + DO_TEST("memtune-unlimited"); + DO_TEST("blkiotune"); +diff --git a/tests/storagevolxml2xmlin/vol-luks.xml b/tests/storagevolxml2xmlin/vol-luks.xml +new file mode 100644 +index 0000000..eb4dc41 +--- /dev/null ++++ b/tests/storagevolxml2xmlin/vol-luks.xml +@@ -0,0 +1,21 @@ ++ ++ LuksDemo.img ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 5 ++ 294912 ++ ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 0644 ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/storagevolxml2xmlout/vol-luks.xml b/tests/storagevolxml2xmlout/vol-luks.xml +new file mode 100644 +index 0000000..5b764b7 +--- /dev/null ++++ b/tests/storagevolxml2xmlout/vol-luks.xml +@@ -0,0 +1,21 @@ ++ ++ LuksDemo.img ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 5368709120 ++ 294912 ++ ++ /var/lib/libvirt/images/LuksDemo.img ++ ++ ++ 0644 ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/storagevolxml2xmltest.c b/tests/storagevolxml2xmltest.c +index f722452..a36a706 100644 +--- a/tests/storagevolxml2xmltest.c ++++ b/tests/storagevolxml2xmltest.c +@@ -105,6 +105,7 @@ mymain(void) + DO_TEST("pool-dir", "vol-qcow2-lazy"); + DO_TEST("pool-dir", "vol-qcow2-0.10-lazy"); + DO_TEST("pool-dir", "vol-qcow2-nobacking"); ++ DO_TEST("pool-dir", "vol-luks"); + DO_TEST("pool-disk", "vol-partition"); + DO_TEST("pool-logical", "vol-logical"); + DO_TEST("pool-logical", "vol-logical-backing"); +-- +2.9.2 + diff --git a/SOURCES/libvirt-examples-Add-example-polkit-ACL-rules.patch b/SOURCES/libvirt-examples-Add-example-polkit-ACL-rules.patch deleted file mode 100644 index 324ac4e..0000000 --- a/SOURCES/libvirt-examples-Add-example-polkit-ACL-rules.patch +++ /dev/null @@ -1,230 +0,0 @@ -From 80ea7f1e17cc676c591988de47396dd24d390631 Mon Sep 17 00:00:00 2001 -Message-Id: <80ea7f1e17cc676c591988de47396dd24d390631@dist-git> -From: Jiri Denemark -Date: Tue, 4 Aug 2015 14:05:52 +0200 -Subject: [PATCH] examples: Add example polkit ACL rules - -Creating ACL rules is not exactly easy and existing examples are pretty -simple. This patch adds a somewhat complex example which defines several -roles. Admins can do everything, operators can do basic operations -on any domain and several groups of users who act as operators but only -on a limited set of domains. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 29b5167417483ef80f6c3fce12811b59a1e2bd55) - -https://bugzilla.redhat.com/show_bug.cgi?id=1115289 - -Signed-off-by: Jiri Denemark ---- - Makefile.am | 2 +- - configure.ac | 1 + - docs/aclpolkit.html.in | 6 ++ - examples/polkit/Makefile.am | 17 +++++ - examples/polkit/libvirt-acl.rules | 130 ++++++++++++++++++++++++++++++++++++++ - libvirt.spec.in | 3 + - 6 files changed, 158 insertions(+), 1 deletion(-) - create mode 100644 examples/polkit/Makefile.am - create mode 100644 examples/polkit/libvirt-acl.rules - -diff --git a/Makefile.am b/Makefile.am -index 91b943b..d338d5a 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -23,7 +23,7 @@ SUBDIRS = . gnulib/lib include src daemon tools docs gnulib/tests \ - tests po examples/object-events examples/hellolibvirt \ - examples/dominfo examples/domsuspend examples/apparmor \ - examples/xml/nwfilter examples/openauth examples/systemtap \ -- tools/wireshark examples/dommigrate \ -+ tools/wireshark examples/dommigrate examples/polkit \ - examples/lxcconvert examples/domtop - - ACLOCAL_AMFLAGS = -I m4 -diff --git a/configure.ac b/configure.ac -index f3ae6ca..b28d990 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2811,6 +2811,7 @@ AC_CONFIG_FILES([\ - examples/systemtap/Makefile \ - examples/xml/nwfilter/Makefile \ - examples/lxcconvert/Makefile \ -+ examples/polkit/Makefile \ - tools/wireshark/Makefile \ - tools/wireshark/src/Makefile]) - AC_OUTPUT -diff --git a/docs/aclpolkit.html.in b/docs/aclpolkit.html.in -index e5a9b16..dae0814 100644 ---- a/docs/aclpolkit.html.in -+++ b/docs/aclpolkit.html.in -@@ -348,6 +348,12 @@ - lookup method. -

- -+

-+ See -+ source code -+ for a more complex example. -+

-+ -

Example: restricting ability to connect to drivers

- -

-diff --git a/examples/polkit/Makefile.am b/examples/polkit/Makefile.am -new file mode 100644 -index 0000000..4d213e8 ---- /dev/null -+++ b/examples/polkit/Makefile.am -@@ -0,0 +1,17 @@ -+## Copyright (C) 2015 Red Hat, Inc. -+## -+## This library is free software; you can redistribute it and/or -+## modify it under the terms of the GNU Lesser General Public -+## License as published by the Free Software Foundation; either -+## version 2.1 of the License, or (at your option) any later version. -+## -+## This library is distributed in the hope that it will be useful, -+## but WITHOUT ANY WARRANTY; without even the implied warranty of -+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+## Lesser General Public License for more details. -+## -+## You should have received a copy of the GNU Lesser General Public -+## License along with this library. If not, see -+## . -+ -+EXTRA_DIST = libvirt-acl.rules -diff --git a/examples/polkit/libvirt-acl.rules b/examples/polkit/libvirt-acl.rules -new file mode 100644 -index 0000000..dd68365 ---- /dev/null -+++ b/examples/polkit/libvirt-acl.rules -@@ -0,0 +1,130 @@ -+/* -+ * This example defines two groups of roles any user/group can be assigned to. -+ * An "admin" role which grants full access to all APIs on all objects to its -+ * members, and other roles which allows their members to all APIs defined in -+ * restrictedActions on domains matching a regular expressions assigned to -+ * each role. (Jump below the Role class definition to see them.) Users who -+ * belong to an "operator" role can act on any domain (matching ".*" RE), -+ * while members of "userA", "userB", and "userC" roles are limited by more -+ * specific REs. -+ * -+ * A virtualization host admin would define domains with names prefixed by -+ * customer names and create a separate role for each customer restricting -+ * its members to manage only domains with the corresponding prefix. -+ */ -+ -+function Role(name) { -+ this.name = name; -+ -+ this.users = []; -+ this.groups = []; -+ -+ this.check = function(subject, api, domain) { -+ var validUser = false -+ -+ if (this.users.indexOf(subject.user) >= 0) { -+ validUser = true; -+ } else { -+ for (var i = 0; i < subject.groups.length; i++) { -+ if (this.groups.indexOf(subject.groups[i]) >= 0) { -+ validUser = true; -+ break; -+ } -+ } -+ } -+ -+ if (validUser && -+ (this.name == "admin" || -+ !domain || -+ (this.domains && domain.match(this.domains)))) { -+ var msg = "Access granted: " + -+ "user = " + subject.user + -+ ", groups = [" + subject.groups + "]" + -+ ", role = " + this.name + -+ ", api = " + api; -+ if (domain) -+ msg += ", domain = " + domain; -+ polkit.log(msg); -+ return true -+ } -+ -+ return false; -+ }; -+} -+ -+ -+/* Basic operations and monitoring on a limited set of domains. */ -+var userA = new Role("userA"); -+userA.domains = /^a/; -+userA.users = ["userA1", "userA2", "userA3", "multiUser"]; -+userA.groups = ["groupA1", "groupA2"]; -+ -+var userB = new Role("userB"); -+userB.domains = /^b/; -+userB.users = ["userB1", "userB2", "userB3", "multiUser"]; -+userB.groups = ["groupB1", "groupB2", "multiGroup"]; -+ -+var userC = new Role("userC"); -+userC.domains = /^c/; -+userC.users = ["userC1", "userC2", "userC3"]; -+userC.groups = ["groupC1", "groupC2", "multiGroup"]; -+ -+/* Same as users but on any domain. */ -+var operator = new Role("operator"); -+operator.domains = /.*/; -+operator.users = ["powerUser1", "powerUser2"]; -+operator.groups = ["powerGroup1", "powerGroup2", "powerGroup3"]; -+ -+var users = [operator, userA, userB, userC]; -+ -+/* Full access. */ -+var admin = new Role("admin"); -+admin.users = ["adminUser1"]; -+admin.groups = ["adminGroup1"]; -+ -+ -+restrictedActions = [ -+ "domain.core-dump", -+ "domain.fs-freeze", -+ "domain.fs-trim", -+ "domain.getattr", -+ "domain.hibernate", -+ "domain.init-control", -+ "domain.inject-nmi", -+ "domain.open-device", -+ "domain.open-graphics", -+ "domain.pm-control", -+ "domain.read", -+ "domain.reset", -+ "domain.save", -+ "domain.screenshot", -+ "domain.send-input", -+ "domain.send-signal", -+ "domain.set-password", -+ "domain.set-time", -+ "domain.snapshot", -+ "domain.start", -+ "domain.stop", -+ "domain.suspend" -+]; -+ -+polkit.addRule(function(action, subject) { -+ if (action.id.indexOf("org.libvirt.api.") != 0) -+ return polkit.Result.NOT_HANDLED; -+ -+ var api = action.id.replace("org.libvirt.api.", ""); -+ var domain = action.lookup("domain_name"); -+ -+ if (admin.check(subject, api, domain)) -+ return polkit.Result.YES; -+ -+ if (restrictedActions.indexOf(api) < 0) -+ return polkit.Result.NOT_HANDLED; -+ -+ for (var i = 0; i < users.length; i++) { -+ if (users[i].check(subject, api, domain)) -+ return polkit.Result.YES; -+ } -+ -+ return polkit.Result.NO; -+}); diff --git a/SOURCES/libvirt-hostdev-skip-ACS-check-when-using-VFIO-for-device-assignment.patch b/SOURCES/libvirt-hostdev-skip-ACS-check-when-using-VFIO-for-device-assignment.patch deleted file mode 100644 index f571576..0000000 --- a/SOURCES/libvirt-hostdev-skip-ACS-check-when-using-VFIO-for-device-assignment.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 5bbe76ba6427b8c4ab500b1404275c298dd1abb4 Mon Sep 17 00:00:00 2001 -Message-Id: <5bbe76ba6427b8c4ab500b1404275c298dd1abb4@dist-git> -From: Laine Stump -Date: Wed, 2 Sep 2015 15:55:24 -0400 -Subject: [PATCH] hostdev: skip ACS check when using VFIO for device assignment - -The ACS checks are meaningless when using the more modern VFIO driver -for device assignment since VFIO has its own more complete and exact -checks, but I didn't realize that when I added support for VFIO. This -patch eliminates the ACS check when preparing PCI devices for -assignment if VFIO is being used. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1256486 - -(cherry picked from commit 108d591b1144bc6cb5d1199f6fc23ee972b76e86) - -Signed-off-by: Jiri Denemark ---- - src/util/virhostdev.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c -index 529753c..0bc5120 100644 ---- a/src/util/virhostdev.c -+++ b/src/util/virhostdev.c -@@ -1,6 +1,6 @@ - /* virhostdev.c: hostdev management - * -- * Copyright (C) 2006-2007, 2009-2013 Red Hat, Inc. -+ * Copyright (C) 2006-2007, 2009-2015 Red Hat, Inc. - * Copyright (C) 2006 Daniel P. Berrange - * Copyright (C) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. - * -@@ -230,7 +230,6 @@ virHostdevGetPCIHostDeviceList(virDomainHostdevDefPtr *hostdevs, int nhostdevs) - virObjectUnref(list); - return NULL; - } -- - if (virPCIDeviceListAdd(list, dev) < 0) { - virPCIDeviceFree(dev); - virObjectUnref(list); -@@ -579,7 +578,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr, - struct virHostdevIsPCINodeDeviceUsedData data = {hostdev_mgr, dom_name, - usesVfio}; - -- if (!virPCIDeviceIsAssignable(dev, strict_acs_check)) { -+ if (!usesVfio && !virPCIDeviceIsAssignable(dev, strict_acs_check)) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("PCI device %s is not assignable"), - virPCIDeviceGetName(dev)); --- -2.5.1 - diff --git a/SOURCES/libvirt-hvsupport-Introduce-parseSymsFile.patch b/SOURCES/libvirt-hvsupport-Introduce-parseSymsFile.patch new file mode 100644 index 0000000..e904b3e --- /dev/null +++ b/SOURCES/libvirt-hvsupport-Introduce-parseSymsFile.patch @@ -0,0 +1,225 @@ +From db426d18a3f337f699540943e0be1dabcaddd001 Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Tue, 28 Jun 2016 12:37:50 +0200 +Subject: [PATCH] hvsupport: Introduce parseSymsFile + +The code for parsing the different public syms files only differs +in the filenames and version prefix. + +Unify it to a single subroutine. + +(cherry picked from commit fa0b00f94e5173fc1c609e661d74ad9f2f81126c) + +https://bugzilla.redhat.com/show_bug.cgi?id=1286679 +Signed-off-by: Jiri Denemark +--- + docs/hvsupport.pl | 178 +++++++++++++++++------------------------------------- + 1 file changed, 55 insertions(+), 123 deletions(-) + +diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl +index 44a30ce..7a6f1ac 100755 +--- a/docs/hvsupport.pl ++++ b/docs/hvsupport.pl +@@ -44,136 +44,66 @@ find({ + push @srcs, $_ if $_ !~ /vbox_driver\.c/; + } + }, no_chdir => 1}, $srcdir); +-my $line; + +-# Get the list of all public APIs and their corresponding version ++sub parseSymsFile { ++ my $apisref = shift; ++ my $prefix = shift; ++ my $filename = shift; ++ my $xmlfilename = shift; ++ ++ my $line; ++ my $vers; ++ my $prevvers; ++ ++ my $apixpath = XML::XPath->new(filename => $xmlfilename); ++ ++ open FILE, "<$filename" ++ or die "cannot read $filename: $!"; ++ ++ while (defined($line = )) { ++ chomp $line; ++ next if $line =~ /^\s*#/; ++ next if $line =~ /^\s*$/; ++ next if $line =~ /^\s*(global|local):/; ++ if ($line =~ /^\s*${prefix}_(\d+\.\d+\.\d+)\s*{\s*$/) { ++ if (defined $vers) { ++ die "malformed syms file"; ++ } ++ $vers = $1; ++ } elsif ($line =~ /\s*}\s*;\s*$/) { ++ if (defined $prevvers) { ++ die "malformed syms file"; ++ } ++ $prevvers = $vers; ++ $vers = undef; ++ } elsif ($line =~ /\s*}\s*${prefix}_(\d+\.\d+\.\d+)\s*;\s*$/) { ++ if ($1 ne $prevvers) { ++ die "malformed syms file $1 != $vers"; ++ } ++ $prevvers = $vers; ++ $vers = undef; ++ } elsif ($line =~ /\s*(\w+)\s*;\s*$/) { ++ my $file = $apixpath->find("/api/symbols/function[\@name='$1']/\@file"); ++ $$apisref{$1} = {}; ++ $$apisref{$1}->{vers} = $vers; ++ $$apisref{$1}->{file} = $file; ++ } else { ++ die "unexpected data $line\n"; ++ } ++ } ++ ++ close FILE; ++} + + my %apis; +-open FILE, "<$symslibvirt" +- or die "cannot read $symslibvirt: $!"; +- +-my $vers; +-my $prevvers; +-my $apixpath = XML::XPath->new(filename => "$srcdir/../docs/libvirt-api.xml"); +-while (defined($line = )) { +- chomp $line; +- next if $line =~ /^\s*#/; +- next if $line =~ /^\s*$/; +- next if $line =~ /^\s*(global|local):/; +- if ($line =~ /^\s*LIBVIRT_(\d+\.\d+\.\d+)\s*{\s*$/) { +- if (defined $vers) { +- die "malformed syms file"; +- } +- $vers = $1; +- } elsif ($line =~ /\s*}\s*;\s*$/) { +- if (defined $prevvers) { +- die "malformed syms file"; +- } +- $prevvers = $vers; +- $vers = undef; +- } elsif ($line =~ /\s*}\s*LIBVIRT_(\d+\.\d+\.\d+)\s*;\s*$/) { +- if ($1 ne $prevvers) { +- die "malformed syms file $1 != $vers"; +- } +- $prevvers = $vers; +- $vers = undef; +- } elsif ($line =~ /\s*(\w+)\s*;\s*$/) { +- my $file = $apixpath->find("/api/symbols/function[\@name='$1']/\@file"); +- $apis{$1} = {}; +- $apis{$1}->{vers} = $vers; +- $apis{$1}->{file} = $file; +- } else { +- die "unexpected data $line\n"; +- } +-} +- +-close FILE; +- ++# Get the list of all public APIs and their corresponding version ++parseSymsFile(\%apis, "LIBVIRT", $symslibvirt, "$srcdir/../docs/libvirt-api.xml"); + + # And the same for the QEMU specific APIs +- +-open FILE, "<$symsqemu" +- or die "cannot read $symsqemu: $!"; +- +-$prevvers = undef; +-$vers = undef; +-$apixpath = XML::XPath->new(filename => "$srcdir/../docs/libvirt-qemu-api.xml"); +-while (defined($line = )) { +- chomp $line; +- next if $line =~ /^\s*#/; +- next if $line =~ /^\s*$/; +- next if $line =~ /^\s*(global|local):/; +- if ($line =~ /^\s*LIBVIRT_QEMU_(\d+\.\d+\.\d+)\s*{\s*$/) { +- if (defined $vers) { +- die "malformed syms file"; +- } +- $vers = $1; +- } elsif ($line =~ /\s*}\s*;\s*$/) { +- if (defined $prevvers) { +- die "malformed syms file"; +- } +- $prevvers = $vers; +- $vers = undef; +- } elsif ($line =~ /\s*}\s*LIBVIRT_QEMU_(\d+\.\d+\.\d+)\s*;\s*$/) { +- if ($1 ne $prevvers) { +- die "malformed syms file $1 != $vers"; +- } +- $prevvers = $vers; +- $vers = undef; +- } elsif ($line =~ /\s*(\w+)\s*;\s*$/) { +- my $file = $apixpath->find("/api/symbols/function[\@name='$1']/\@file"); +- $apis{$1} = {}; +- $apis{$1}->{vers} = $vers; +- $apis{$1}->{file} = $file; +- } else { +- die "unexpected data $line\n"; +- } +-} +- +-close FILE; +- ++parseSymsFile(\%apis, "LIBVIRT_QEMU", $symsqemu, "$srcdir/../docs/libvirt-qemu-api.xml"); + + # And the same for the LXC specific APIs +- +-open FILE, "<$symslxc" +- or die "cannot read $symslxc: $!"; +- +-$prevvers = undef; +-$vers = undef; +-$apixpath = XML::XPath->new(filename => "$srcdir/../docs/libvirt-lxc-api.xml"); +-while (defined($line = )) { +- chomp $line; +- next if $line =~ /^\s*#/; +- next if $line =~ /^\s*$/; +- next if $line =~ /^\s*(global|local):/; +- if ($line =~ /^\s*LIBVIRT_LXC_(\d+\.\d+\.\d+)\s*{\s*$/) { +- if (defined $vers) { +- die "malformed syms file"; +- } +- $vers = $1; +- } elsif ($line =~ /\s*}\s*;\s*$/) { +- if (defined $prevvers) { +- die "malformed syms file"; +- } +- $prevvers = $vers; +- $vers = undef; +- } elsif ($line =~ /\s*}\s*LIBVIRT_LXC_(\d+\.\d+\.\d+)\s*;\s*$/) { +- if ($1 ne $prevvers) { +- die "malformed syms file $1 != $vers"; +- } +- $prevvers = $vers; +- $vers = undef; +- } elsif ($line =~ /\s*(\w+)\s*;\s*$/) { +- my $file = $apixpath->find("/api/symbols/function[\@name='$1']/\@file"); +- $apis{$1} = {}; +- $apis{$1}->{vers} = $vers; +- $apis{$1}->{file} = $file; +- } else { +- die "unexpected data $line\n"; +- } +-} +- +-close FILE; ++parseSymsFile(\%apis, "LIBVIRT_LXC", $symslxc, "$srcdir/../docs/libvirt-lxc-api.xml"); + + + # Some special things which aren't public APIs, +@@ -206,6 +136,8 @@ $apis{virDomainMigrateConfirm3Params}->{vers} = "1.1.0"; + # and driver struct fields. This lets us later match + # update the driver impls with the public APis. + ++my $line; ++ + # Group name -> hash of APIs { fields -> api name } + my %groups; + my $ingrp; +-- +2.9.2 + diff --git a/SOURCES/libvirt-hvsupport-construct-the-group-regex-upfront.patch b/SOURCES/libvirt-hvsupport-construct-the-group-regex-upfront.patch new file mode 100644 index 0000000..c64ab56 --- /dev/null +++ b/SOURCES/libvirt-hvsupport-construct-the-group-regex-upfront.patch @@ -0,0 +1,83 @@ +From 68a5716a222f4fc8b4d8a1568a6c83cf75b860d7 Mon Sep 17 00:00:00 2001 +Message-Id: <68a5716a222f4fc8b4d8a1568a6c83cf75b860d7@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Tue, 28 Jun 2016 15:16:01 +0200 +Subject: [PATCH] hvsupport: construct the group regex upfront +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The %groups hash contains all the driver types (e.g. +virHypervisorDriver or virSecretDriver). + +When searching for all the APIs that are implemented by a driver +of that specific driver type, we keep iterating over the %groups +hash on every line we look at, then matching against the driver type. + +This is inefficient because it prevents perl from caching the regex +and it executes the regex once for every driver type, even though +one regex matching excludes all the others, since all the driver types +are different. + +Construct the regex containing all the driver types upfront to save +about 6.4s (~98%) of the script execution time. + +(cherry picked from commit 6dc1f103471518a7f7e2fefaf8f631eb6f2ca922) + +https://bugzilla.redhat.com/show_bug.cgi?id=1286679 +Signed-off-by: Jiri Denemark +--- + docs/hvsupport.pl | 31 +++++++++++++++---------------- + 1 file changed, 15 insertions(+), 16 deletions(-) + +diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl +index 7dd7c3f..fca83ca 100755 +--- a/docs/hvsupport.pl ++++ b/docs/hvsupport.pl +@@ -207,28 +207,27 @@ foreach my $src (@srcs) { + open FILE, "<$src" or + die "cannot read $src: $!"; + ++ my $groups_regex = join("|", keys %groups); + $ingrp = undef; + my $impl; + while (defined($line = )) { + if (!$ingrp) { +- foreach my $grp (keys %groups) { +- if ($line =~ /^\s*(?:static\s+)?$grp\s+(\w+)\s*=\s*{/ || +- $line =~ /^\s*(?:static\s+)?$grp\s+NAME\(\w+\)\s*=\s*{/) { +- $ingrp = $grp; +- $impl = $src; ++ if ($line =~ /^\s*(?:static\s+)?($groups_regex)\s+(\w+)\s*=\s*{/ || ++ $line =~ /^\s*(?:static\s+)?($groups_regex)\s+NAME\(\w+\)\s*=\s*{/) { ++ $ingrp = $1; ++ $impl = $src; + +- if ($impl =~ m,.*/node_device_(\w+)\.c,) { +- $impl = $1; +- } else { +- $impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,; +- } +- +- if ($groups{$ingrp}->{drivers}->{$impl}) { +- die "Group $ingrp already contains $impl"; +- } +- +- $groups{$ingrp}->{drivers}->{$impl} = {}; ++ if ($impl =~ m,.*/node_device_(\w+)\.c,) { ++ $impl = $1; ++ } else { ++ $impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,; + } ++ ++ if ($groups{$ingrp}->{drivers}->{$impl}) { ++ die "Group $ingrp already contains $impl"; ++ } ++ ++ $groups{$ingrp}->{drivers}->{$impl} = {}; + } + + } else { +-- +2.9.2 + diff --git a/SOURCES/libvirt-hvsupport-skip-non-matching-lines-early.patch b/SOURCES/libvirt-hvsupport-skip-non-matching-lines-early.patch new file mode 100644 index 0000000..4ca57b8 --- /dev/null +++ b/SOURCES/libvirt-hvsupport-skip-non-matching-lines-early.patch @@ -0,0 +1,38 @@ +From de0ffc327adf837d9daf7577421f9d50bf754077 Mon Sep 17 00:00:00 2001 +Message-Id: +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Tue, 28 Jun 2016 15:23:58 +0200 +Subject: [PATCH] hvsupport: skip non-matching lines early + +Most of the lines we look at are not going to match one of the +driver types contained in $groups_regex. + +Move on to the next line if it does not contain any of them early. +This speeds up the script execution by 50%, since this simple regex +does not have any capture groups. + +(cherry picked from commit f1bbf57caddaddeea1141bfab9699a709aa303eb) + +https://bugzilla.redhat.com/show_bug.cgi?id=1286679 +Signed-off-by: Jiri Denemark +--- + docs/hvsupport.pl | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl +index fca83ca..2ead2cf 100755 +--- a/docs/hvsupport.pl ++++ b/docs/hvsupport.pl +@@ -212,6 +212,9 @@ foreach my $src (@srcs) { + my $impl; + while (defined($line = )) { + if (!$ingrp) { ++ # skip non-matching lines early to save time ++ next if not $line =~ /$groups_regex/; ++ + if ($line =~ /^\s*(?:static\s+)?($groups_regex)\s+(\w+)\s*=\s*{/ || + $line =~ /^\s*(?:static\s+)?($groups_regex)\s+NAME\(\w+\)\s*=\s*{/) { + $ingrp = $1; +-- +2.9.2 + diff --git a/SOURCES/libvirt-hvsupport-use-a-regex-instead-of-XML-XPath.patch b/SOURCES/libvirt-hvsupport-use-a-regex-instead-of-XML-XPath.patch new file mode 100644 index 0000000..f84acf5 --- /dev/null +++ b/SOURCES/libvirt-hvsupport-use-a-regex-instead-of-XML-XPath.patch @@ -0,0 +1,113 @@ +From 9c4286543a884891a4abcf448d07927fbbc7b9e4 Mon Sep 17 00:00:00 2001 +Message-Id: <9c4286543a884891a4abcf448d07927fbbc7b9e4@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Tue, 28 Jun 2016 13:28:48 +0200 +Subject: [PATCH] hvsupport: use a regex instead of XML::XPath + +When generating the hvsupport.html.in file, we parse the -api.xml +files generated by apibuild.py to know in which HTML file the API +function is. + +Doing an XPath query for every single 'function' element in the +file is inefficient. + +Since the XML file is generated by another of our build scripts +(apibuild.py, using Python's standard 'output.write' XML library), +just find the function name->file mapping by a regex upfront. + +Also add a note about this next to the line that generates it +in apibuild.py and do not check if XML::XPath is installed in +bootstrap since we no longer use it. + +(cherry picked from commit ad9e72f5fa118d97abe60a0ea6e5dba195476fc7) + +https://bugzilla.redhat.com/show_bug.cgi?id=1286679 +Signed-off-by: Jiri Denemark +--- + bootstrap.conf | 1 - + docs/apibuild.py | 1 + + docs/hvsupport.pl | 33 ++++++++++++++++++++++++++++----- + 3 files changed, 29 insertions(+), 6 deletions(-) + +diff --git a/docs/apibuild.py b/docs/apibuild.py +index f5216ea..8728b27 100755 +--- a/docs/apibuild.py ++++ b/docs/apibuild.py +@@ -2267,6 +2267,7 @@ class docBuilder: + if name == debugsym and not quiet: + print "=>", id + ++ # NB: this is consumed by a regex in 'getAPIFilenames' in hvsupport.pl + output.write(" <%s name='%s' file='%s' module='%s'>\n" % (id.type, + name, self.modulename_file(id.header), + self.modulename_file(id.module))) +diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl +index 7a6f1ac..7dd7c3f 100755 +--- a/docs/hvsupport.pl ++++ b/docs/hvsupport.pl +@@ -4,8 +4,6 @@ use strict; + use warnings; + + use File::Find; +-use XML::XPath; +-use XML::XPath::XMLParser; + + die "syntax: $0 SRCDIR\n" unless int(@ARGV) == 1; + +@@ -45,6 +43,32 @@ find({ + } + }, no_chdir => 1}, $srcdir); + ++# Map API functions to the header and documentation files they're in ++# so that we can generate proper hyperlinks to their documentation. ++# ++# The function names are grep'd from the XML output of apibuild.py. ++sub getAPIFilenames { ++ my $filename = shift; ++ ++ my %files; ++ my $line; ++ ++ open FILE, "<", $filename or die "cannot read $filename: $!"; ++ ++ while (defined($line = )) { ++ if ($line =~ /function name='([^']+)' file='([^']+)'/) { ++ $files{$1} = $2; ++ } ++ } ++ ++ close FILE; ++ ++ if (keys %files == 0) { ++ die "No functions found in $filename. Has the apibuild.py output changed?"; ++ } ++ return \%files; ++} ++ + sub parseSymsFile { + my $apisref = shift; + my $prefix = shift; +@@ -55,7 +79,7 @@ sub parseSymsFile { + my $vers; + my $prevvers; + +- my $apixpath = XML::XPath->new(filename => $xmlfilename); ++ my $filenames = getAPIFilenames($xmlfilename); + + open FILE, "<$filename" + or die "cannot read $filename: $!"; +@@ -83,10 +107,9 @@ sub parseSymsFile { + $prevvers = $vers; + $vers = undef; + } elsif ($line =~ /\s*(\w+)\s*;\s*$/) { +- my $file = $apixpath->find("/api/symbols/function[\@name='$1']/\@file"); + $$apisref{$1} = {}; + $$apisref{$1}->{vers} = $vers; +- $$apisref{$1}->{file} = $file; ++ $$apisref{$1}->{file} = $$filenames{$1}; + } else { + die "unexpected data $line\n"; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-internal-Introduce-macro-for-stealing-pointers.patch b/SOURCES/libvirt-internal-Introduce-macro-for-stealing-pointers.patch new file mode 100644 index 0000000..d5bdf6d --- /dev/null +++ b/SOURCES/libvirt-internal-Introduce-macro-for-stealing-pointers.patch @@ -0,0 +1,43 @@ +From 42a6d5d30c4f9cca3913996f6cccf6dd383a3fd3 Mon Sep 17 00:00:00 2001 +Message-Id: <42a6d5d30c4f9cca3913996f6cccf6dd383a3fd3@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:10 -0400 +Subject: [PATCH] internal: Introduce macro for stealing pointers + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +VIR_STEAL_PTR copies the pointer from the second argument into the +first argument and then sets the second to NULL. + +(cherry picked from commit 5b7dedc995a6b33a7be33a67290155627a133a7f) +--- + src/internal.h | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/src/internal.h b/src/internal.h +index 0dc34c7..d8cc5ad 100644 +--- a/src/internal.h ++++ b/src/internal.h +@@ -307,6 +307,18 @@ + } while (0) + + /** ++ * VIR_STEAL_PTR: ++ * ++ * Steals pointer passed as second argument into the first argument. Second ++ * argument must not have side effects. ++ */ ++# define VIR_STEAL_PTR(a, b) \ ++ do { \ ++ (a) = (b); \ ++ (b) = NULL; \ ++ } while (0) ++ ++/** + * virCheckFlags: + * @supported: an OR'ed set of supported flags + * @retval: return value in case unsupported flags were passed +-- +2.10.0 + diff --git a/SOURCES/libvirt-iscsi-Establish-connection-to-target-via-static-target-login.patch b/SOURCES/libvirt-iscsi-Establish-connection-to-target-via-static-target-login.patch new file mode 100644 index 0000000..6bbc8b7 --- /dev/null +++ b/SOURCES/libvirt-iscsi-Establish-connection-to-target-via-static-target-login.patch @@ -0,0 +1,44 @@ +From c81a60b88a477a2fb8a35e53b6e4da3a6029dfd0 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 1 Aug 2016 13:31:53 -0400 +Subject: [PATCH] iscsi: Establish connection to target via static target login + +https://bugzilla.redhat.com/show_bug.cgi?id=1356436 + +Commit id '56057900' altered the discovery of iSCSI node targets by +using the "--op nonpersistent". This caused issues for clean environments +or if by chance a "-m node -o delete" was executed. + +Since each iSCSI Storage Pool has the required iSCSI target path, use +that and the virISCSINodeNew API in order to generate the iSCSI node record. + +(cherry picked from commit 5d8c31c6b202aa5ce4329042225bb40fec16baf9) +Signed-off-by: John Ferlan +--- + src/storage/storage_backend_iscsi.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c +index bb33da2..84ad6f3 100644 +--- a/src/storage/storage_backend_iscsi.c ++++ b/src/storage/storage_backend_iscsi.c +@@ -353,11 +353,10 @@ virStorageBackendISCSIStartPool(virConnectPtr conn, + if ((session = virStorageBackendISCSISession(pool, true)) == NULL) { + if ((portal = virStorageBackendISCSIPortal(&pool->def->source)) == NULL) + goto cleanup; +- /* +- * iscsiadm doesn't let you login to a target, unless you've +- * first issued a 'sendtargets' command to the portal :-( +- */ +- if (virISCSIScanTargets(portal, NULL, NULL) < 0) ++ ++ /* Create a static node record for the IQN target. Must be done ++ * in order for login to the target */ ++ if (virISCSINodeNew(portal, pool->def->source.devices[0].path) < 0) + goto cleanup; + + if (virStorageBackendISCSISetAuth(portal, conn, &pool->def->source) < 0) +-- +2.9.2 + diff --git a/SOURCES/libvirt-libvirt-convert-to-typesafe-virConf-accessors.patch b/SOURCES/libvirt-libvirt-convert-to-typesafe-virConf-accessors.patch new file mode 100644 index 0000000..ff85989 --- /dev/null +++ b/SOURCES/libvirt-libvirt-convert-to-typesafe-virConf-accessors.patch @@ -0,0 +1,291 @@ +From c70fe441c47030833541ec9401c9b6729bdae2fe Mon Sep 17 00:00:00 2001 +Message-Id: +From: "Daniel P. Berrange" +Date: Tue, 16 Aug 2016 13:06:02 +0200 +Subject: [PATCH] libvirt: convert to typesafe virConf accessors + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit f5da0d18053376cc2a80e4648c68840b801cba81) + +Although the upstream commit applied to downstream cleanly, it had to be +further modified in the way how it retrieves data from our config structure. +The original commit relied on some new accessors (wrappers) added by 6381c89f +which however was not backported. Therefore the old way of retrieving data from +the config structure by virConfGetValue had to be used. + +https://bugzilla.redhat.com/show_bug.cgi?id=1367269 +Signed-off-by: Erik Skultety +--- + src/libvirt-admin.c | 74 +++++++++++++++++++++++++++++++------------------- + src/libvirt.c | 78 +++++++++++++++++++++++++++++++++-------------------- + 2 files changed, 96 insertions(+), 56 deletions(-) + +diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c +index f07cb10..c485752 100644 +--- a/src/libvirt-admin.c ++++ b/src/libvirt-admin.c +@@ -158,35 +158,44 @@ getSocketPath(virURIPtr uri) + goto cleanup; + } + +-static const char * +-virAdmGetDefaultURI(virConfPtr conf) ++static int ++virAdmGetDefaultURI(virConfPtr conf, char **uristr) + { + virConfValuePtr value = NULL; +- const char *uristr = NULL; ++ const char *defname = virGetEnvAllowSUID("LIBVIRT_ADMIN_DEFAULT_URI"); + +- uristr = virGetEnvAllowSUID("LIBVIRT_ADMIN_DEFAULT_URI"); +- if (uristr && *uristr) { +- VIR_DEBUG("Using LIBVIRT_ADMIN_DEFAULT_URI '%s'", uristr); +- } else if ((value = virConfGetValue(conf, "admin_uri_default"))) { +- if (value->type != VIR_CONF_STRING) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("Expected a string for 'admin_uri_default' config " +- "parameter")); +- return NULL; ++ if (defname && *defname) { ++ if (VIR_STRDUP(*uristr, defname) < 0) ++ return -1; ++ VIR_DEBUG("Using LIBVIRT_ADMIN_DEFAULT_URI '%s'", *uristr); ++ } else { ++ if ((value = virConfGetValue(conf, "admin_uri_default"))) { ++ if (value->type != VIR_CONF_STRING) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("Expected a string for 'admin_uri_default' " ++ "config parameter")); ++ return -1; ++ } ++ ++ VIR_FREE(*uristr); ++ if (VIR_STRDUP(*uristr, value->str) < 0) ++ return -1; + } + +- VIR_DEBUG("Using config file uri '%s'", value->str); +- uristr = value->str; +- } else { +- /* Since we can't probe connecting via any hypervisor driver as libvirt +- * does, if no explicit URI was given and neither the environment +- * variable, nor the configuration parameter had previously been set, +- * we set the default admin server URI to 'libvirtd://system'. +- */ +- uristr = "libvirtd:///system"; ++ if (*uristr) { ++ VIR_DEBUG("Using config file uri '%s'", *uristr); ++ } else { ++ /* Since we can't probe connecting via any hypervisor driver as libvirt ++ * does, if no explicit URI was given and neither the environment ++ * variable, nor the configuration parameter had previously been set, ++ * we set the default admin server URI to 'libvirtd://system'. ++ */ ++ if (VIR_STRDUP(*uristr, "libvirtd:///system") < 0) ++ return -1; ++ } + } + +- return uristr; ++ return 0; + } + + /** +@@ -206,6 +215,7 @@ virAdmConnectOpen(const char *name, unsigned int flags) + char *alias = NULL; + virAdmConnectPtr conn = NULL; + virConfPtr conf = NULL; ++ char *uristr = NULL; + + if (virAdmInitialize() < 0) + goto error; +@@ -219,14 +229,24 @@ virAdmConnectOpen(const char *name, unsigned int flags) + if (virConfLoadConfig(&conf, "libvirt-admin.conf") < 0) + goto error; + +- if (!name && !(name = virAdmGetDefaultURI(conf))) +- goto error; ++ if (name) { ++ if (VIR_STRDUP(uristr, name) < 0) ++ goto error; ++ } else { ++ if (virAdmGetDefaultURI(conf, &uristr) < 0) ++ goto error; ++ } + + if ((!(flags & VIR_CONNECT_NO_ALIASES) && +- virURIResolveAlias(conf, name, &alias) < 0)) ++ virURIResolveAlias(conf, uristr, &alias) < 0)) + goto error; + +- if (!(conn->uri = virURIParse(alias ? alias : name))) ++ if (alias) { ++ VIR_FREE(uristr); ++ uristr = alias; ++ } ++ ++ if (!(conn->uri = virURIParse(uristr))) + goto error; + + if (!(sock_path = getSocketPath(conn->uri))) +@@ -242,7 +262,7 @@ virAdmConnectOpen(const char *name, unsigned int flags) + + cleanup: + VIR_FREE(sock_path); +- VIR_FREE(alias); ++ VIR_FREE(uristr); + virConfFree(conf); + return conn; + +diff --git a/src/libvirt.c b/src/libvirt.c +index f26eec4..215701f 100644 +--- a/src/libvirt.c ++++ b/src/libvirt.c +@@ -903,22 +903,32 @@ virGetVersion(unsigned long *libVer, const char *type ATTRIBUTE_UNUSED, + + static int + virConnectGetDefaultURI(virConfPtr conf, +- const char **name) ++ char **name) + { + int ret = -1; + virConfValuePtr value = NULL; + const char *defname = virGetEnvBlockSUID("LIBVIRT_DEFAULT_URI"); ++ + if (defname && *defname) { + VIR_DEBUG("Using LIBVIRT_DEFAULT_URI '%s'", defname); +- *name = defname; +- } else if ((value = virConfGetValue(conf, "uri_default"))) { +- if (value->type != VIR_CONF_STRING) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("Expected a string for 'uri_default' config parameter")); ++ if (VIR_STRDUP(*name, defname) < 0) + goto cleanup; ++ } else { ++ if ((value = virConfGetValue(conf, "uri_default"))) { ++ if (value->type != VIR_CONF_STRING) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("Expected a string for 'uri_default' config " ++ "parameter")); ++ goto cleanup; ++ } ++ ++ VIR_FREE(*name); ++ if (VIR_STRDUP(*name, value->str) < 0) ++ goto cleanup; + } +- VIR_DEBUG("Using config file uri '%s'", value->str); +- *name = value->str; ++ ++ if (*name) ++ VIR_DEBUG("Using config file uri '%s'", *name); + } + + ret = 0; +@@ -965,6 +975,7 @@ virConnectOpenInternal(const char *name, + int res; + virConnectPtr ret; + virConfPtr conf = NULL; ++ char *uristr = NULL; + + ret = virGetConnect(); + if (ret == NULL) +@@ -982,54 +993,61 @@ virConnectOpenInternal(const char *name, + goto failed; + } + ++ /* Convert xen -> xen:/// for back compat */ ++ if (name && STRCASEEQ(name, "xen")) ++ name = "xen:///"; ++ ++ /* Convert xen:// -> xen:/// because xmlParseURI cannot parse the ++ * former. This allows URIs such as xen://localhost to work. ++ */ ++ if (name && STREQ(name, "xen://")) ++ name = "xen:///"; ++ + /* + * If no URI is passed, then check for an environment string if not + * available probe the compiled in drivers to find a default hypervisor + * if detectable. + */ +- if (!name && +- virConnectGetDefaultURI(conf, &name) < 0) +- goto failed; +- + if (name) { +- char *alias = NULL; +- /* Convert xen -> xen:/// for back compat */ +- if (STRCASEEQ(name, "xen")) +- name = "xen:///"; ++ if (VIR_STRDUP(uristr, name) < 0) ++ goto failed; ++ } else { ++ if (virConnectGetDefaultURI(conf, &uristr) < 0) ++ goto failed; ++ } + +- /* Convert xen:// -> xen:/// because xmlParseURI cannot parse the +- * former. This allows URIs such as xen://localhost to work. +- */ +- if (STREQ(name, "xen://")) +- name = "xen:///"; ++ if (uristr) { ++ char *alias = NULL; + + if (!(flags & VIR_CONNECT_NO_ALIASES) && +- virURIResolveAlias(conf, name, &alias) < 0) ++ virURIResolveAlias(conf, uristr, &alias) < 0) + goto failed; + +- if (!(ret->uri = virURIParse(alias ? alias : name))) { ++ if (alias) { ++ VIR_FREE(uristr); ++ uristr = alias; ++ } ++ ++ if (!(ret->uri = virURIParse(uristr))) { + VIR_FREE(alias); + goto failed; + } + +- VIR_DEBUG("name \"%s\" to URI components:\n" ++ VIR_DEBUG("Split \"%s\" to URI components:\n" + " scheme %s\n" + " server %s\n" + " user %s\n" + " port %d\n" + " path %s", +- alias ? alias : name, ++ uristr, + NULLSTR(ret->uri->scheme), NULLSTR(ret->uri->server), + NULLSTR(ret->uri->user), ret->uri->port, + NULLSTR(ret->uri->path)); + +- if (virConnectCheckURIMissingSlash(alias ? alias : name, ++ if (virConnectCheckURIMissingSlash(uristr, + ret->uri) < 0) { +- VIR_FREE(alias); + goto failed; + } +- +- VIR_FREE(alias); + } else { + VIR_DEBUG("no name, allowing driver auto-select"); + } +@@ -1114,10 +1132,12 @@ virConnectOpenInternal(const char *name, + } + + virConfFree(conf); ++ VIR_FREE(uristr); + + return ret; + + failed: ++ VIR_FREE(uristr); + virConfFree(conf); + virObjectUnref(ret); + +-- +2.9.2 + diff --git a/SOURCES/libvirt-lxc-Don-t-crash-by-forgetting-to-ref-transient-domains.patch b/SOURCES/libvirt-lxc-Don-t-crash-by-forgetting-to-ref-transient-domains.patch new file mode 100644 index 0000000..4bfefc5 --- /dev/null +++ b/SOURCES/libvirt-lxc-Don-t-crash-by-forgetting-to-ref-transient-domains.patch @@ -0,0 +1,38 @@ +From b7eb93d486c0c855e6a21c5f67ed658a52a7e8fa Mon Sep 17 00:00:00 2001 +Message-Id: +From: Martin Kletzander +Date: Sun, 24 Jul 2016 09:43:35 +0200 +Subject: [PATCH] lxc: Don't crash by forgetting to ref transient domains + +So commit 306b3a8504 tried mimicking behaviour of commit 540c339a25, but +added a virObjectRef(vm) only after virDomainObjListAdd() in +lxcDomainDefineXMLFlags() and not in lxcDomainCreateXMLWithFiles(). +That way undefining a domain that was started with different XML than +defined will leave the domain object in a state with not enough +references to then remove it. Hence any lxcDomainDestroyFlags() called +afterwards crashes the daemon. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1351057 + +Signed-off-by: Martin Kletzander +(cherry picked from commit e4200bbb9d9bbc58a51ca55c6073146126447afb) +Signed-off-by: Martin Kletzander +--- + src/lxc/lxc_driver.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c +index a3fa770..80b7a5c 100644 +--- a/src/lxc/lxc_driver.c ++++ b/src/lxc/lxc_driver.c +@@ -1249,6 +1249,7 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn, + VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, + NULL))) + goto cleanup; ++ virObjectRef(vm); + def = NULL; + + if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) { +-- +2.9.2 + diff --git a/SOURCES/libvirt-lxc-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch b/SOURCES/libvirt-lxc-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch deleted file mode 100644 index 2c1c404..0000000 --- a/SOURCES/libvirt-lxc-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 5055589798e9317ae3d9772d5a774c2578c89a3d Mon Sep 17 00:00:00 2001 -Message-Id: <5055589798e9317ae3d9772d5a774c2578c89a3d@dist-git> -From: Martin Kletzander -Date: Tue, 18 Aug 2015 17:28:01 -0700 -Subject: [PATCH] lxc: Sync BlkioDevice values when setting them in cgroups - -https://bugzilla.redhat.com/show_bug.cgi?id=1165580 - -The problem here is that there are some values that kernel accepts, but -does not set them, for example 18446744073709551615 which acts the same -way as zero. Let's do the same thing we do with other tuning options -and re-read them right after they are set in order to keep our internal -structures up-to-date. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 4563c59b5b40f40f90c0579f5e2fcdd29c414265) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/lxc/lxc_cgroup.c | 20 +++++++++++++++----- - src/lxc/lxc_driver.c | 25 ++++++++++++++++++++----- - 2 files changed, 35 insertions(+), 10 deletions(-) - -diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c -index e9caa3e..ad254e4 100644 ---- a/src/lxc/lxc_cgroup.c -+++ b/src/lxc/lxc_cgroup.c -@@ -117,27 +117,37 @@ static int virLXCCgroupSetupBlkioTune(virDomainDefPtr def, - - if (dev->weight && - (virCgroupSetBlkioDeviceWeight(cgroup, dev->path, -- dev->weight) < 0)) -+ dev->weight) < 0 || -+ virCgroupGetBlkioDeviceWeight(cgroup, dev->path, -+ &dev->weight) < 0)) - return -1; - - if (dev->riops && - (virCgroupSetBlkioDeviceReadIops(cgroup, dev->path, -- dev->riops) < 0)) -+ dev->riops) < 0 || -+ virCgroupGetBlkioDeviceReadIops(cgroup, dev->path, -+ &dev->riops) < 0)) - return -1; - - if (dev->wiops && - (virCgroupSetBlkioDeviceWriteIops(cgroup, dev->path, -- dev->wiops) < 0)) -+ dev->wiops) < 0 || -+ virCgroupGetBlkioDeviceWriteIops(cgroup, dev->path, -+ &dev->wiops) < 0)) - return -1; - - if (dev->rbps && - (virCgroupSetBlkioDeviceReadBps(cgroup, dev->path, -- dev->rbps) < 0)) -+ dev->rbps) < 0 || -+ virCgroupGetBlkioDeviceReadBps(cgroup, dev->path, -+ &dev->rbps) < 0)) - return -1; - - if (dev->wbps && - (virCgroupSetBlkioDeviceWriteBps(cgroup, dev->path, -- dev->wbps) < 0)) -+ dev->wbps) < 0 || -+ virCgroupGetBlkioDeviceWriteBps(cgroup, dev->path, -+ &dev->wbps) < 0)) - return -1; - } - } -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index d8d5119..1a7cc78 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -2603,7 +2603,10 @@ lxcDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceWeight(priv->cgroup, - devices[j].path, -- devices[j].weight) < 0) { -+ devices[j].weight) < 0 || -+ virCgroupGetBlkioDeviceWeight(priv->cgroup, -+ devices[j].path, -+ &devices[j].weight) < 0) { - ret = -1; - break; - } -@@ -2612,7 +2615,10 @@ lxcDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceReadIops(priv->cgroup, - devices[j].path, -- devices[j].riops) < 0) { -+ devices[j].riops) < 0 || -+ virCgroupGetBlkioDeviceReadIops(priv->cgroup, -+ devices[j].path, -+ &devices[j].riops) < 0) { - ret = -1; - break; - } -@@ -2621,7 +2627,10 @@ lxcDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceWriteIops(priv->cgroup, - devices[j].path, -- devices[j].wiops) < 0) { -+ devices[j].wiops) < 0 || -+ virCgroupGetBlkioDeviceWriteIops(priv->cgroup, -+ devices[j].path, -+ &devices[j].wiops) < 0) { - ret = -1; - break; - } -@@ -2630,7 +2639,10 @@ lxcDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceReadBps(priv->cgroup, - devices[j].path, -- devices[j].rbps) < 0) { -+ devices[j].rbps) < 0 || -+ virCgroupGetBlkioDeviceReadBps(priv->cgroup, -+ devices[j].path, -+ &devices[j].rbps) < 0) { - ret = -1; - break; - } -@@ -2639,7 +2651,10 @@ lxcDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceWriteBps(priv->cgroup, - devices[j].path, -- devices[j].wbps) < 0) { -+ devices[j].wbps) < 0 || -+ virCgroupGetBlkioDeviceWriteBps(priv->cgroup, -+ devices[j].path, -+ &devices[j].wbps) < 0) { - ret = -1; - break; - } --- -2.5.1 - diff --git a/SOURCES/libvirt-lxcDomainCreateXMLWithFiles-Avoid-crash.patch b/SOURCES/libvirt-lxcDomainCreateXMLWithFiles-Avoid-crash.patch new file mode 100644 index 0000000..91def75 --- /dev/null +++ b/SOURCES/libvirt-lxcDomainCreateXMLWithFiles-Avoid-crash.patch @@ -0,0 +1,55 @@ +From 00cc1b75dd5933bc68236ebc417fc816c4f45651 Mon Sep 17 00:00:00 2001 +Message-Id: <00cc1b75dd5933bc68236ebc417fc816c4f45651@dist-git> +From: Michal Privoznik +Date: Fri, 5 Aug 2016 16:34:37 +0200 +Subject: [PATCH] lxcDomainCreateXMLWithFiles: Avoid crash + +https://bugzilla.redhat.com/show_bug.cgi?id=1363773 + +Imagine that you're creating a transient domain, but for some reason, +starting it fails. That is virLXCProcessStart() returns an error. With +current code, in the error handling code the domain object is removed +from the domain object list, @vm is set to NULL and controls jump to +enjob label where virLXCDomainObjEndJob() is called which dereference vm +leading to instant crash. + +The fix is to end the job in the error handling code and only after that +remove the domain from the list and jump onto cleanup label instead of +endjob. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 5f5a5a42e5146336430b9284539d4bff3e8bb598) +Signed-off-by: Michal Privoznik +--- + src/lxc/lxc_driver.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c +index 80b7a5c..d47f215 100644 +--- a/src/lxc/lxc_driver.c ++++ b/src/lxc/lxc_driver.c +@@ -1265,11 +1265,12 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn, + (flags & VIR_DOMAIN_START_AUTODESTROY), + VIR_DOMAIN_RUNNING_BOOTED) < 0) { + virDomainAuditStart(vm, "booted", false); ++ virLXCDomainObjEndJob(driver, vm); + if (!vm->persistent) { + virDomainObjListRemove(driver->domains, vm); + vm = NULL; + } +- goto endjob; ++ goto cleanup; + } + + event = virDomainEventLifecycleNewFromObj(vm, +@@ -1281,7 +1282,6 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn, + if (dom) + dom->id = vm->def->id; + +- endjob: + virLXCDomainObjEndJob(driver, vm); + + cleanup: +-- +2.9.2 + diff --git a/SOURCES/libvirt-monitor-detect-that-eject-fails-because-the-tray-is-locked.patch b/SOURCES/libvirt-monitor-detect-that-eject-fails-because-the-tray-is-locked.patch deleted file mode 100644 index 6ec930a..0000000 --- a/SOURCES/libvirt-monitor-detect-that-eject-fails-because-the-tray-is-locked.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 0ef69d9942be58851bdbfca900274aa24c871812 Mon Sep 17 00:00:00 2001 -Message-Id: <0ef69d9942be58851bdbfca900274aa24c871812@dist-git> -From: Pavel Hrdina -Date: Fri, 10 Jul 2015 12:39:31 +0200 -Subject: [PATCH] monitor: detect that eject fails because the tray is locked - -Modify the eject monitor functions to parse the return code and detect, -whether the error contains "is locked" to report this type of failure to -upper layers. - -Signed-off-by: Pavel Hrdina -(cherry picked from commit 256496e1499fcc7b20a51919eb4471987a36dbab) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1147471 - -Signed-off-by: Pavel Hrdina -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_monitor_json.c | 14 ++++++++++++++ - src/qemu/qemu_monitor_text.c | 10 ++++++++++ - 2 files changed, 24 insertions(+) - -diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c -index 4323c2a..4040ff0 100644 ---- a/src/qemu/qemu_monitor_json.c -+++ b/src/qemu/qemu_monitor_json.c -@@ -44,6 +44,7 @@ - #include "virprobe.h" - #include "virstring.h" - #include "cpu/cpu_x86.h" -+#include "c-strcasestr.h" - - #ifdef WITH_DTRACE_PROBES - # include "libvirt_qemu_probes.h" -@@ -2209,6 +2210,14 @@ int qemuMonitorJSONSetCPU(qemuMonitorPtr mon, - } - - -+/** -+ * Run QMP command to eject a media from ejectable device. -+ * -+ * Returns: -+ * -2 on error, when the tray is locked -+ * -1 on all other errors -+ * 0 on success -+ */ - int qemuMonitorJSONEjectMedia(qemuMonitorPtr mon, - const char *dev_name, - bool force) -@@ -2227,6 +2236,11 @@ int qemuMonitorJSONEjectMedia(qemuMonitorPtr mon, - if (ret == 0) - ret = qemuMonitorJSONCheckError(cmd, reply); - -+ VIR_DEBUG("%s", virJSONValueToString(reply, false)); -+ -+ if (ret < 0 && c_strcasestr(virJSONValueToString(reply, false), "is locked")) -+ ret = -2; -+ - virJSONValueFree(cmd); - virJSONValueFree(reply); - return ret; -diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c -index 2e77534..2aa0460 100644 ---- a/src/qemu/qemu_monitor_text.c -+++ b/src/qemu/qemu_monitor_text.c -@@ -1169,6 +1169,14 @@ int qemuMonitorTextSetCPU(qemuMonitorPtr mon, int cpu, bool online) - } - - -+/** -+ * Run HMP command to eject a media from ejectable device. -+ * -+ * Returns: -+ * -2 on error, when the tray is locked -+ * -1 on all other errors -+ * 0 on success -+ */ - int qemuMonitorTextEjectMedia(qemuMonitorPtr mon, - const char *dev_name, - bool force) -@@ -1187,6 +1195,8 @@ int qemuMonitorTextEjectMedia(qemuMonitorPtr mon, - * device not found, device is locked ... - * No message is printed on success it seems */ - if (c_strcasestr(reply, "device ")) { -+ if (c_strcasestr(reply, "is locked")) -+ ret = -2; - virReportError(VIR_ERR_OPERATION_FAILED, - _("could not eject media on %s: %s"), dev_name, reply); - goto cleanup; --- -2.4.5 - diff --git a/SOURCES/libvirt-network-Add-another-collision-check-into-networkCheckRouteCollision.patch b/SOURCES/libvirt-network-Add-another-collision-check-into-networkCheckRouteCollision.patch deleted file mode 100644 index 15e40eb..0000000 --- a/SOURCES/libvirt-network-Add-another-collision-check-into-networkCheckRouteCollision.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 83e667d206d16867cfc640b118a37e46d1ef897d Mon Sep 17 00:00:00 2001 -Message-Id: <83e667d206d16867cfc640b118a37e46d1ef897d@dist-git> -From: Martin Kletzander -Date: Thu, 6 Aug 2015 13:10:24 +0200 -Subject: [PATCH] network: Add another collision check into - networkCheckRouteCollision - -The comment above that function says: "This function can be a lot more -exhaustive, ...", so let's be. - -Check for collisions between routes in the system and static routes -being added explicitly from the element of the network XML. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1094205 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 0e3ad241f3f421c23bbe2cbe11a70f8e9184dc65) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/network/bridge_driver_linux.c | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/src/network/bridge_driver_linux.c b/src/network/bridge_driver_linux.c -index e394daf..bd7508c 100644 ---- a/src/network/bridge_driver_linux.c -+++ b/src/network/bridge_driver_linux.c -@@ -69,6 +69,7 @@ int networkCheckRouteCollision(virNetworkDefPtr def) - char iface[17], dest[128], mask[128]; - unsigned int addr_val, mask_val; - virNetworkIpDefPtr ipdef; -+ virNetworkRouteDefPtr routedef; - int num; - size_t i; - -@@ -123,6 +124,34 @@ int networkCheckRouteCollision(virNetworkDefPtr def) - goto out; - } - } -+ -+ for (i = 0; -+ (routedef = virNetworkDefGetRouteByIndex(def, AF_INET, i)); -+ i++) { -+ -+ virSocketAddr r_mask, r_addr; -+ virSocketAddrPtr tmp_addr = virNetworkRouteDefGetAddress(routedef); -+ int r_prefix = virNetworkRouteDefGetPrefix(routedef); -+ -+ if (!tmp_addr || -+ virSocketAddrMaskByPrefix(tmp_addr, r_prefix, &r_addr) < 0 || -+ virSocketAddrPrefixToNetmask(r_prefix, &r_mask, AF_INET) < 0) -+ continue; -+ -+ if ((r_addr.data.inet4.sin_addr.s_addr == addr_val) && -+ (r_mask.data.inet4.sin_addr.s_addr == mask_val)) { -+ char *addr_str = virSocketAddrFormat(&r_addr); -+ if (!addr_str) -+ virResetLastError(); -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Route address '%s' conflicts " -+ "with IP address for '%s'"), -+ NULLSTR(addr_str), iface); -+ VIR_FREE(addr_str); -+ ret = -1; -+ goto out; -+ } -+ } - } - - out: --- -2.5.0 - diff --git a/SOURCES/libvirt-network-new-network-forward-mode-open.patch b/SOURCES/libvirt-network-new-network-forward-mode-open.patch new file mode 100644 index 0000000..fba4a3f --- /dev/null +++ b/SOURCES/libvirt-network-new-network-forward-mode-open.patch @@ -0,0 +1,416 @@ +From b238953664fffd85c3dc35554ba7ab62638aeb5e Mon Sep 17 00:00:00 2001 +Message-Id: +From: Laine Stump +Date: Sat, 27 Aug 2016 12:28:08 -0400 +Subject: [PATCH] network: new network forward mode 'open' + +The new forward mode 'open' is just like mode='route', except that no +firewall rules are added to assure that any traffic does or doesn't +pass. It is assumed that either they aren't necessary, or they will be +setup outside the scope of libvirt. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=846810 + +(cherry picked from commit 25e8112d7c32ab271b9cae28f3ccbf5835206693) +--- + docs/formatnetwork.html.in | 22 ++++++++++++ + docs/schemas/network.rng | 1 + + src/conf/network_conf.c | 25 +++++++++++-- + src/conf/network_conf.h | 1 + + src/network/bridge_driver.c | 41 +++++++++++++++------- + tests/networkxml2confdata/open-network.conf | 11 ++++++ + tests/networkxml2confdata/open-network.xml | 9 +++++ + tests/networkxml2conftest.c | 1 + + .../open-network-with-forward-dev.xml | 9 +++++ + tests/networkxml2xmlin/open-network.xml | 9 +++++ + tests/networkxml2xmlout/open-network.xml | 9 +++++ + tests/networkxml2xmltest.c | 2 ++ + 12 files changed, 125 insertions(+), 15 deletions(-) + create mode 100644 tests/networkxml2confdata/open-network.conf + create mode 100644 tests/networkxml2confdata/open-network.xml + create mode 100644 tests/networkxml2xmlin/open-network-with-forward-dev.xml + create mode 100644 tests/networkxml2xmlin/open-network.xml + create mode 100644 tests/networkxml2xmlout/open-network.xml + +diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in +index 1cea931..619b10e 100644 +--- a/docs/formatnetwork.html.in ++++ b/docs/formatnetwork.html.in +@@ -250,6 +250,28 @@ + Since 0.4.2 +

+ ++
open
++
++ As with mode='route', guest network traffic will be ++ forwarded to the physical network via the host's IP ++ routing stack, but there will be no firewall rules added ++ to either enable or prevent any of this traffic. When ++ forward='open' is set, the dev attribute ++ cannot be set (because the forward dev is enforced with ++ firewall rules, and the purpose of forward='open' is to ++ have a forwarding mode where libvirt doesn't add any ++ firewall rules). This mode presumes that the local LAN ++ router has suitable routing table entries to return ++ traffic to this host, and that some other management ++ system has been used to put in place any necessary ++ firewall rules. Although no firewall rules will be added ++ for the network, it is of course still possible to add ++ restrictions for specific guests using ++ nwfilter rules on the ++ guests' interfaces.) ++ Since 2.2.0 ++
++ +
bridge
+
+ This network describes either 1) an existing host bridge +diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng +index 4edb6eb..8a1be68 100644 +--- a/docs/schemas/network.rng ++++ b/docs/schemas/network.rng +@@ -101,6 +101,7 @@ + + nat + route ++ open + bridge + passthrough + private +diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c +index 2d904df..1990cfc 100644 +--- a/src/conf/network_conf.c ++++ b/src/conf/network_conf.c +@@ -57,7 +57,9 @@ struct _virNetworkObjList { + + VIR_ENUM_IMPL(virNetworkForward, + VIR_NETWORK_FORWARD_LAST, +- "none", "nat", "route", "bridge", "private", "vepa", "passthrough", "hostdev") ++ "none", "nat", "route", "open", ++ "bridge", "private", "vepa", "passthrough", ++ "hostdev") + + VIR_ENUM_IMPL(virNetworkBridgeMACTableManager, + VIR_NETWORK_BRIDGE_MAC_TABLE_MANAGER_LAST, +@@ -2329,6 +2331,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) + + case VIR_NETWORK_FORWARD_ROUTE: + case VIR_NETWORK_FORWARD_NAT: ++ case VIR_NETWORK_FORWARD_OPEN: + /* It's pointless to specify L3 forwarding without specifying + * the network we're on. + */ +@@ -2347,6 +2350,19 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) + def->name); + goto error; + } ++ ++ if (def->forward.type == VIR_NETWORK_FORWARD_OPEN && def->forward.nifs) { ++ /* an open network by definition can't place any restrictions ++ * on what traffic is allowed or where it goes, so specifying ++ * a forwarding device is nonsensical. ++ */ ++ virReportError(VIR_ERR_XML_ERROR, ++ _("forward dev not allowed for " ++ "network '%s' with forward mode='%s'"), ++ def->name, ++ virNetworkForwardTypeToString(def->forward.type)); ++ goto error; ++ } + break; + + case VIR_NETWORK_FORWARD_PRIVATE: +@@ -2820,13 +2836,15 @@ virNetworkDefFormatBuf(virBufferPtr buf, + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || + def->forward.type == VIR_NETWORK_FORWARD_ROUTE || ++ def->forward.type == VIR_NETWORK_FORWARD_OPEN || + def->bridge || def->macTableManager) { + + virBufferAddLit(buf, "bridge); + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || +- def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { ++ def->forward.type == VIR_NETWORK_FORWARD_ROUTE || ++ def->forward.type == VIR_NETWORK_FORWARD_OPEN) { + virBufferAsprintf(buf, " stp='%s' delay='%ld'", + def->stp ? "on" : "off", def->delay); + } +@@ -3199,7 +3217,8 @@ virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, + + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || +- def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { ++ def->forward.type == VIR_NETWORK_FORWARD_ROUTE || ++ def->forward.type == VIR_NETWORK_FORWARD_OPEN) { + + if (!def->mac_specified) { + virNetworkSetBridgeMacAddr(def); +diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h +index e7ce674..bba99e2 100644 +--- a/src/conf/network_conf.h ++++ b/src/conf/network_conf.h +@@ -46,6 +46,7 @@ typedef enum { + VIR_NETWORK_FORWARD_NONE = 0, + VIR_NETWORK_FORWARD_NAT, + VIR_NETWORK_FORWARD_ROUTE, ++ VIR_NETWORK_FORWARD_OPEN, + VIR_NETWORK_FORWARD_BRIDGE, + VIR_NETWORK_FORWARD_PRIVATE, + VIR_NETWORK_FORWARD_VEPA, +diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c +index 0221a38..c6ab6a1 100644 +--- a/src/network/bridge_driver.c ++++ b/src/network/bridge_driver.c +@@ -400,6 +400,7 @@ networkUpdateState(virNetworkObjPtr obj, + case VIR_NETWORK_FORWARD_NONE: + case VIR_NETWORK_FORWARD_NAT: + case VIR_NETWORK_FORWARD_ROUTE: ++ case VIR_NETWORK_FORWARD_OPEN: + /* If bridge doesn't exist, then mark it inactive */ + if (!(obj->def->bridge && virNetDevExists(obj->def->bridge) == 1)) + obj->active = 0; +@@ -1815,7 +1816,8 @@ networkRefreshDaemonsHelper(virNetworkObjPtr net, + if (virNetworkObjIsActive(net) && + ((net->def->forward.type == VIR_NETWORK_FORWARD_NONE) || + (net->def->forward.type == VIR_NETWORK_FORWARD_NAT) || +- (net->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) { ++ (net->def->forward.type == VIR_NETWORK_FORWARD_ROUTE) || ++ (net->def->forward.type == VIR_NETWORK_FORWARD_OPEN))) { + /* Only the three L3 network types that are configured by + * libvirt will have a dnsmasq or radvd daemon associated + * with them. Here we send a SIGHUP to an existing +@@ -1851,8 +1853,10 @@ networkReloadFirewallRulesHelper(virNetworkObjPtr net, + ((net->def->forward.type == VIR_NETWORK_FORWARD_NONE) || + (net->def->forward.type == VIR_NETWORK_FORWARD_NAT) || + (net->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) { +- /* Only the three L3 network types that are configured by libvirt +- * need to have iptables rules reloaded. ++ /* Only three of the L3 network types that are configured by ++ * libvirt need to have iptables rules reloaded. The 4th L3 ++ * network type, forward='open', doesn't need this because it ++ * has no iptables rules. + */ + networkRemoveFirewallRules(net->def); + if (networkAddFirewallRules(net->def) < 0) { +@@ -2135,7 +2139,8 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, + goto err1; + + /* Add "once per network" rules */ +- if (networkAddFirewallRules(network->def) < 0) ++ if (network->def->forward.type != VIR_NETWORK_FORWARD_OPEN && ++ networkAddFirewallRules(network->def) < 0) + goto err1; + + for (i = 0; +@@ -2237,7 +2242,8 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, + err2: + if (!save_err) + save_err = virSaveLastError(); +- networkRemoveFirewallRules(network->def); ++ if (network->def->forward.type != VIR_NETWORK_FORWARD_OPEN) ++ networkRemoveFirewallRules(network->def); + + err1: + if (!save_err) +@@ -2293,7 +2299,8 @@ networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver, + + ignore_value(virNetDevSetOnline(network->def->bridge, 0)); + +- networkRemoveFirewallRules(network->def); ++ if (network->def->forward.type != VIR_NETWORK_FORWARD_OPEN) ++ networkRemoveFirewallRules(network->def); + + ignore_value(virNetDevBridgeDelete(network->def->bridge)); + +@@ -2400,6 +2407,7 @@ networkCreateInterfacePool(virNetworkDefPtr netdef) + case VIR_NETWORK_FORWARD_NONE: + case VIR_NETWORK_FORWARD_NAT: + case VIR_NETWORK_FORWARD_ROUTE: ++ case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_LAST: + /* by definition these will never be encountered here */ + break; +@@ -2493,6 +2501,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, + case VIR_NETWORK_FORWARD_NONE: + case VIR_NETWORK_FORWARD_NAT: + case VIR_NETWORK_FORWARD_ROUTE: ++ case VIR_NETWORK_FORWARD_OPEN: + if (networkStartNetworkVirtual(driver, network) < 0) + goto cleanup; + break; +@@ -2571,6 +2580,7 @@ networkShutdownNetwork(virNetworkDriverStatePtr driver, + case VIR_NETWORK_FORWARD_NONE: + case VIR_NETWORK_FORWARD_NAT: + case VIR_NETWORK_FORWARD_ROUTE: ++ case VIR_NETWORK_FORWARD_OPEN: + ret = networkShutdownNetworkVirtual(driver, network); + break; + +@@ -2919,7 +2929,8 @@ networkValidate(virNetworkDriverStatePtr driver, + */ + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || +- def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { ++ def->forward.type == VIR_NETWORK_FORWARD_ROUTE || ++ def->forward.type == VIR_NETWORK_FORWARD_OPEN) { + + /* if no bridge name was given in the config, find a name + * unused by any other libvirt networks and assign it. +@@ -3360,8 +3371,10 @@ networkUpdate(virNetworkPtr net, + * old rules (and remember to load new ones after the + * update). + */ +- networkRemoveFirewallRules(network->def); +- needFirewallRefresh = true; ++ if (network->def->forward.type != VIR_NETWORK_FORWARD_OPEN) { ++ networkRemoveFirewallRules(network->def); ++ needFirewallRefresh = true; ++ } + break; + default: + break; +@@ -4037,7 +4050,8 @@ networkAllocateActualDevice(virDomainDefPtr dom, + + if ((netdef->forward.type == VIR_NETWORK_FORWARD_NONE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_NAT) || +- (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE)) { ++ (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE) || ++ (netdef->forward.type == VIR_NETWORK_FORWARD_OPEN)) { + /* for these forward types, the actual net type really *is* + * NETWORK; we just keep the info from the portgroup in + * iface->data.network.actual +@@ -4581,7 +4595,8 @@ networkReleaseActualDevice(virDomainDefPtr dom, + if (iface->data.network.actual && + (netdef->forward.type == VIR_NETWORK_FORWARD_NONE || + netdef->forward.type == VIR_NETWORK_FORWARD_NAT || +- netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE) && ++ netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE || ++ netdef->forward.type == VIR_NETWORK_FORWARD_OPEN) && + networkUnplugBandwidth(network, iface) < 0) + goto error; + +@@ -4728,6 +4743,7 @@ networkGetNetworkAddress(const char *netname, char **netaddr) + case VIR_NETWORK_FORWARD_NONE: + case VIR_NETWORK_FORWARD_NAT: + case VIR_NETWORK_FORWARD_ROUTE: ++ case VIR_NETWORK_FORWARD_OPEN: + ipdef = virNetworkDefGetIPByIndex(netdef, AF_UNSPEC, 0); + if (!ipdef) { + virReportError(VIR_ERR_INTERNAL_ERROR, +@@ -4811,7 +4827,8 @@ networkGetActualType(virDomainNetDefPtr iface) + + if ((netdef->forward.type == VIR_NETWORK_FORWARD_NONE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_NAT) || +- (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE)) { ++ (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE) || ++ (netdef->forward.type == VIR_NETWORK_FORWARD_OPEN)) { + /* for these forward types, the actual net type really *is* + * NETWORK; we just keep the info from the portgroup in + * iface->data.network.actual +diff --git a/tests/networkxml2confdata/open-network.conf b/tests/networkxml2confdata/open-network.conf +new file mode 100644 +index 0000000..ff09984 +--- /dev/null ++++ b/tests/networkxml2confdata/open-network.conf +@@ -0,0 +1,11 @@ ++##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE ++##OVERWRITTEN AND LOST. Changes to this configuration should be made using: ++## virsh net-edit open ++## or other application using the libvirt API. ++## ++## dnsmasq conf file created by libvirt ++strict-order ++except-interface=lo ++bind-dynamic ++interface=virbr1 ++addn-hosts=/var/lib/libvirt/dnsmasq/open.addnhosts +diff --git a/tests/networkxml2confdata/open-network.xml b/tests/networkxml2confdata/open-network.xml +new file mode 100644 +index 0000000..e0b3f03 +--- /dev/null ++++ b/tests/networkxml2confdata/open-network.xml +@@ -0,0 +1,9 @@ ++ ++ open ++ 81ff0d90-c91e-6742-64da-4a736edb9a9b ++ ++ ++ ++ ++ ++ +diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c +index 11e08c0..77acc53 100644 +--- a/tests/networkxml2conftest.c ++++ b/tests/networkxml2conftest.c +@@ -117,6 +117,7 @@ mymain(void) + DO_TEST("nat-network-dns-srv-record-minimal", restricted); + DO_TEST("nat-network-name-with-quotes", restricted); + DO_TEST("routed-network", full); ++ DO_TEST("open-network", full); + DO_TEST("nat-network", dhcpv6); + DO_TEST("nat-network-dns-txt-record", full); + DO_TEST("nat-network-dns-srv-record", full); +diff --git a/tests/networkxml2xmlin/open-network-with-forward-dev.xml b/tests/networkxml2xmlin/open-network-with-forward-dev.xml +new file mode 100644 +index 0000000..33e8bb5 +--- /dev/null ++++ b/tests/networkxml2xmlin/open-network-with-forward-dev.xml +@@ -0,0 +1,9 @@ ++ ++ open ++ 81ff0d90-c91e-6742-64da-4a736edb9a9b ++ ++ ++ ++ ++ ++ +diff --git a/tests/networkxml2xmlin/open-network.xml b/tests/networkxml2xmlin/open-network.xml +new file mode 100644 +index 0000000..2e4b9b2 +--- /dev/null ++++ b/tests/networkxml2xmlin/open-network.xml +@@ -0,0 +1,9 @@ ++ ++ open ++ 81ff0d90-c91e-6742-64da-4a736edb9a9b ++ ++ ++ ++ ++ ++ +diff --git a/tests/networkxml2xmlout/open-network.xml b/tests/networkxml2xmlout/open-network.xml +new file mode 100644 +index 0000000..29e9684 +--- /dev/null ++++ b/tests/networkxml2xmlout/open-network.xml +@@ -0,0 +1,9 @@ ++ ++ open ++ 81ff0d90-c91e-6742-64da-4a736edb9a9b ++ ++ ++ ++ ++ ++ +diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c +index d65f6aa..9114c1e 100644 +--- a/tests/networkxml2xmltest.c ++++ b/tests/networkxml2xmltest.c +@@ -127,6 +127,8 @@ mymain(void) + DO_TEST("empty-allow-ipv6"); + DO_TEST("isolated-network"); + DO_TEST("routed-network"); ++ DO_TEST("open-network"); ++ DO_TEST_PARSE_ERROR("open-network-with-forward-dev"); + DO_TEST("nat-network"); + DO_TEST("netboot-network"); + DO_TEST("netboot-proxy-network"); +-- +2.10.0 + diff --git a/SOURCES/libvirt-network-validate-network-NAT-range.patch b/SOURCES/libvirt-network-validate-network-NAT-range.patch deleted file mode 100644 index 27128b5..0000000 --- a/SOURCES/libvirt-network-validate-network-NAT-range.patch +++ /dev/null @@ -1,400 +0,0 @@ -From b65e25e3132c9b5b0942b138231440bc8d4dd873 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Laine Stump -Date: Mon, 10 Aug 2015 13:43:38 -0400 -Subject: [PATCH] network: validate network NAT range - -This patch modifies virSocketAddrGetRange() to function properly when -the containing network/prefix of the address range isn't known, for -example in the case of the NAT range of a virtual network (since it is -a range of addresses on the *host*, not within the network itself). We -then take advantage of this new functionality to validate the NAT -range of a virtual network. - -Extra test cases are also added to verify that virSocketAddrGetRange() -works properly in both positive and negative cases when the network -pointer is NULL. - -This is the *real* fix for: - -https://bugzilla.redhat.com/show_bug.cgi?id=985653 - -Commits 1e334a and 48e8b9 had earlier been pushed as fixes for that -bug, but I had neglected to read the report carefully, so instead of -fixing validation for the NAT range, I had fixed validation for the -DHCP range. sigh. - -(cherry picked from commit a6f9af8292b6462e509892b3a16acbcaaef61e4e) - -Signed-off-by: Jiri Denemark ---- - src/conf/network_conf.c | 4 ++ - src/util/virsocketaddr.c | 184 ++++++++++++++++++++++++----------------------- - tests/sockettest.c | 46 +++++++++++- - 3 files changed, 144 insertions(+), 90 deletions(-) - -diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c -index 0ebb373..b03c2fd 100644 ---- a/src/conf/network_conf.c -+++ b/src/conf/network_conf.c -@@ -1729,6 +1729,10 @@ virNetworkForwardNatDefParseXML(const char *networkName, - goto cleanup; - } - -+ /* verify that start <= end */ -+ if (virSocketAddrGetRange(&def->addr.start, &def->addr.end, NULL, 0) < 0) -+ goto cleanup; -+ - /* ports for SNAT and MASQUERADE */ - nNatPorts = virXPathNodeSet("./port", ctxt, &natPortNodes); - if (nNatPorts < 0) { -diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c -index 81539b3..900aa5b 100644 ---- a/src/util/virsocketaddr.c -+++ b/src/util/virsocketaddr.c -@@ -628,126 +628,136 @@ virSocketAddrGetRange(virSocketAddrPtr start, virSocketAddrPtr end, - virSocketAddr netmask; - char *startStr = NULL, *endStr = NULL, *netStr = NULL; - -- if (start == NULL || end == NULL || network == NULL) { -+ if (start == NULL || end == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("NULL argument - %p %p %p"), start, end, network); -+ _("NULL argument - %p %p"), start, end); - goto error; - } - - startStr = virSocketAddrFormat(start); - endStr = virSocketAddrFormat(end); -- netStr = virSocketAddrFormat(network); -- if (!(startStr && endStr && netStr)) -+ if (!startStr || !endStr) - goto error; /*error already reported */ - -- if (VIR_SOCKET_ADDR_FAMILY(start) != VIR_SOCKET_ADDR_FAMILY(end) || -- VIR_SOCKET_ADDR_FAMILY(start) != VIR_SOCKET_ADDR_FAMILY(network)) { -+ if (VIR_SOCKET_ADDR_FAMILY(start) != VIR_SOCKET_ADDR_FAMILY(end)) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("mismatch of address family in " -- "range %s - %s for network %s"), -- startStr, endStr, netStr); -+ _("mismatch of address family in range %s - %s"), -+ startStr, endStr); - goto error; - } - -- if (prefix < 0 || -- virSocketAddrPrefixToNetmask(prefix, &netmask, -- VIR_SOCKET_ADDR_FAMILY(network)) < 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("bad prefix %d for network %s when " -- " checking range %s - %s"), -- prefix, netStr, startStr, endStr); -- goto error; -- } -+ if (network) { -+ /* some checks can only be done if we have details of the -+ * network the range should be within -+ */ -+ if (!(netStr = virSocketAddrFormat(network))) -+ goto error; - -- /* both start and end of range need to be in the same network as -- * "network" -- */ -- if (virSocketAddrCheckNetmask(start, network, &netmask) <= 0 || -- virSocketAddrCheckNetmask(end, network, &netmask) <= 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("range %s - %s is not entirely within " -- "network %s/%d"), -- startStr, endStr, netStr, prefix); -- goto error; -+ if (VIR_SOCKET_ADDR_FAMILY(start) != VIR_SOCKET_ADDR_FAMILY(network)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("mismatch of address family in " -+ "range %s - %s for network %s"), -+ startStr, endStr, netStr); -+ goto error; -+ } -+ -+ if (prefix < 0 || -+ virSocketAddrPrefixToNetmask(prefix, &netmask, -+ VIR_SOCKET_ADDR_FAMILY(network)) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("bad prefix %d for network %s when " -+ " checking range %s - %s"), -+ prefix, netStr, startStr, endStr); -+ goto error; -+ } -+ -+ /* both start and end of range need to be within network */ -+ if (virSocketAddrCheckNetmask(start, network, &netmask) <= 0 || -+ virSocketAddrCheckNetmask(end, network, &netmask) <= 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("range %s - %s is not entirely within " -+ "network %s/%d"), -+ startStr, endStr, netStr, prefix); -+ goto error; -+ } -+ -+ if (VIR_SOCKET_ADDR_IS_FAMILY(start, AF_INET)) { -+ virSocketAddr netaddr, broadcast; -+ -+ if (virSocketAddrBroadcast(network, &netmask, &broadcast) < 0 || -+ virSocketAddrMask(network, &netmask, &netaddr) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("failed to construct broadcast or network " -+ "address for network %s/%d"), -+ netStr, prefix); -+ goto error; -+ } -+ -+ /* Don't allow the start of the range to be the network -+ * address (usually "...0") or the end of the range to be the -+ * broadcast address (usually "...255"). (the opposite also -+ * isn't allowed, but checking for that is implicit in all the -+ * other combined checks) (IPv6 doesn't have broadcast and -+ * network addresses, so this check is only done for IPv4) -+ */ -+ if (virSocketAddrEqual(start, &netaddr)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("start of range %s - %s in network %s/%d " -+ "is the network address"), -+ startStr, endStr, netStr, prefix); -+ goto error; -+ } -+ -+ if (virSocketAddrEqual(end, &broadcast)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("end of range %s - %s in network %s/%d " -+ "is the broadcast address"), -+ startStr, endStr, netStr, prefix); -+ goto error; -+ } -+ } - } - - if (VIR_SOCKET_ADDR_IS_FAMILY(start, AF_INET)) { - virSocketAddrIPv4 t1, t2; -- virSocketAddr netaddr, broadcast; - -- if (virSocketAddrBroadcast(network, &netmask, &broadcast) < 0 || -- virSocketAddrMask(network, &netmask, &netaddr) < 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("failed to construct broadcast or network " -- "address for network %s/%d"), -- netStr, prefix); -- goto error; -- } -- -- /* Don't allow the start of the range to be the network -- * address (usually "...0") or the end of the range to be the -- * broadcast address (usually "...255"). (the opposite also -- * isn't allowed, but checking for that is implicit in all the -- * other combined checks) (IPv6 doesn't have broadcast and -- * network addresses, so this check is only done for IPv4) -- */ -- if (virSocketAddrEqual(start, &netaddr)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("start of range %s - %s in network %s/%d " -- "is the network address"), -- startStr, endStr, netStr, prefix); -- goto error; -- } -- -- if (virSocketAddrEqual(end, &broadcast)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("end of range %s - %s in network %s/%d " -- "is the broadcast address"), -- startStr, endStr, netStr, prefix); -- goto error; -- } -- -- if ((virSocketAddrGetIPv4Addr(start, &t1) < 0) || -- (virSocketAddrGetIPv4Addr(end, &t2) < 0)) { -+ if (virSocketAddrGetIPv4Addr(start, &t1) < 0 || -+ virSocketAddrGetIPv4Addr(end, &t2) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("failed to get IPv4 address " -- "for start or end of range %s - %s " -- "in network %s/%d"), -- startStr, endStr, netStr, prefix); -+ "for start or end of range %s - %s"), -+ startStr, endStr); - goto error; - } - -- /* legacy check that everything except the last two bytes are -- * the same -+ /* legacy check that everything except the last two bytes -+ * are the same - */ - for (i = 0; i < 2; i++) { - if (t1[i] != t2[i]) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("range %s - %s is too large (> 65535) " -- "in network %s/%d"), -- startStr, endStr, netStr, prefix); -+ _("range %s - %s is too large (> 65535)"), -+ startStr, endStr); - goto error; - } - } - ret = (t2[2] - t1[2]) * 256 + (t2[3] - t1[3]); - if (ret < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("range %s - %s is reversed " -- "in network %s/%d"), -- startStr, endStr, netStr, prefix); -+ _("range %s - %s is reversed "), -+ startStr, endStr); - goto error; - } - ret++; - } else if (VIR_SOCKET_ADDR_IS_FAMILY(start, AF_INET6)) { - virSocketAddrIPv6 t1, t2; - -- if ((virSocketAddrGetIPv6Addr(start, &t1) < 0) || -- (virSocketAddrGetIPv6Addr(end, &t2) < 0)) { -+ if (virSocketAddrGetIPv6Addr(start, &t1) < 0 || -+ virSocketAddrGetIPv6Addr(end, &t2) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("failed to get IPv6 address " -- "for start or end of range %s - %s " -- "in network %s/%d"), -- startStr, endStr, netStr, prefix); -+ "for start or end of range %s - %s"), -+ startStr, endStr); - goto error; - } - -@@ -757,29 +767,27 @@ virSocketAddrGetRange(virSocketAddrPtr start, virSocketAddrPtr end, - for (i = 0; i < 7; i++) { - if (t1[i] != t2[i]) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("range %s - %s is too large (> 65535) " -- "in network %s/%d"), -- startStr, endStr, netStr, prefix); -+ _("range %s - %s is too large (> 65535)"), -+ startStr, endStr); - goto error; - } - } - ret = t2[7] - t1[7]; - if (ret < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("range %s - %s start larger than end " -- "in network %s/%d"), -- startStr, endStr, netStr, prefix); -+ _("range %s - %s start larger than end"), -+ startStr, endStr); - goto error; - } - ret++; - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unsupported address family " -- "for range %s - %s " -- "in network %s/%d, must be ipv4 or ipv6"), -- startStr, endStr, netStr, prefix); -+ "for range %s - %s, must be ipv4 or ipv6"), -+ startStr, endStr); - goto error; - } -+ - cleanup: - VIR_FREE(startStr); - VIR_FREE(endStr); -diff --git a/tests/sockettest.c b/tests/sockettest.c -index 292edb6..8f46218 100644 ---- a/tests/sockettest.c -+++ b/tests/sockettest.c -@@ -98,10 +98,11 @@ testRange(const char *saddrstr, const char *eaddrstr, - return -1; - if (virSocketAddrParse(&eaddr, eaddrstr, AF_UNSPEC) < 0) - return -1; -- if (virSocketAddrParse(&netaddr, netstr, AF_UNSPEC) < 0) -+ if (netstr && virSocketAddrParse(&netaddr, netstr, AF_UNSPEC) < 0) - return -1; - -- int gotsize = virSocketAddrGetRange(&saddr, &eaddr, &netaddr, prefix); -+ int gotsize = virSocketAddrGetRange(&saddr, &eaddr, -+ netstr ? &netaddr : NULL, prefix); - VIR_DEBUG("Size want %d vs got %d", size, gotsize); - if (pass) { - /* fail if virSocketAddrGetRange returns failure, or unexpected size */ -@@ -311,6 +312,15 @@ mymain(void) - ret = -1; \ - } while (0) - -+#define DO_TEST_RANGE_SIMPLE(saddr, eaddr, size, pass) \ -+ do { \ -+ struct testRangeData data \ -+ = { saddr, eaddr, NULL, 0, size, pass }; \ -+ if (virtTestRun("Test range " saddr " -> " eaddr "size " #size, \ -+ testRangeHelper, &data) < 0) \ -+ ret = -1; \ -+ } while (0) -+ - #define DO_TEST_NETMASK(addr1, addr2, netmask, pass) \ - do { \ - struct testNetmaskData data = { addr1, addr2, netmask, pass }; \ -@@ -373,23 +383,55 @@ mymain(void) - DO_TEST_PARSE_AND_FORMAT("::1", AF_UNIX, false); - DO_TEST_PARSE_AND_FORMAT("::ffff", AF_UNSPEC, true); - -+ /* tests that specify a network that should contain the range */ - DO_TEST_RANGE("192.168.122.1", "192.168.122.1", "192.168.122.1", 24, 1, true); - DO_TEST_RANGE("192.168.122.1", "192.168.122.20", "192.168.122.22", 24, 20, true); -+ /* start of range is "network address" */ - DO_TEST_RANGE("192.168.122.0", "192.168.122.254", "192.168.122.1", 24, -1, false); -+ /* end of range is "broadcast address" */ - DO_TEST_RANGE("192.168.122.1", "192.168.122.255", "192.168.122.1", 24, -1, false); - DO_TEST_RANGE("192.168.122.0", "192.168.122.255", "192.168.122.1", 16, 256, true); -+ /* range is reversed */ - DO_TEST_RANGE("192.168.122.20", "192.168.122.1", "192.168.122.1", 24, -1, false); -+ /* start address outside network */ - DO_TEST_RANGE("10.0.0.1", "192.168.122.20", "192.168.122.1", 24, -1, false); -+ /* end address outside network and range reversed */ - DO_TEST_RANGE("192.168.122.20", "10.0.0.1", "192.168.122.1", 24, -1, false); -+ /* entire range outside network */ - DO_TEST_RANGE("172.16.0.50", "172.16.0.254", "1.2.3.4", 8, -1, false); -+ /* end address outside network */ - DO_TEST_RANGE("192.168.122.1", "192.168.123.20", "192.168.122.22", 24, -1, false); - DO_TEST_RANGE("192.168.122.1", "192.168.123.20", "192.168.122.22", 23, 276, true); - - DO_TEST_RANGE("2000::1", "2000::1", "2000::1", 64, 1, true); - DO_TEST_RANGE("2000::1", "2000::2", "2000::1", 64, 2, true); -+ /* range reversed */ - DO_TEST_RANGE("2000::2", "2000::1", "2000::1", 64, -1, false); -+ /* range too large (> 65536) */ - DO_TEST_RANGE("2000::1", "9001::1", "2000::1", 64, -1, false); - -+ /* tests that *don't* specify a containing network -+ * (so fewer things can be checked) -+ */ -+ DO_TEST_RANGE_SIMPLE("192.168.122.1", "192.168.122.1", 1, true); -+ DO_TEST_RANGE_SIMPLE("192.168.122.1", "192.168.122.20", 20, true); -+ DO_TEST_RANGE_SIMPLE("192.168.122.0", "192.168.122.255", 256, true); -+ /* range is reversed */ -+ DO_TEST_RANGE_SIMPLE("192.168.122.20", "192.168.122.1", -1, false); -+ /* range too large (> 65536) */ -+ DO_TEST_RANGE_SIMPLE("10.0.0.1", "192.168.122.20", -1, false); -+ /* range reversed */ -+ DO_TEST_RANGE_SIMPLE("192.168.122.20", "10.0.0.1", -1, false); -+ DO_TEST_RANGE_SIMPLE("172.16.0.50", "172.16.0.254", 205, true); -+ DO_TEST_RANGE_SIMPLE("192.168.122.1", "192.168.123.20", 276, true); -+ -+ DO_TEST_RANGE_SIMPLE("2000::1", "2000::1", 1, true); -+ DO_TEST_RANGE_SIMPLE("2000::1", "2000::2", 2, true); -+ /* range reversed */ -+ DO_TEST_RANGE_SIMPLE("2000::2", "2000::1", -1, false); -+ /* range too large (> 65536) */ -+ DO_TEST_RANGE_SIMPLE("2000::1", "9001::1", -1, false); -+ - DO_TEST_NETMASK("192.168.122.1", "192.168.122.2", - "255.255.255.0", true); - DO_TEST_NETMASK("192.168.122.1", "192.168.122.4", --- -2.5.0 - diff --git a/SOURCES/libvirt-network-verify-proper-address-family-in-updates-to-host-and-range.patch b/SOURCES/libvirt-network-verify-proper-address-family-in-updates-to-host-and-range.patch deleted file mode 100644 index 4d125f7..0000000 --- a/SOURCES/libvirt-network-verify-proper-address-family-in-updates-to-host-and-range.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 7e53d60afb8509a57caea28c95aa61a694bd29f8 Mon Sep 17 00:00:00 2001 -Message-Id: <7e53d60afb8509a57caea28c95aa61a694bd29f8@dist-git> -From: Laine Stump -Date: Mon, 10 Aug 2015 02:46:45 -0400 -Subject: [PATCH] network: verify proper address family in updates to - and - -By specifying parentIndex in a call to virNetworkUpdate(), it was -possible to direct libvirt to add a dhcp range or static host of a -non-matching address family to the element of an . For -example, given: - - - - -you could provide a static host entry with an IPv4 address, and -specify that it be added to the 2nd element (index 1): - - virsh net-update default add ip-dhcp-host --parent-index 1 \ - '' - -This would be happily added with no error (and no concern of any -possible future consequences). - -This patch checks that any dhcp range or host element being added to a -network ip's subelement has addresses of the same family as the -ip element they are being added to. - -This resolves: - - https://bugzilla.redhat.com/show_bug.cgi?id=1184736 - -(cherry picked from commit 6a21bc119e37bafcbe5cfd13e57080d651296b43) - -Signed-off-by: Jiri Denemark ---- - src/conf/network_conf.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c -index 72006e9..0ebb373 100644 ---- a/src/conf/network_conf.c -+++ b/src/conf/network_conf.c -@@ -3498,6 +3498,15 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, - &host, partialOkay) < 0) - goto cleanup; - -+ if (!partialOkay && -+ VIR_SOCKET_ADDR_FAMILY(&ipdef->address) -+ != VIR_SOCKET_ADDR_FAMILY(&host.ip)) { -+ virReportError(VIR_ERR_OPERATION_INVALID, "%s", -+ _("the address family of a host entry IP must match " -+ "the address family of the dhcp element's parent")); -+ goto cleanup; -+ } -+ - if (command == VIR_NETWORK_UPDATE_COMMAND_MODIFY) { - - /* search for the entry with this (ip|mac|name), -@@ -3635,6 +3644,14 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, - if (virSocketAddrRangeParseXML(def->name, ipdef, ctxt->node, &range) < 0) - goto cleanup; - -+ if (VIR_SOCKET_ADDR_FAMILY(&ipdef->address) -+ != VIR_SOCKET_ADDR_FAMILY(&range.start)) { -+ virReportError(VIR_ERR_OPERATION_INVALID, "%s", -+ _("the address family of a dhcp range must match " -+ "the address family of the dhcp element's parent")); -+ goto cleanup; -+ } -+ - /* check if an entry with same name/address/ip already exists */ - for (i = 0; i < ipdef->nranges; i++) { - if (virSocketAddrEqual(&range.start, &ipdef->ranges[i].start) && --- -2.5.0 - diff --git a/SOURCES/libvirt-nodedev-Expose-PCI-header-type.patch b/SOURCES/libvirt-nodedev-Expose-PCI-header-type.patch deleted file mode 100644 index b1812d2..0000000 --- a/SOURCES/libvirt-nodedev-Expose-PCI-header-type.patch +++ /dev/null @@ -1,343 +0,0 @@ -From 00d879937512b24db576a39fc94c78b427f8916d Mon Sep 17 00:00:00 2001 -Message-Id: <00d879937512b24db576a39fc94c78b427f8916d@dist-git> -From: Martin Kletzander -Date: Mon, 23 May 2016 18:10:04 +0200 -Subject: [PATCH] nodedev: Expose PCI header type - -RHEL-7.2.z: https://bugzilla.redhat.com/show_bug.cgi?id=1331328 -Upstream: https://bugzilla.redhat.com/show_bug.cgi?id=1317531 - -If we expose this information, which is one byte in every PCI config -file, we let all mgmt apps know whether the device itself is an endpoint -or not so it's easier for them to decide whether such device can be -passed through into a VM (endpoint) or not (*-bridge). - -Signed-off-by: Martin Kletzander -(cherry picked from commit d77ffb6876e87a5c6f4c74c49cf0d89ade4f8326) -Signed-off-by: Michal Privoznik ---- - docs/formatnode.html.in | 36 ++++++++++++++-------- - docs/schemas/nodedev.rng | 11 +++++++ - src/conf/node_device_conf.c | 20 ++++++++++++ - src/conf/node_device_conf.h | 1 + - src/libvirt_private.syms | 3 ++ - src/node_device/node_device_udev.c | 3 ++ - src/util/virpci.c | 33 ++++++++++++++++++++ - src/util/virpci.h | 12 ++++++++ - .../pci_0000_00_02_0_header_type.xml | 15 +++++++++ - .../pci_0000_00_1c_0_header_type.xml | 20 ++++++++++++ - tests/nodedevxml2xmltest.c | 2 ++ - 11 files changed, 144 insertions(+), 12 deletions(-) - create mode 100644 tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml - create mode 100644 tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml - -diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in -index 3ff1bef..a14bcfd 100644 ---- a/docs/formatnode.html.in -+++ b/docs/formatnode.html.in -@@ -97,18 +97,30 @@ -
- This optional element can occur multiple times. If it - exists, it has a mandatory type attribute -- which will be set to -- either physical_function -- or virtual_functions. If the type -- is physical_function, there will be a -- single address subelement which contains -- the PCI address of the SRIOV Physical Function (PF) -- that is the parent of this device (and this device is, -- by implication, an SRIOV Virtual Function (VF)). If -- the type is virtual_functions, then this -- device is an SRIOV PF, and the capability element will -- have a list of address subelements, one -- for each VF on this PF. -+ which will be set to: -+
-+
physical_function
-+
-+ That means there will be a single address -+ subelement which contains the PCI address of the SRIOV -+ Physical Function (PF) that is the parent of this device -+ (and this device is, by implication, an SRIOV Virtual -+ Function (VF)). -+
-+
virtual_function
-+
-+ In this case this device is an SRIOV PF, and the capability -+ element will have a list of address -+ subelements, one for each VF on this PF. -+
-+
pci-bridge or cardbus-bridge
-+
-+ This shows merely that the lower 7 bits of PCI header type -+ have either value of 1 or 2 respectively. Usually this -+ means such device cannot be used for PCI passthrough. -+ Since 1.3.3 -+
-+
-
-
numa
-
-diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng -index 744dccd..949811c 100644 ---- a/docs/schemas/nodedev.rng -+++ b/docs/schemas/nodedev.rng -@@ -169,6 +169,17 @@ - - - -+ -+ -+ -+ pci-bridge -+ cardbus-bridge -+ -+ -+ -+ -+ -+ - - - -diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c -index e6f3f27..feefb9a 100644 ---- a/src/conf/node_device_conf.c -+++ b/src/conf/node_device_conf.c -@@ -394,6 +394,12 @@ char *virNodeDeviceDefFormat(const virNodeDeviceDef *def) - if (data->pci_dev.numa_node >= 0) - virBufferAsprintf(&buf, "\n", - data->pci_dev.numa_node); -+ -+ if (data->pci_dev.hdrType) { -+ virBufferAsprintf(&buf, "\n", -+ virPCIHeaderTypeToString(data->pci_dev.hdrType)); -+ } -+ - if (data->pci_dev.flags & VIR_NODE_DEV_CAP_FLAG_PCIE) - virPCIEDeviceInfoFormat(&buf, data->pci_dev.pci_express); - break; -@@ -1264,6 +1270,7 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, - xmlNodePtr orignode, iommuGroupNode, pciExpress; - int ret = -1; - virPCIEDeviceInfoPtr pci_express = NULL; -+ char *tmp = NULL; - - orignode = ctxt->node; - ctxt->node = node; -@@ -1321,6 +1328,18 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, - _("invalid NUMA node ID supplied for '%s'")) < 0) - goto out; - -+ if ((tmp = virXPathString("string(./capability[1]/@type)", ctxt))) { -+ int hdrType = virPCIHeaderTypeFromString(tmp); -+ -+ if (hdrType <= 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unknown PCI header type '%s'"), tmp); -+ goto out; -+ } -+ -+ data->pci_dev.hdrType = hdrType; -+ } -+ - if ((pciExpress = virXPathNode("./pci-express[1]", ctxt))) { - if (VIR_ALLOC(pci_express) < 0) - goto out; -@@ -1335,6 +1354,7 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, - - ret = 0; - out: -+ VIR_FREE(tmp); - virPCIEDeviceInfoFree(pci_express); - ctxt->node = orignode; - return ret; -diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h -index 7dd39ca..73d2a7f 100644 ---- a/src/conf/node_device_conf.h -+++ b/src/conf/node_device_conf.h -@@ -118,6 +118,7 @@ typedef struct _virNodeDevCapData { - unsigned int iommuGroupNumber; - int numa_node; - virPCIEDeviceInfoPtr pci_express; -+ int hdrType; /* enum virPCIHeaderType or -1 */ - } pci_dev; - struct { - unsigned int bus; -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 86909c1..0db30be 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1976,11 +1976,14 @@ virPCIDeviceSetUsedBy; - virPCIDeviceUnbind; - virPCIDeviceWaitForCleanup; - virPCIEDeviceInfoFree; -+virPCIGetHeaderType; - virPCIGetNetName; - virPCIGetPhysicalFunction; - virPCIGetVirtualFunctionIndex; - virPCIGetVirtualFunctionInfo; - virPCIGetVirtualFunctions; -+virPCIHeaderTypeFromString; -+virPCIHeaderTypeToString; - virPCIIsVirtualFunction; - - -diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c -index aaee0e5..6bff5ba 100644 ---- a/src/node_device/node_device_udev.c -+++ b/src/node_device/node_device_udev.c -@@ -506,6 +506,9 @@ static int udevProcessPCI(struct udev_device *device, - - /* We need to be root to read PCI device configs */ - if (priv->privileged) { -+ if (virPCIGetHeaderType(pciDev, &data->pci_dev.hdrType) < 0) -+ goto out; -+ - if (virPCIDeviceIsPCIExpress(pciDev) > 0) { - if (VIR_ALLOC(pci_express) < 0) - goto out; -diff --git a/src/util/virpci.c b/src/util/virpci.c -index 35b1459..d98db3f 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -55,6 +55,12 @@ VIR_LOG_INIT("util.pci"); - VIR_ENUM_IMPL(virPCIELinkSpeed, VIR_PCIE_LINK_SPEED_LAST, - "", "2.5", "5", "8") - -+VIR_ENUM_IMPL(virPCIHeader, VIR_PCI_HEADER_LAST, -+ "endpoint", -+ "pci-bridge", -+ "cardbus-bridge", -+); -+ - struct _virPCIDevice { - unsigned int domain; - unsigned int bus; -@@ -2872,6 +2878,33 @@ virPCIDeviceGetLinkCapSta(virPCIDevicePtr dev, - } - - -+int virPCIGetHeaderType(virPCIDevicePtr dev, int *hdrType) -+{ -+ int fd; -+ uint8_t type; -+ -+ *hdrType = -1; -+ -+ if ((fd = virPCIDeviceConfigOpen(dev, true)) < 0) -+ return -1; -+ -+ type = virPCIDeviceRead8(dev, fd, PCI_HEADER_TYPE); -+ -+ virPCIDeviceConfigClose(dev, fd); -+ -+ type &= PCI_HEADER_TYPE_MASK; -+ if (type >= VIR_PCI_HEADER_LAST) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unknown PCI header type '%d'"), type); -+ return -1; -+ } -+ -+ *hdrType = type; -+ -+ return 0; -+} -+ -+ - void - virPCIEDeviceInfoFree(virPCIEDeviceInfoPtr dev) - { -diff --git a/src/util/virpci.h b/src/util/virpci.h -index 64b9e96..1ed59dd 100644 ---- a/src/util/virpci.h -+++ b/src/util/virpci.h -@@ -52,6 +52,16 @@ typedef enum { - - VIR_ENUM_DECL(virPCIELinkSpeed) - -+typedef enum { -+ VIR_PCI_HEADER_ENDPOINT = 0, -+ VIR_PCI_HEADER_PCI_BRIDGE, -+ VIR_PCI_HEADER_CARDBUS_BRIDGE, -+ -+ VIR_PCI_HEADER_LAST -+} virPCIHeaderType; -+ -+VIR_ENUM_DECL(virPCIHeader) -+ - typedef struct _virPCIELink virPCIELink; - typedef virPCIELink *virPCIELinkPtr; - struct _virPCIELink { -@@ -214,6 +224,8 @@ int virPCIDeviceGetLinkCapSta(virPCIDevicePtr dev, - unsigned int *sta_speed, - unsigned int *sta_width); - -+int virPCIGetHeaderType(virPCIDevicePtr dev, int *hdrType); -+ - void virPCIEDeviceInfoFree(virPCIEDeviceInfoPtr dev); - - #endif /* __VIR_PCI_H__ */ -diff --git a/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml b/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml -new file mode 100644 -index 0000000..5150fd1 ---- /dev/null -+++ b/tests/nodedevschemadata/pci_0000_00_02_0_header_type.xml -@@ -0,0 +1,15 @@ -+ -+ pci_0000_00_02_0 -+ computer -+ -+ 0 -+ 0 -+ 2 -+ 0 -+ 4th Gen Core Processor Integrated Graphics Controller -+ Intel Corporation -+ -+
-+ -+ -+ -diff --git a/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml b/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml -new file mode 100644 -index 0000000..dea5f05 ---- /dev/null -+++ b/tests/nodedevschemadata/pci_0000_00_1c_0_header_type.xml -@@ -0,0 +1,20 @@ -+ -+ pci_0000_00_1c_0 -+ computer -+ -+ 0 -+ 0 -+ 28 -+ 0 -+ 8 Series/C220 Series Chipset Family PCI Express Root Port #1 -+ Intel Corporation -+ -+
-+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/nodedevxml2xmltest.c b/tests/nodedevxml2xmltest.c -index a37d729..d2cd444 100644 ---- a/tests/nodedevxml2xmltest.c -+++ b/tests/nodedevxml2xmltest.c -@@ -91,6 +91,8 @@ mymain(void) - DO_TEST("usb_device_1d6b_1_0000_00_1d_0"); - DO_TEST("pci_8086_4238_pcie_wireless"); - DO_TEST("pci_8086_0c0c_snd_hda_intel"); -+ DO_TEST("pci_0000_00_02_0_header_type"); -+ DO_TEST("pci_0000_00_1c_0_header_type"); - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } --- -2.8.3 - diff --git a/SOURCES/libvirt-nodedev-Fix-parsing-of-generated-XMLs.patch b/SOURCES/libvirt-nodedev-Fix-parsing-of-generated-XMLs.patch deleted file mode 100644 index 77d3c79..0000000 --- a/SOURCES/libvirt-nodedev-Fix-parsing-of-generated-XMLs.patch +++ /dev/null @@ -1,67 +0,0 @@ -From f583c2a22e7ce86586aa30f3ee66b6a830778550 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Mon, 23 May 2016 18:10:05 +0200 -Subject: [PATCH] nodedev: Fix parsing of generated XMLs - -RHEL-7.2.z: https://bugzilla.redhat.com/show_bug.cgi?id=1331328 - -Commit d77ffb6876 added not only reporting of the PCI header type, but -also parsing of that information. However, because there was no parsing -done for the other sub-PCI capabilities, if there was any other -capability then a valid header type name (like phys_function or -virt_functions) the parsing would fail. This prevented passing node -device XMLs that we generated into our own functions when dealing with, -e.g. with SRIOV cards. - -Instead of reworking the whole parsing, just fix this one occurence and -remove a test for it for the time being. Future patches will deal with -the rest. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 17a94ba70fc11c21f8ea70ff92131d0868f4cde1) -Signed-off-by: Michal Privoznik ---- - src/conf/node_device_conf.c | 12 ------------ - tests/nodedevxml2xmltest.c | 2 -- - 2 files changed, 14 deletions(-) - -diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c -index feefb9a..fdea79e 100644 ---- a/src/conf/node_device_conf.c -+++ b/src/conf/node_device_conf.c -@@ -1328,18 +1328,6 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, - _("invalid NUMA node ID supplied for '%s'")) < 0) - goto out; - -- if ((tmp = virXPathString("string(./capability[1]/@type)", ctxt))) { -- int hdrType = virPCIHeaderTypeFromString(tmp); -- -- if (hdrType <= 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Unknown PCI header type '%s'"), tmp); -- goto out; -- } -- -- data->pci_dev.hdrType = hdrType; -- } -- - if ((pciExpress = virXPathNode("./pci-express[1]", ctxt))) { - if (VIR_ALLOC(pci_express) < 0) - goto out; -diff --git a/tests/nodedevxml2xmltest.c b/tests/nodedevxml2xmltest.c -index d2cd444..a37d729 100644 ---- a/tests/nodedevxml2xmltest.c -+++ b/tests/nodedevxml2xmltest.c -@@ -91,8 +91,6 @@ mymain(void) - DO_TEST("usb_device_1d6b_1_0000_00_1d_0"); - DO_TEST("pci_8086_4238_pcie_wireless"); - DO_TEST("pci_8086_0c0c_snd_hda_intel"); -- DO_TEST("pci_0000_00_02_0_header_type"); -- DO_TEST("pci_0000_00_1c_0_header_type"); - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } --- -2.8.3 - diff --git a/SOURCES/libvirt-nodedev-Indent-PCI-express-for-future-fix.patch b/SOURCES/libvirt-nodedev-Indent-PCI-express-for-future-fix.patch deleted file mode 100644 index e327a86..0000000 --- a/SOURCES/libvirt-nodedev-Indent-PCI-express-for-future-fix.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 3b9712c09ff6ac00d5d371f3e1e71391037eb5bf Mon Sep 17 00:00:00 2001 -Message-Id: <3b9712c09ff6ac00d5d371f3e1e71391037eb5bf@dist-git> -From: Martin Kletzander -Date: Mon, 23 May 2016 18:10:03 +0200 -Subject: [PATCH] nodedev: Indent PCI express for future fix - -RHEL-7.2.z: https://bugzilla.redhat.com/show_bug.cgi?id=1331328 - -Best viewed with '-w' as this is just an adjustment for future patch to -be readable without that. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 0d8f45246a74b627e62eccef2bb19068690312e2) -Signed-off-by: Michal Privoznik ---- - src/node_device/node_device_udev.c | 38 ++++++++++++++++++++------------------ - 1 file changed, 20 insertions(+), 18 deletions(-) - -diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c -index 100b44d..aaee0e5 100644 ---- a/src/node_device/node_device_udev.c -+++ b/src/node_device/node_device_udev.c -@@ -505,28 +505,30 @@ static int udevProcessPCI(struct udev_device *device, - goto out; - - /* We need to be root to read PCI device configs */ -- if (priv->privileged && virPCIDeviceIsPCIExpress(pciDev) > 0) { -- if (VIR_ALLOC(pci_express) < 0) -- goto out; -- -- if (virPCIDeviceHasPCIExpressLink(pciDev) > 0) { -- if (VIR_ALLOC(pci_express->link_cap) < 0 || -- VIR_ALLOC(pci_express->link_sta) < 0) -+ if (priv->privileged) { -+ if (virPCIDeviceIsPCIExpress(pciDev) > 0) { -+ if (VIR_ALLOC(pci_express) < 0) - goto out; - -- if (virPCIDeviceGetLinkCapSta(pciDev, -- &pci_express->link_cap->port, -- &pci_express->link_cap->speed, -- &pci_express->link_cap->width, -- &pci_express->link_sta->speed, -- &pci_express->link_sta->width) < 0) -- goto out; -+ if (virPCIDeviceHasPCIExpressLink(pciDev) > 0) { -+ if (VIR_ALLOC(pci_express->link_cap) < 0 || -+ VIR_ALLOC(pci_express->link_sta) < 0) -+ goto out; -+ -+ if (virPCIDeviceGetLinkCapSta(pciDev, -+ &pci_express->link_cap->port, -+ &pci_express->link_cap->speed, -+ &pci_express->link_cap->width, -+ &pci_express->link_sta->speed, -+ &pci_express->link_sta->width) < 0) -+ goto out; - -- pci_express->link_sta->port = -1; /* PCIe can't negotiate port. Yet :) */ -+ pci_express->link_sta->port = -1; /* PCIe can't negotiate port. Yet :) */ -+ } -+ data->pci_dev.flags |= VIR_NODE_DEV_CAP_FLAG_PCIE; -+ data->pci_dev.pci_express = pci_express; -+ pci_express = NULL; - } -- data->pci_dev.flags |= VIR_NODE_DEV_CAP_FLAG_PCIE; -- data->pci_dev.pci_express = pci_express; -- pci_express = NULL; - } - - ret = 0; --- -2.8.3 - diff --git a/SOURCES/libvirt-nodeinfo-Add-nodeGetPresentCPUBitmap-to-libvirt_private.syms.patch b/SOURCES/libvirt-nodeinfo-Add-nodeGetPresentCPUBitmap-to-libvirt_private.syms.patch deleted file mode 100644 index bbed284..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-nodeGetPresentCPUBitmap-to-libvirt_private.syms.patch +++ /dev/null @@ -1,32 +0,0 @@ -From dafa1c8ce652b0c3bbac5fc7d294e09900e21040 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:20 +0200 -Subject: [PATCH] nodeinfo: Add nodeGetPresentCPUBitmap() to - libvirt_private.syms - -(cherry picked from commit c30ae1864f7b542c3bf765f9b5988f5298dadc9b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 1a03268..e92d2d0 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1007,6 +1007,7 @@ nodeGetInfo; - nodeGetMemory; - nodeGetMemoryParameters; - nodeGetMemoryStats; -+nodeGetPresentCPUBitmap; - nodeSetMemoryParameters; - - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-old-kernel-compatibility-to-nodeGetPresentCPUBitmap.patch b/SOURCES/libvirt-nodeinfo-Add-old-kernel-compatibility-to-nodeGetPresentCPUBitmap.patch deleted file mode 100644 index 635193c..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-old-kernel-compatibility-to-nodeGetPresentCPUBitmap.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 77f24a2e6276d06d1da1f6d9223b5b15e6ab04ac Mon Sep 17 00:00:00 2001 -Message-Id: <77f24a2e6276d06d1da1f6d9223b5b15e6ab04ac@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:25 +0200 -Subject: [PATCH] nodeinfo: Add old kernel compatibility to - nodeGetPresentCPUBitmap() - -If the cpu/present file is not available, we assume that the kernel -is too old to support non-consecutive CPU ids and return a bitmap -with all the bits set to represent this fact. This assumption is -already exploited in nodeGetCPUCount(). - -This means users of this API can expect the information to always -be available unless an error has occurred, and no longer need to -treat the NULL return value as a special case. - -The error message has been updated as well. - -(cherry picked from commit 37f73e4ad5b049edbd92951330db2c071ca93b87) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 43 +++++++++++++++++++++++++++++-------------- - 1 file changed, 29 insertions(+), 14 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index a7a5d98..ceb517a 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -441,6 +441,8 @@ virNodeParseNode(const char *sysfs_prefix, - } - - present_cpumap = nodeGetPresentCPUBitmap(sysfs_prefix); -+ if (!present_cpumap) -+ goto cleanup; - - /* enumerate sockets in the node */ - CPU_ZERO(&sock_map); -@@ -448,7 +450,7 @@ virNodeParseNode(const char *sysfs_prefix, - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; - -- if (present_cpumap && !(virBitmapIsBitSet(present_cpumap, cpu))) -+ if (!virBitmapIsBitSet(present_cpumap, cpu)) - continue; - - if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0) -@@ -484,7 +486,7 @@ virNodeParseNode(const char *sysfs_prefix, - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; - -- if (present_cpumap && !(virBitmapIsBitSet(present_cpumap, cpu))) -+ if (!virBitmapIsBitSet(present_cpumap, cpu)) - continue; - - if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0) -@@ -1284,27 +1286,40 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) - } - - virBitmapPtr --nodeGetPresentCPUBitmap(const char *sysfs_prefix) -+nodeGetPresentCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) - { -- int max_present; - #ifdef __linux__ -+ virBitmapPtr present_cpus = NULL; - char *present_path = NULL; -- virBitmapPtr bitmap = NULL; --#endif -+ int npresent_cpus; - -- if ((max_present = nodeGetCPUCount(sysfs_prefix)) < 0) -- return NULL; -+ if ((npresent_cpus = nodeGetCPUCount(sysfs_prefix)) < 0) -+ goto cleanup; - --#ifdef __linux__ - if (!(present_path = linuxGetCPUPresentPath(sysfs_prefix))) -- return NULL; -- if (virFileExists(present_path)) -- bitmap = linuxParseCPUmap(max_present, present_path); -+ goto cleanup; -+ -+ /* If the cpu/present file is available, parse it and exit */ -+ if (virFileExists(present_path)) { -+ present_cpus = linuxParseCPUmap(npresent_cpus, present_path); -+ goto cleanup; -+ } -+ -+ /* If the file is not available, we can assume that the kernel is -+ * too old to support non-consecutive CPU ids and just mark all -+ * possible CPUs as present */ -+ if (!(present_cpus = virBitmapNew(npresent_cpus))) -+ goto cleanup; -+ -+ virBitmapSetAll(present_cpus); -+ -+ cleanup: - VIR_FREE(present_path); -- return bitmap; -+ -+ return present_cpus; - #endif - virReportError(VIR_ERR_NO_SUPPORT, "%s", -- _("non-continuous host cpu numbers not implemented on this platform")); -+ _("node present CPU map not implemented on this platform")); - return NULL; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeCapsInitNUMA.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeCapsInitNUMA.patch deleted file mode 100644 index c5e9c22..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeCapsInitNUMA.patch +++ /dev/null @@ -1,270 +0,0 @@ -From 2260b45485085ceacb2d07554165289b275b816b Mon Sep 17 00:00:00 2001 -Message-Id: <2260b45485085ceacb2d07554165289b275b816b@dist-git> -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:13 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeCapsInitNUMA - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_CPU_PATH which is a -derivative of SYSFS_SYSTEM_PATH - -Use cpupath for nodeCapsInitNUMAFake and remove SYSFS_CPU_PATH - -(cherry picked from commit b97b30480d0fc529a9ea27b1c8b3cb0b120ea1e3) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/lxc/lxc_conf.c | 2 +- - src/nodeinfo.c | 35 +++++++++++++++++++++++------------ - src/nodeinfo.h | 2 +- - src/openvz/openvz_conf.c | 2 +- - src/phyp/phyp_driver.c | 2 +- - src/qemu/qemu_capabilities.c | 2 +- - src/uml/uml_conf.c | 2 +- - src/vbox/vbox_common.c | 2 +- - src/vmware/vmware_conf.c | 2 +- - src/vz/vz_driver.c | 2 +- - 10 files changed, 32 insertions(+), 21 deletions(-) - -diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c -index c393cb5..b689b92 100644 ---- a/src/lxc/lxc_conf.c -+++ b/src/lxc/lxc_conf.c -@@ -77,7 +77,7 @@ virCapsPtr virLXCDriverCapsInit(virLXCDriverPtr driver) - * unexpected failures. We don't want to break the lxc - * driver in this scenario, so log errors & carry on - */ -- if (nodeCapsInitNUMA(caps) < 0) { -+ if (nodeCapsInitNUMA(NULL, caps) < 0) { - virCapabilitiesFreeNUMAInfo(caps); - VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); - } -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 2d715fd..a71d05e 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -283,7 +283,6 @@ freebsdNodeGetMemoryStats(virNodeMemoryStatsPtr params, - #ifdef __linux__ - # define CPUINFO_PATH "/proc/cpuinfo" - # define SYSFS_SYSTEM_PATH "/sys/devices/system" --# define SYSFS_CPU_PATH SYSFS_SYSTEM_PATH"/cpu" - # define PROCSTAT_PATH "/proc/stat" - # define MEMINFO_PATH "/proc/meminfo" - # define SYSFS_MEMORY_SHARED_PATH "/sys/kernel/mm/ksm" -@@ -1660,7 +1659,9 @@ nodeGetCPUMap(const char *sysfs_prefix, - } - - static int --nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED) -+nodeCapsInitNUMAFake(const char *prefix, -+ const char *cpupath ATTRIBUTE_UNUSED, -+ virCapsPtr caps ATTRIBUTE_UNUSED) - { - virNodeInfo nodeinfo; - virCapsHostNUMACellCPUPtr cpus; -@@ -1669,7 +1670,7 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED) - int id, cid; - int onlinecpus ATTRIBUTE_UNUSED; - -- if (nodeGetInfo(NULL, &nodeinfo) < 0) -+ if (nodeGetInfo(prefix, &nodeinfo) < 0) - return -1; - - ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo); -@@ -1683,7 +1684,7 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED) - for (c = 0; c < nodeinfo.cores; c++) { - for (t = 0; t < nodeinfo.threads; t++) { - #ifdef __linux__ -- if (virNodeGetCpuValue(SYSFS_CPU_PATH, id, "online", 1)) { -+ if (virNodeGetCpuValue(cpupath, id, "online", 1)) { - #endif - cpus[cid].id = id; - cpus[cid].socket_id = s; -@@ -1810,26 +1811,27 @@ nodeGetMemoryFake(unsigned long long *mem, - - /* returns 1 on success, 0 if the detection failed and -1 on hard error */ - static int --virNodeCapsFillCPUInfo(int cpu_id ATTRIBUTE_UNUSED, -+virNodeCapsFillCPUInfo(const char *cpupath ATTRIBUTE_UNUSED, -+ int cpu_id ATTRIBUTE_UNUSED, - virCapsHostNUMACellCPUPtr cpu ATTRIBUTE_UNUSED) - { - #ifdef __linux__ - int tmp; - cpu->id = cpu_id; - -- if ((tmp = virNodeGetCpuValue(SYSFS_CPU_PATH, cpu_id, -+ if ((tmp = virNodeGetCpuValue(cpupath, cpu_id, - "topology/physical_package_id", -1)) < 0) - return 0; - - cpu->socket_id = tmp; - -- if ((tmp = virNodeGetCpuValue(SYSFS_CPU_PATH, cpu_id, -+ if ((tmp = virNodeGetCpuValue(cpupath, cpu_id, - "topology/core_id", -1)) < 0) - return 0; - - cpu->core_id = tmp; - -- if (!(cpu->siblings = virNodeGetSiblingsList(SYSFS_CPU_PATH, cpu_id))) -+ if (!(cpu->siblings = virNodeGetSiblingsList(cpupath, cpu_id))) - return -1; - - return 0; -@@ -1917,8 +1919,11 @@ virNodeCapsGetPagesInfo(int node, - } - - int --nodeCapsInitNUMA(virCapsPtr caps) -+nodeCapsInitNUMA(const char *sysfs_prefix, -+ virCapsPtr caps) - { -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; -+ char *cpupath; - int n; - unsigned long long memory; - virCapsHostNUMACellCPUPtr cpus = NULL; -@@ -1933,8 +1938,13 @@ nodeCapsInitNUMA(virCapsPtr caps) - bool topology_failed = false; - int max_node; - -- if (!virNumaIsAvailable()) -- return nodeCapsInitNUMAFake(caps); -+ if (virAsprintf(&cpupath, "%s/cpu", prefix) < 0) -+ return -1; -+ -+ if (!virNumaIsAvailable()) { -+ ret = nodeCapsInitNUMAFake(prefix, cpupath, caps); -+ goto cleanup; -+ } - - if ((max_node = virNumaGetMaxNode()) < 0) - goto cleanup; -@@ -1955,7 +1965,7 @@ nodeCapsInitNUMA(virCapsPtr caps) - - for (i = 0; i < virBitmapSize(cpumap); i++) { - if (virBitmapIsBitSet(cpumap, i)) { -- if (virNodeCapsFillCPUInfo(i, cpus + cpu++) < 0) { -+ if (virNodeCapsFillCPUInfo(cpupath, i, cpus + cpu++) < 0) { - topology_failed = true; - virResetLastError(); - } -@@ -1995,6 +2005,7 @@ nodeCapsInitNUMA(virCapsPtr caps) - VIR_FREE(cpus); - VIR_FREE(siblings); - VIR_FREE(pageinfo); -+ VIR_FREE(cpupath); - return ret; - } - -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index ec53769..b28aaab 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -27,7 +27,7 @@ - # include "capabilities.h" - - int nodeGetInfo(const char *sysfs_prefix, virNodeInfoPtr nodeinfo); --int nodeCapsInitNUMA(virCapsPtr caps); -+int nodeCapsInitNUMA(const char *sysfs_prefix, virCapsPtr caps); - - int nodeGetCPUStats(int cpuNum, - virNodeCPUStatsPtr params, -diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c -index a4c5c31..db0a9a7 100644 ---- a/src/openvz/openvz_conf.c -+++ b/src/openvz/openvz_conf.c -@@ -175,7 +175,7 @@ virCapsPtr openvzCapsInit(void) - false, false)) == NULL) - goto no_memory; - -- if (nodeCapsInitNUMA(caps) < 0) -+ if (nodeCapsInitNUMA(NULL, caps) < 0) - goto no_memory; - - if ((guest = virCapabilitiesAddGuest(caps, -diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c -index ec0fde3..54dec70 100644 ---- a/src/phyp/phyp_driver.c -+++ b/src/phyp/phyp_driver.c -@@ -335,7 +335,7 @@ phypCapsInit(void) - * unexpected failures. We don't want to break the QEMU - * driver in this scenario, so log errors & carry on - */ -- if (nodeCapsInitNUMA(caps) < 0) { -+ if (nodeCapsInitNUMA(NULL, caps) < 0) { - virCapabilitiesFreeNUMAInfo(caps); - VIR_WARN - ("Failed to query host NUMA topology, disabling NUMA capabilities"); -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 39954bc..be5384f 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -1024,7 +1024,7 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache) - * unexpected failures. We don't want to break the QEMU - * driver in this scenario, so log errors & carry on - */ -- if (nodeCapsInitNUMA(caps) < 0) { -+ if (nodeCapsInitNUMA(NULL, caps) < 0) { - virCapabilitiesFreeNUMAInfo(caps); - VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); - } -diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c -index 86fbecc..90deb2a 100644 ---- a/src/uml/uml_conf.c -+++ b/src/uml/uml_conf.c -@@ -65,7 +65,7 @@ virCapsPtr umlCapsInit(void) - * unexpected failures. We don't want to break the QEMU - * driver in this scenario, so log errors & carry on - */ -- if (nodeCapsInitNUMA(caps) < 0) { -+ if (nodeCapsInitNUMA(NULL, caps) < 0) { - virCapabilitiesFreeNUMAInfo(caps); - VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); - } -diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c -index 5615df5..91a61f8 100644 ---- a/src/vbox/vbox_common.c -+++ b/src/vbox/vbox_common.c -@@ -318,7 +318,7 @@ static virCapsPtr vboxCapsInit(void) - false, false)) == NULL) - goto no_memory; - -- if (nodeCapsInitNUMA(caps) < 0) -+ if (nodeCapsInitNUMA(NULL, caps) < 0) - goto no_memory; - - if ((guest = virCapabilitiesAddGuest(caps, -diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c -index 5b249f8..21cf333 100644 ---- a/src/vmware/vmware_conf.c -+++ b/src/vmware/vmware_conf.c -@@ -68,7 +68,7 @@ vmwareCapsInit(void) - false, false)) == NULL) - goto error; - -- if (nodeCapsInitNUMA(caps) < 0) -+ if (nodeCapsInitNUMA(NULL, caps) < 0) - goto error; - - /* i686 guests are always supported */ -diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c -index 61d0d62..06d9d03 100644 ---- a/src/vz/vz_driver.c -+++ b/src/vz/vz_driver.c -@@ -91,7 +91,7 @@ vzBuildCapabilities(void) - false, false)) == NULL) - return NULL; - -- if (nodeCapsInitNUMA(caps) < 0) -+ if (nodeCapsInitNUMA(NULL, caps) < 0) - goto error; - - if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUBitmap.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUBitmap.patch deleted file mode 100644 index 3772309..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUBitmap.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 007cca58b412fbc476d6bebed0f1fbc7e9fa194e Mon Sep 17 00:00:00 2001 -Message-Id: <007cca58b412fbc476d6bebed0f1fbc7e9fa194e@dist-git> -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:10 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeGetCPUBitmap - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_SYSTEM_PATH. - -(cherry picked from commit f220a3e5a883035d609f81d481bf52bb1c0b4974) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 24 ++++++++++++++++-------- - src/nodeinfo.h | 2 +- - 2 files changed, 17 insertions(+), 9 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 34de720..75e0a02 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1275,29 +1275,35 @@ nodeGetPresentCPUBitmap(const char *sysfs_prefix) - } - - virBitmapPtr --nodeGetCPUBitmap(int *max_id ATTRIBUTE_UNUSED) -+nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, -+ int *max_id ATTRIBUTE_UNUSED) - { - #ifdef __linux__ -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; -+ char *online_path = NULL; - virBitmapPtr cpumap; - int present; - -- present = nodeGetCPUCount(NULL); -+ present = nodeGetCPUCount(prefix); - if (present < 0) - return NULL; - -- if (virFileExists(SYSFS_SYSTEM_PATH "/cpu/online")) { -- cpumap = linuxParseCPUmap(present, SYSFS_SYSTEM_PATH "/cpu/online"); -+ if (virAsprintf(&online_path, "%s/cpu/online", prefix) < 0) -+ return NULL; -+ if (virFileExists(online_path)) { -+ cpumap = linuxParseCPUmap(present, online_path); - } else { - size_t i; - - cpumap = virBitmapNew(present); - if (!cpumap) -- return NULL; -+ goto cleanup; - for (i = 0; i < present; i++) { -- int online = virNodeGetCpuValue(SYSFS_SYSTEM_PATH, i, "online", 1); -+ int online = virNodeGetCpuValue(prefix, i, "online", 1); - if (online < 0) { - virBitmapFree(cpumap); -- return NULL; -+ cpumap = NULL; -+ goto cleanup; - } - if (online) - ignore_value(virBitmapSetBit(cpumap, i)); -@@ -1305,6 +1311,8 @@ nodeGetCPUBitmap(int *max_id ATTRIBUTE_UNUSED) - } - if (max_id && cpumap) - *max_id = present; -+ cleanup: -+ VIR_FREE(online_path); - return cpumap; - #else - virReportError(VIR_ERR_NO_SUPPORT, "%s", -@@ -1630,7 +1638,7 @@ nodeGetCPUMap(unsigned char **cpumap, - if (!cpumap && !online) - return nodeGetCPUCount(NULL); - -- if (!(cpus = nodeGetCPUBitmap(&maxpresent))) -+ if (!(cpus = nodeGetCPUBitmap(NULL, &maxpresent))) - goto cleanup; - - if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 3ef206b..439ef35 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -44,7 +44,7 @@ int nodeGetMemory(unsigned long long *mem, - unsigned long long *freeMem); - - virBitmapPtr nodeGetPresentCPUBitmap(const char *sysfs_prefix); --virBitmapPtr nodeGetCPUBitmap(int *max_id); -+virBitmapPtr nodeGetCPUBitmap(const char *sysfs_prefix, int *max_id); - int nodeGetCPUCount(const char *sysfs_prefix); - - int nodeGetMemoryParameters(virTypedParameterPtr params, --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUCount.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUCount.patch deleted file mode 100644 index 885c78c..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUCount.patch +++ /dev/null @@ -1,197 +0,0 @@ -From 8fd08f800670d5e6ca2e1013d6ffbbf210b5aff4 Mon Sep 17 00:00:00 2001 -Message-Id: <8fd08f800670d5e6ca2e1013d6ffbbf210b5aff4@dist-git> -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:08 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeGetCPUCount - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_SYSTEM_PATH. - -(cherry picked from commit f1a43a0f91d80ccbbd9e084de17673e48c2e60f4) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/lxc/lxc_controller.c | 2 +- - src/nodeinfo.c | 20 +++++++++++++------- - src/nodeinfo.h | 2 +- - src/qemu/qemu_driver.c | 6 +++--- - src/qemu/qemu_process.c | 2 +- - src/vz/vz_sdk.c | 2 +- - tests/vircgrouptest.c | 4 ++-- - 7 files changed, 22 insertions(+), 16 deletions(-) - -diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c -index 828b8a8..27e2e3a 100644 ---- a/src/lxc/lxc_controller.c -+++ b/src/lxc/lxc_controller.c -@@ -705,7 +705,7 @@ static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl) - - /* setaffinity fails if you set bits for CPUs which - * aren't present, so we have to limit ourselves */ -- if ((hostcpus = nodeGetCPUCount()) < 0) -+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - return -1; - - if (maxcpu > hostcpus) -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index f3e3108..409f922 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1195,7 +1195,7 @@ int nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, - } - - int --nodeGetCPUCount(void) -+nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) - { - #if defined(__linux__) - /* To support older kernels that lack cpu/present, such as 2.6.18 -@@ -1204,21 +1204,27 @@ nodeGetCPUCount(void) - * will be consecutive. - */ - char *present_path = NULL; -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char *cpupath = NULL; - int ncpu = -1; - -- if (!(present_path = linuxGetCPUPresentPath(NULL))) -+ if (!(present_path = linuxGetCPUPresentPath(prefix))) - return -1; - - if (virFileExists(present_path)) { - ncpu = linuxParseCPUmax(present_path); -- } else if (virFileExists(SYSFS_SYSTEM_PATH "/cpu/cpu0")) { -+ goto cleanup; -+ } -+ -+ if (virAsprintf(&cpupath, "%s/cpu/cpu0", prefix) < 0) -+ goto cleanup; -+ if (virFileExists(cpupath)) { - ncpu = 0; - do { - ncpu++; - VIR_FREE(cpupath); - if (virAsprintf(&cpupath, "%s/cpu/cpu%d", -- SYSFS_SYSTEM_PATH, ncpu) < 0) { -+ prefix, ncpu) < 0) { - ncpu = -1; - goto cleanup; - } -@@ -1251,7 +1257,7 @@ nodeGetPresentCPUBitmap(void) - virBitmapPtr bitmap = NULL; - #endif - -- if ((max_present = nodeGetCPUCount()) < 0) -+ if ((max_present = nodeGetCPUCount(NULL)) < 0) - return NULL; - - #ifdef __linux__ -@@ -1274,7 +1280,7 @@ nodeGetCPUBitmap(int *max_id ATTRIBUTE_UNUSED) - virBitmapPtr cpumap; - int present; - -- present = nodeGetCPUCount(); -+ present = nodeGetCPUCount(NULL); - if (present < 0) - return NULL; - -@@ -1621,7 +1627,7 @@ nodeGetCPUMap(unsigned char **cpumap, - virCheckFlags(0, -1); - - if (!cpumap && !online) -- return nodeGetCPUCount(); -+ return nodeGetCPUCount(NULL); - - if (!(cpus = nodeGetCPUBitmap(&maxpresent))) - goto cleanup; -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 047bd5c..4f9699e 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -45,7 +45,7 @@ int nodeGetMemory(unsigned long long *mem, - - virBitmapPtr nodeGetPresentCPUBitmap(void); - virBitmapPtr nodeGetCPUBitmap(int *max_id); --int nodeGetCPUCount(void); -+int nodeGetCPUCount(const char *sysfs_prefix); - - int nodeGetMemoryParameters(virTypedParameterPtr params, - int *nparams, -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 8f5e4fb..e30a02d 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -5253,7 +5253,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom, - if (!(def = virDomainObjGetOneDef(vm, flags))) - goto cleanup; - -- if ((hostcpus = nodeGetCPUCount()) < 0) -+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - goto cleanup; - - if (!(allcpumap = virBitmapNew(hostcpus))) -@@ -5441,7 +5441,7 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, - if (!(def = virDomainObjGetOneDef(vm, flags))) - goto cleanup; - -- if ((hostcpus = nodeGetCPUCount()) < 0) -+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - goto cleanup; - - if (def->cputune.emulatorpin) { -@@ -5684,7 +5684,7 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, - if (targetDef->iothreads == 0) - return 0; - -- if ((hostcpus = nodeGetCPUCount()) < 0) -+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - goto cleanup; - - if (VIR_ALLOC_N(info_ret, targetDef->iothreads) < 0) -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index f41fd9d..e1c7f0b 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -2408,7 +2408,7 @@ qemuProcessInitCpuAffinity(virDomainObjPtr vm) - - /* setaffinity fails if you set bits for CPUs which - * aren't present, so we have to limit ourselves */ -- if ((hostcpus = nodeGetCPUCount()) < 0) -+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - goto cleanup; - - if (hostcpus > QEMUD_CPUMASK_LEN) -diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c -index f27098c..a584940 100644 ---- a/src/vz/vz_sdk.c -+++ b/src/vz/vz_sdk.c -@@ -1141,7 +1141,7 @@ prlsdkConvertCpuInfo(PRL_HANDLE sdkdom, - PRL_RESULT pret; - int ret = -1; - -- if ((hostcpus = nodeGetCPUCount()) < 0) -+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - goto cleanup; - - /* get number of CPUs */ -diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c -index dddf33a..7a87640 100644 ---- a/tests/vircgrouptest.c -+++ b/tests/vircgrouptest.c -@@ -649,8 +649,8 @@ static int testCgroupGetPercpuStats(const void *args ATTRIBUTE_UNUSED) - goto cleanup; - } - -- if (nodeGetCPUCount() != EXPECTED_NCPUS) { -- fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount()); -+ if (nodeGetCPUCount(NULL) != EXPECTED_NCPUS) { -+ fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount(NULL)); - goto cleanup; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUMap.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUMap.patch deleted file mode 100644 index 5a41d48..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUMap.patch +++ /dev/null @@ -1,151 +0,0 @@ -From 397e67c0f6ee09387ac871c7f3ac1fa9ba697287 Mon Sep 17 00:00:00 2001 -Message-Id: <397e67c0f6ee09387ac871c7f3ac1fa9ba697287@dist-git> -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:11 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeGetCPUMap - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_SYSTEM_PATH. - -(cherry picked from commit f1c6179f0d44a04abb2f7c2e58f2ef3dad2892b8) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/bhyve/bhyve_driver.c | 2 +- - src/lxc/lxc_driver.c | 2 +- - src/nodeinfo.c | 8 +++++--- - src/nodeinfo.h | 3 ++- - src/openvz/openvz_driver.c | 2 +- - src/qemu/qemu_driver.c | 2 +- - src/uml/uml_driver.c | 2 +- - src/vz/vz_driver.c | 2 +- - 8 files changed, 13 insertions(+), 10 deletions(-) - -diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c -index dc76cf7..68dff6c 100644 ---- a/src/bhyve/bhyve_driver.c -+++ b/src/bhyve/bhyve_driver.c -@@ -1299,7 +1299,7 @@ bhyveNodeGetCPUMap(virConnectPtr conn, - if (virNodeGetCPUMapEnsureACL(conn) < 0) - return -1; - -- return nodeGetCPUMap(cpumap, online, flags); -+ return nodeGetCPUMap(NULL, cpumap, online, flags); - } - - static int -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index 5ecfc7a..44a138b 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -5551,7 +5551,7 @@ lxcNodeGetCPUMap(virConnectPtr conn, - if (virNodeGetCPUMapEnsureACL(conn) < 0) - return -1; - -- return nodeGetCPUMap(cpumap, online, flags); -+ return nodeGetCPUMap(NULL, cpumap, online, flags); - } - - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 75e0a02..bf4f751 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1624,10 +1624,12 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, - } - - int --nodeGetCPUMap(unsigned char **cpumap, -+nodeGetCPUMap(const char *sysfs_prefix, -+ unsigned char **cpumap, - unsigned int *online, - unsigned int flags) - { -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - virBitmapPtr cpus = NULL; - int maxpresent; - int ret = -1; -@@ -1636,9 +1638,9 @@ nodeGetCPUMap(unsigned char **cpumap, - virCheckFlags(0, -1); - - if (!cpumap && !online) -- return nodeGetCPUCount(NULL); -+ return nodeGetCPUCount(prefix); - -- if (!(cpus = nodeGetCPUBitmap(NULL, &maxpresent))) -+ if (!(cpus = nodeGetCPUBitmap(prefix, &maxpresent))) - goto cleanup; - - if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 439ef35..9e6904f 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -55,7 +55,8 @@ int nodeSetMemoryParameters(virTypedParameterPtr params, - int nparams, - unsigned int flags); - --int nodeGetCPUMap(unsigned char **cpumap, -+int nodeGetCPUMap(const char *sysfs_prefix, -+ unsigned char **cpumap, - unsigned int *online, - unsigned int flags); - -diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c -index d1a327c..fc6f101 100644 ---- a/src/openvz/openvz_driver.c -+++ b/src/openvz/openvz_driver.c -@@ -2207,7 +2207,7 @@ openvzNodeGetCPUMap(virConnectPtr conn ATTRIBUTE_UNUSED, - unsigned int *online, - unsigned int flags) - { -- return nodeGetCPUMap(cpumap, online, flags); -+ return nodeGetCPUMap(NULL, cpumap, online, flags); - } - - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index e30a02d..6036363 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -18586,7 +18586,7 @@ qemuNodeGetCPUMap(virConnectPtr conn, - if (virNodeGetCPUMapEnsureACL(conn) < 0) - return -1; - -- return nodeGetCPUMap(cpumap, online, flags); -+ return nodeGetCPUMap(NULL, cpumap, online, flags); - } - - -diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c -index 7a95458..99162f7 100644 ---- a/src/uml/uml_driver.c -+++ b/src/uml/uml_driver.c -@@ -2877,7 +2877,7 @@ umlNodeGetCPUMap(virConnectPtr conn, - if (virNodeGetCPUMapEnsureACL(conn) < 0) - return -1; - -- return nodeGetCPUMap(cpumap, online, flags); -+ return nodeGetCPUMap(NULL, cpumap, online, flags); - } - - -diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c -index 47c5023..a98d65b 100644 ---- a/src/vz/vz_driver.c -+++ b/src/vz/vz_driver.c -@@ -884,7 +884,7 @@ vzNodeGetCPUMap(virConnectPtr conn ATTRIBUTE_UNUSED, - unsigned int *online, - unsigned int flags) - { -- return nodeGetCPUMap(cpumap, online, flags); -+ return nodeGetCPUMap(NULL, cpumap, online, flags); - } - - static int --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetInfo.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetInfo.patch deleted file mode 100644 index 898e8bc..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetInfo.patch +++ /dev/null @@ -1,226 +0,0 @@ -From 242c0464ea05a4c8e3ca02e79251e40de28b14eb Mon Sep 17 00:00:00 2001 -Message-Id: <242c0464ea05a4c8e3ca02e79251e40de28b14eb@dist-git> -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:12 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeGetInfo - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_SYSTEM_PATH. - -(cherry picked from commit 29e4f2243fb59a3b1fcbd69ee329e38f09960266) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/bhyve/bhyve_capabilities.c | 2 +- - src/bhyve/bhyve_driver.c | 2 +- - src/lxc/lxc_driver.c | 2 +- - src/nodeinfo.c | 9 ++++++--- - src/nodeinfo.h | 2 +- - src/openvz/openvz_conf.c | 2 +- - src/openvz/openvz_driver.c | 2 +- - src/qemu/qemu_capabilities.c | 2 +- - src/qemu/qemu_driver.c | 2 +- - src/uml/uml_driver.c | 2 +- - src/vbox/vbox_common.c | 2 +- - src/vz/vz_driver.c | 4 ++-- - 12 files changed, 18 insertions(+), 15 deletions(-) - -diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c -index e6d5518..3a55879 100644 ---- a/src/bhyve/bhyve_capabilities.c -+++ b/src/bhyve/bhyve_capabilities.c -@@ -51,7 +51,7 @@ virBhyveCapsInitCPU(virCapsPtr caps, - - cpu->arch = arch; - -- if (nodeGetInfo(&nodeinfo)) -+ if (nodeGetInfo(NULL, &nodeinfo)) - goto error; - - cpu->type = VIR_CPU_TYPE_HOST; -diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c -index 68dff6c..ba411a0 100644 ---- a/src/bhyve/bhyve_driver.c -+++ b/src/bhyve/bhyve_driver.c -@@ -1131,7 +1131,7 @@ bhyveNodeGetInfo(virConnectPtr conn, - if (virNodeGetInfoEnsureACL(conn) < 0) - return -1; - -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - static int -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index 44a138b..1206074 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -5398,7 +5398,7 @@ lxcNodeGetInfo(virConnectPtr conn, - if (virNodeGetInfoEnsureACL(conn) < 0) - return -1; - -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index bf4f751..2d715fd 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1034,7 +1034,8 @@ virNodeGetSiblingsList(const char *dir, int cpu_id) - } - #endif - --int nodeGetInfo(virNodeInfoPtr nodeinfo) -+int nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, -+ virNodeInfoPtr nodeinfo) - { - virArch hostarch = virArchFromHost(); - -@@ -1046,14 +1047,16 @@ int nodeGetInfo(virNodeInfoPtr nodeinfo) - #ifdef __linux__ - { - int ret = -1; -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - FILE *cpuinfo = fopen(CPUINFO_PATH, "r"); -+ - if (!cpuinfo) { - virReportSystemError(errno, - _("cannot open %s"), CPUINFO_PATH); - return -1; - } - -- ret = linuxNodeInfoCPUPopulate(cpuinfo, SYSFS_SYSTEM_PATH, -+ ret = linuxNodeInfoCPUPopulate(cpuinfo, prefix, - hostarch, nodeinfo); - if (ret < 0) - goto cleanup; -@@ -1666,7 +1669,7 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED) - int id, cid; - int onlinecpus ATTRIBUTE_UNUSED; - -- if (nodeGetInfo(&nodeinfo) < 0) -+ if (nodeGetInfo(NULL, &nodeinfo) < 0) - return -1; - - ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo); -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 9e6904f..ec53769 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -26,7 +26,7 @@ - - # include "capabilities.h" - --int nodeGetInfo(virNodeInfoPtr nodeinfo); -+int nodeGetInfo(const char *sysfs_prefix, virNodeInfoPtr nodeinfo); - int nodeCapsInitNUMA(virCapsPtr caps); - - int nodeGetCPUStats(int cpuNum, -diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c -index 49d78c6..a4c5c31 100644 ---- a/src/openvz/openvz_conf.c -+++ b/src/openvz/openvz_conf.c -@@ -637,7 +637,7 @@ openvzGetNodeCPUs(void) - { - virNodeInfo nodeinfo; - -- if (nodeGetInfo(&nodeinfo) < 0) -+ if (nodeGetInfo(NULL, &nodeinfo) < 0) - return 0; - - return nodeinfo.cpus; -diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c -index fc6f101..280b998 100644 ---- a/src/openvz/openvz_driver.c -+++ b/src/openvz/openvz_driver.c -@@ -2155,7 +2155,7 @@ static int - openvzNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED, - virNodeInfoPtr nodeinfo) - { -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index b4a6961..39954bc 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -961,7 +961,7 @@ virQEMUCapsInitCPU(virCapsPtr caps, - - cpu->arch = arch; - -- if (nodeGetInfo(&nodeinfo)) -+ if (nodeGetInfo(NULL, &nodeinfo)) - goto error; - - cpu->type = VIR_CPU_TYPE_HOST; -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 6036363..17593b9 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -18491,7 +18491,7 @@ qemuNodeGetInfo(virConnectPtr conn, - if (virNodeGetInfoEnsureACL(conn) < 0) - return -1; - -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - -diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c -index 99162f7..8606616 100644 ---- a/src/uml/uml_driver.c -+++ b/src/uml/uml_driver.c -@@ -2782,7 +2782,7 @@ umlNodeGetInfo(virConnectPtr conn, - if (virNodeGetInfoEnsureACL(conn) < 0) - return -1; - -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - -diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c -index 813a171..5615df5 100644 ---- a/src/vbox/vbox_common.c -+++ b/src/vbox/vbox_common.c -@@ -7537,7 +7537,7 @@ static int - vboxNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED, - virNodeInfoPtr nodeinfo) - { -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - static int -diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c -index a98d65b..61d0d62 100644 ---- a/src/vz/vz_driver.c -+++ b/src/vz/vz_driver.c -@@ -148,7 +148,7 @@ vzBuildCapabilities(void) - NULL, NULL, 0, NULL) == NULL) - goto error; - -- if (nodeGetInfo(&nodeinfo)) -+ if (nodeGetInfo(NULL, &nodeinfo)) - goto error; - - if (VIR_ALLOC(cpu) < 0) -@@ -781,7 +781,7 @@ static int - vzNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED, - virNodeInfoPtr nodeinfo) - { -- return nodeGetInfo(nodeinfo); -+ return nodeGetInfo(NULL, nodeinfo); - } - - static int vzConnectIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED) --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetMemoryStats.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetMemoryStats.patch deleted file mode 100644 index ef5a2a9..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetMemoryStats.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 69397bf8901e911a4e288bba84896a18b2604dd1 Mon Sep 17 00:00:00 2001 -Message-Id: <69397bf8901e911a4e288bba84896a18b2604dd1@dist-git> -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:14 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeGetMemoryStats - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_SYSTEM_PATH. - -(cherry picked from commit c71f0654fc8ed9e69b75b24eac83a3369e4e64b3) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/bhyve/bhyve_driver.c | 2 +- - src/lxc/lxc_driver.c | 2 +- - src/nodeinfo.c | 6 ++++-- - src/nodeinfo.h | 3 ++- - src/openvz/openvz_driver.c | 2 +- - src/qemu/qemu_driver.c | 2 +- - src/uml/uml_driver.c | 2 +- - 7 files changed, 11 insertions(+), 8 deletions(-) - -diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c -index ba411a0..85b7c8f 100644 ---- a/src/bhyve/bhyve_driver.c -+++ b/src/bhyve/bhyve_driver.c -@@ -1121,7 +1121,7 @@ bhyveNodeGetMemoryStats(virConnectPtr conn, - if (virNodeGetMemoryStatsEnsureACL(conn) < 0) - return -1; - -- return nodeGetMemoryStats(cellNum, params, nparams, flags); -+ return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); - } - - static int -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index 1206074..d8d5119 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -5484,7 +5484,7 @@ lxcNodeGetMemoryStats(virConnectPtr conn, - if (virNodeGetMemoryStatsEnsureACL(conn) < 0) - return -1; - -- return nodeGetMemoryStats(cellNum, params, nparams, flags); -+ return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); - } - - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index a71d05e..ca9cb3a 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1141,7 +1141,8 @@ int nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, - #endif - } - --int nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, -+int nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, -+ int cellNum ATTRIBUTE_UNUSED, - virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, - int *nparams ATTRIBUTE_UNUSED, - unsigned int flags) -@@ -1151,6 +1152,7 @@ int nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, - #ifdef __linux__ - { - int ret; -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char *meminfo_path = NULL; - FILE *meminfo; - int max_node; -@@ -1170,7 +1172,7 @@ int nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, - } - - if (virAsprintf(&meminfo_path, "%s/node/node%d/meminfo", -- SYSFS_SYSTEM_PATH, cellNum) < 0) -+ prefix, cellNum) < 0) - return -1; - } - meminfo = fopen(meminfo_path, "r"); -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index b28aaab..4f983c2 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -33,7 +33,8 @@ int nodeGetCPUStats(int cpuNum, - virNodeCPUStatsPtr params, - int *nparams, - unsigned int flags); --int nodeGetMemoryStats(int cellNum, -+int nodeGetMemoryStats(const char *sysfs_prefix, -+ int cellNum, - virNodeMemoryStatsPtr params, - int *nparams, - unsigned int flags); -diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c -index 280b998..fc8db7e 100644 ---- a/src/openvz/openvz_driver.c -+++ b/src/openvz/openvz_driver.c -@@ -2177,7 +2177,7 @@ openvzNodeGetMemoryStats(virConnectPtr conn ATTRIBUTE_UNUSED, - int *nparams, - unsigned int flags) - { -- return nodeGetMemoryStats(cellNum, params, nparams, flags); -+ return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); - } - - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 17593b9..6b715bf 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -18519,7 +18519,7 @@ qemuNodeGetMemoryStats(virConnectPtr conn, - if (virNodeGetMemoryStatsEnsureACL(conn) < 0) - return -1; - -- return nodeGetMemoryStats(cellNum, params, nparams, flags); -+ return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); - } - - -diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c -index 8606616..c3c5fa7 100644 ---- a/src/uml/uml_driver.c -+++ b/src/uml/uml_driver.c -@@ -2810,7 +2810,7 @@ umlNodeGetMemoryStats(virConnectPtr conn, - if (virNodeGetMemoryStatsEnsureACL(conn) < 0) - return -1; - -- return nodeGetMemoryStats(cellNum, params, nparams, flags); -+ return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); - } - - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetPresentCPUBitmap.patch b/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetPresentCPUBitmap.patch deleted file mode 100644 index 7b72653..0000000 --- a/SOURCES/libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetPresentCPUBitmap.patch +++ /dev/null @@ -1,78 +0,0 @@ -From ffadd3f17a8d1f970bcfe31cebd08a11da9fb5ef Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:09 +0200 -Subject: [PATCH] nodeinfo: Add sysfs_prefix to nodeGetPresentCPUBitmap - -Add the sysfs_prefix argument to the call to allow for setting the -path for tests to something other than SYSFS_SYSTEM_PATH. - -(cherry picked from commit 51281dcb9032610983c19dd98295a0aa8e5c40d6) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 7 ++++--- - src/nodeinfo.h | 2 +- - src/util/vircgroup.c | 2 +- - 3 files changed, 6 insertions(+), 5 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 409f922..34de720 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1249,19 +1249,20 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) - } - - virBitmapPtr --nodeGetPresentCPUBitmap(void) -+nodeGetPresentCPUBitmap(const char *sysfs_prefix) - { - int max_present; - #ifdef __linux__ - char *present_path = NULL; - virBitmapPtr bitmap = NULL; - #endif -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - -- if ((max_present = nodeGetCPUCount(NULL)) < 0) -+ if ((max_present = nodeGetCPUCount(prefix)) < 0) - return NULL; - - #ifdef __linux__ -- if (!(present_path = linuxGetCPUPresentPath(NULL))) -+ if (!(present_path = linuxGetCPUPresentPath(prefix))) - return NULL; - if (virFileExists(present_path)) - bitmap = linuxParseCPUmap(max_present, present_path); -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 4f9699e..3ef206b 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -43,7 +43,7 @@ int nodeGetCellsFreeMemory(unsigned long long *freeMems, - int nodeGetMemory(unsigned long long *mem, - unsigned long long *freeMem); - --virBitmapPtr nodeGetPresentCPUBitmap(void); -+virBitmapPtr nodeGetPresentCPUBitmap(const char *sysfs_prefix); - virBitmapPtr nodeGetCPUBitmap(int *max_id); - int nodeGetCPUCount(const char *sysfs_prefix); - -diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c -index 29b2ab9..0599ba5 100644 ---- a/src/util/vircgroup.c -+++ b/src/util/vircgroup.c -@@ -3037,7 +3037,7 @@ virCgroupGetPercpuStats(virCgroupPtr group, - } - - /* To parse account file, we need to know how many cpus are present. */ -- if (!(cpumap = nodeGetPresentCPUBitmap())) -+ if (!(cpumap = nodeGetPresentCPUBitmap(NULL))) - return rv; - - total_cpus = virBitmapSize(cpumap); --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Calculate-present-and-online-CPUs-only-once.patch b/SOURCES/libvirt-nodeinfo-Calculate-present-and-online-CPUs-only-once.patch deleted file mode 100644 index e24f908..0000000 --- a/SOURCES/libvirt-nodeinfo-Calculate-present-and-online-CPUs-only-once.patch +++ /dev/null @@ -1,149 +0,0 @@ -From ada52f5411197e518765aa5e09d41fc7a4550861 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:31 +0200 -Subject: [PATCH] nodeinfo: Calculate present and online CPUs only once - -Move the calls to the respective functions from virNodeParseNode(), -which is executed once for every NUMA node, to -linuxNodeInfoCPUPopulate(), which is executed just once per host. - -(cherry picked from commit 6395ec1cf029cfc0be371eea66da7bc379c31c69) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 46 ++++++++++++++++++++++++++-------------------- - 1 file changed, 26 insertions(+), 20 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 2328a86..6c8849d 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -390,12 +390,14 @@ virNodeParseSocket(const char *dir, - /* parses a node entry, returning number of processors in the node and - * filling arguments */ - static int --ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) -+ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) - ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) - ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7) --virNodeParseNode(const char *sysfs_prefix, -- const char *node, -+ATTRIBUTE_NONNULL(8) -+virNodeParseNode(const char *node, - virArch arch, -+ virBitmapPtr present_cpus_map, -+ virBitmapPtr online_cpus_map, - int *sockets, - int *cores, - int *threads, -@@ -408,12 +410,10 @@ virNodeParseNode(const char *sysfs_prefix, - int processors = 0; - DIR *cpudir = NULL; - struct dirent *cpudirent = NULL; -- virBitmapPtr present_cpumap = NULL; -- virBitmapPtr online_cpus_map = NULL; - virBitmapPtr node_cpus_map = NULL; - virBitmapPtr sockets_map = NULL; - virBitmapPtr *cores_maps = NULL; -- int npresent_cpus; -+ int npresent_cpus = virBitmapSize(present_cpus_map); - int sock_max = 0; - int sock; - int core; -@@ -431,15 +431,6 @@ virNodeParseNode(const char *sysfs_prefix, - goto cleanup; - } - -- present_cpumap = nodeGetPresentCPUBitmap(sysfs_prefix); -- if (!present_cpumap) -- goto cleanup; -- online_cpus_map = nodeGetOnlineCPUBitmap(sysfs_prefix); -- if (!online_cpus_map) -- goto cleanup; -- -- npresent_cpus = virBitmapSize(present_cpumap); -- - /* Keep track of the CPUs that belong to the current node */ - if (!(node_cpus_map = virBitmapNew(npresent_cpus))) - goto cleanup; -@@ -452,7 +443,7 @@ virNodeParseNode(const char *sysfs_prefix, - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; - -- if (!virBitmapIsBitSet(present_cpumap, cpu)) -+ if (!virBitmapIsBitSet(present_cpus_map, cpu)) - continue; - - /* Mark this CPU as part of the current node */ -@@ -565,8 +556,6 @@ virNodeParseNode(const char *sysfs_prefix, - VIR_FREE(cores_maps); - virBitmapFree(sockets_map); - virBitmapFree(node_cpus_map); -- virBitmapFree(online_cpus_map); -- virBitmapFree(present_cpumap); - - return ret; - } -@@ -578,6 +567,8 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - virNodeInfoPtr nodeinfo) - { - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; -+ virBitmapPtr present_cpus_map = NULL; -+ virBitmapPtr online_cpus_map = NULL; - char line[1024]; - DIR *nodedir = NULL; - struct dirent *nodedirent = NULL; -@@ -669,6 +660,15 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - } - } - -+ /* Get information about what CPUs are present in the host and what -+ * CPUs are online, so that we don't have to so for each node */ -+ present_cpus_map = nodeGetPresentCPUBitmap(sysfs_prefix); -+ if (!present_cpus_map) -+ goto cleanup; -+ online_cpus_map = nodeGetOnlineCPUBitmap(sysfs_prefix); -+ if (!online_cpus_map) -+ goto cleanup; -+ - /* OK, we've parsed clock speed out of /proc/cpuinfo. Get the - * core, node, socket, thread and topology information from /sys - */ -@@ -690,7 +690,9 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - prefix, nodedirent->d_name) < 0) - goto cleanup; - -- if ((cpus = virNodeParseNode(sysfs_prefix, sysfs_cpudir, arch, -+ if ((cpus = virNodeParseNode(sysfs_cpudir, arch, -+ present_cpus_map, -+ online_cpus_map, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -721,7 +723,9 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - if (virAsprintf(&sysfs_cpudir, "%s/cpu", prefix) < 0) - goto cleanup; - -- if ((cpus = virNodeParseNode(sysfs_prefix, sysfs_cpudir, arch, -+ if ((cpus = virNodeParseNode(sysfs_cpudir, arch, -+ present_cpus_map, -+ online_cpus_map, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -775,6 +779,8 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - ret = -1; - } - -+ virBitmapFree(present_cpus_map); -+ virBitmapFree(online_cpus_map); - VIR_FREE(sysfs_nodedir); - VIR_FREE(sysfs_cpudir); - return ret; --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Check-for-errors-when-reading-core_id.patch b/SOURCES/libvirt-nodeinfo-Check-for-errors-when-reading-core_id.patch deleted file mode 100644 index c50c65b..0000000 --- a/SOURCES/libvirt-nodeinfo-Check-for-errors-when-reading-core_id.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 79b6cde136f9f067bfc2ef2477525218f2c4ca19 Mon Sep 17 00:00:00 2001 -Message-Id: <79b6cde136f9f067bfc2ef2477525218f2c4ca19@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:32 +0200 -Subject: [PATCH] nodeinfo: Check for errors when reading core_id - -(cherry picked from commit f86c45ca0c10c84c954ed201531ab31129d9c9c3) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 6c8849d..8b56376 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -511,7 +511,9 @@ virNodeParseNode(const char *node, - /* logical cpu is equivalent to a core on s390 */ - core = cpu; - } else { -- core = virNodeGetCpuValue(node, cpu, "topology/core_id", 0); -+ if ((core = virNodeGetCpuValue(node, cpu, -+ "topology/core_id", 0)) < 0) -+ goto cleanup; - } - if (core > ID_MAX) { - virReportError(VIR_ERR_INTERNAL_ERROR, --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Fix-build-failure-when-KVM-headers-are-not-available.patch b/SOURCES/libvirt-nodeinfo-Fix-build-failure-when-KVM-headers-are-not-available.patch deleted file mode 100644 index d0ecdbc..0000000 --- a/SOURCES/libvirt-nodeinfo-Fix-build-failure-when-KVM-headers-are-not-available.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 1693e23be444bd7adf9d65062cddb906855bbf24 Mon Sep 17 00:00:00 2001 -Message-Id: <1693e23be444bd7adf9d65062cddb906855bbf24@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:40 +0200 -Subject: [PATCH] nodeinfo: Fix build failure when KVM headers are not - available - -Compiler error: - - ../../src/nodeinfo.c: In function 'nodeGetThreadsPerSubcore': - ../../src/nodeinfo.c:2393: error: label 'out' defined but not used [-Wunused-label] - ../../src/nodeinfo.c:2352: error: unused parameter 'arch' [-Wunused-parameter] - -(cherry picked from commit 88c4c32af17adfc21b810b62b71de8b2d245fef9) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 17 ++++++++++++++--- - 1 file changed, 14 insertions(+), 3 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index ec78f65..d662be5 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -2340,6 +2340,8 @@ nodeAllocPages(unsigned int npages, - return ret; - } - -+#if HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) -+ - /* Get the number of threads per subcore. - * - * This will be 2, 4 or 8 on POWER hosts, depending on the current -@@ -2351,8 +2353,6 @@ int - nodeGetThreadsPerSubcore(virArch arch) - { - int threads_per_subcore = 0; -- --#if HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) - const char *kvmpath = "/dev/kvm"; - int kvmfd; - -@@ -2387,8 +2387,19 @@ nodeGetThreadsPerSubcore(virArch arch) - - VIR_FORCE_CLOSE(kvmfd); - } --#endif /* HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) */ - - out: - return threads_per_subcore; - } -+ -+#else -+ -+/* Fallback for nodeGetThreadsPerSubcore() used when KVM headers -+ * are not available on the system */ -+int -+nodeGetThreadsPerSubcore(virArch arch ATTRIBUTE_UNUSED) -+{ -+ return 0; -+} -+ -+#endif /* HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) */ --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Fix-nodeGetCPUBitmap-s-fallback-code-path.patch b/SOURCES/libvirt-nodeinfo-Fix-nodeGetCPUBitmap-s-fallback-code-path.patch deleted file mode 100644 index 704fe68..0000000 --- a/SOURCES/libvirt-nodeinfo-Fix-nodeGetCPUBitmap-s-fallback-code-path.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 44e605079ad64ead62dc949c9cd81326f10d3711 Mon Sep 17 00:00:00 2001 -Message-Id: <44e605079ad64ead62dc949c9cd81326f10d3711@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:21 +0200 -Subject: [PATCH] nodeinfo: Fix nodeGetCPUBitmap()'s fallback code path - -During the recent refactoring/cleanups, a bug has been introduced -that caused all CPUs to be reported as online unless the sysfs -cpu/present file was available. - -This commit fixes the fallback code path by building the directory -path passed to virNodeGetCpuValue() correctly. - -(cherry picked from commit 2a6801892ac962d8176f764edde219ae00cb7f3a) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index c874fa6..105d7ab 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1300,6 +1300,7 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, - #ifdef __linux__ - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char *online_path = NULL; -+ char *cpudir = NULL; - virBitmapPtr cpumap; - int present; - -@@ -1317,8 +1318,12 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, - cpumap = virBitmapNew(present); - if (!cpumap) - goto cleanup; -+ -+ if (virAsprintf(&cpudir, "%s/cpu", prefix) < 0) -+ goto cleanup; -+ - for (i = 0; i < present; i++) { -- int online = virNodeGetCpuValue(prefix, i, "online", 1); -+ int online = virNodeGetCpuValue(cpudir, i, "online", 1); - if (online < 0) { - virBitmapFree(cpumap); - cpumap = NULL; -@@ -1332,6 +1337,7 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, - *max_id = present; - cleanup: - VIR_FREE(online_path); -+ VIR_FREE(cpudir); - return cpumap; - #else - virReportError(VIR_ERR_NO_SUPPORT, "%s", --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Fix-output-on-PPC64-KVM-hosts.patch b/SOURCES/libvirt-nodeinfo-Fix-output-on-PPC64-KVM-hosts.patch deleted file mode 100644 index 9260d4b..0000000 --- a/SOURCES/libvirt-nodeinfo-Fix-output-on-PPC64-KVM-hosts.patch +++ /dev/null @@ -1,304 +0,0 @@ -From f5b7d2d701f347b9b4e13d008de476e37c82c8cb Mon Sep 17 00:00:00 2001 -Message-Id: -From: Shivaprasad G Bhat -Date: Wed, 5 Aug 2015 18:18:35 +0200 -Subject: [PATCH] nodeinfo: Fix output on PPC64 KVM hosts - -The nodeinfo is reporting incorrect number of cpus and incorrect host -topology on PPC64 KVM hosts. The KVM hypervisor on PPC64 needs only -the primary thread in a core to be online, and the secondaries offlined. -While scheduling a guest in, the kvm scheduler wakes up the secondaries to -run in guest context. - -The host scheduling of the guests happen at the core level(as only primary -thread is online). The kvm scheduler exploits as many threads of the core -as needed by guest. Further, starting POWER8, the processor allows splitting -a physical core into multiple subcores with 2 or 4 threads each. Again, only -the primary thread in a subcore is online in the host. The KVM-PPC -scheduler allows guests to exploit all the offline threads in the subcore, -by bringing them online when needed. -(Kernel patches on split-core http://www.spinics.net/lists/kvm-ppc/msg09121.html) - -Recently with dynamic micro-threading changes in ppc-kvm, makes sure -to utilize all the offline cpus across guests, and across guests with -different cpu topologies. -(https://www.mail-archive.com/kvm@vger.kernel.org/msg115978.html) - -Since the offline cpus are brought online in the guest context, it is safe -to count them as online. Nodeinfo today discounts these offline cpus from -cpu count/topology calclulation, and the nodeinfo output is not of any help -and the host appears overcommited when it is actually not. - -The patch carefully counts those offline threads whose primary threads are -online. The host topology displayed by the nodeinfo is also fixed when the -host is in valid kvm state. - -Signed-off-by: Shivaprasad G Bhat -Signed-off-by: Andrea Bolognani -(cherry picked from commit 014208c4d028d2a632cdfe89d361fca8811899b6) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/nodeinfo.c | 153 +++++++++++++++++++++++++++++++++++++++++++++-- - src/nodeinfo.h | 1 + - 3 files changed, 151 insertions(+), 4 deletions(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 1363c92..a6b523a 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1008,6 +1008,7 @@ nodeGetMemoryParameters; - nodeGetMemoryStats; - nodeGetOnlineCPUBitmap; - nodeGetPresentCPUBitmap; -+nodeGetThreadsPerSubcore; - nodeSetMemoryParameters; - - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 8b56376..ec78f65 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -31,6 +31,12 @@ - #include - #include - #include "conf/domain_conf.h" -+#include -+#include -+ -+#if HAVE_LINUX_KVM_H -+# include -+#endif - - #if defined(__FreeBSD__) || defined(__APPLE__) - # include -@@ -391,13 +397,14 @@ virNodeParseSocket(const char *dir, - * filling arguments */ - static int - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) --ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) --ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7) --ATTRIBUTE_NONNULL(8) -+ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(6) -+ATTRIBUTE_NONNULL(7) ATTRIBUTE_NONNULL(8) -+ATTRIBUTE_NONNULL(9) - virNodeParseNode(const char *node, - virArch arch, - virBitmapPtr present_cpus_map, - virBitmapPtr online_cpus_map, -+ int threads_per_subcore, - int *sockets, - int *cores, - int *threads, -@@ -491,7 +498,18 @@ virNodeParseNode(const char *node, - continue; - - if (!virBitmapIsBitSet(online_cpus_map, cpu)) { -- (*offline)++; -+ if (threads_per_subcore > 0 && -+ cpu % threads_per_subcore != 0 && -+ virBitmapIsBitSet(online_cpus_map, -+ cpu - (cpu % threads_per_subcore))) { -+ /* Secondary offline threads are counted as online when -+ * subcores are in use and the corresponding primary -+ * thread is online */ -+ processors++; -+ } else { -+ /* But they are counted as offline otherwise */ -+ (*offline)++; -+ } - continue; - } - -@@ -544,6 +562,12 @@ virNodeParseNode(const char *node, - *cores = core; - } - -+ if (threads_per_subcore > 0) { -+ /* The thread count ignores offline threads, which means that only -+ * only primary threads have been considered so far. If subcores -+ * are in use, we need to also account for secondary threads */ -+ *threads *= threads_per_subcore; -+ } - ret = processors; - - cleanup: -@@ -562,6 +586,41 @@ virNodeParseNode(const char *node, - return ret; - } - -+/* Check whether the host subcore configuration is valid. -+ * -+ * A valid configuration is one where no secondary thread is online; -+ * the primary thread in a subcore is always the first one */ -+static bool -+nodeHasValidSubcoreConfiguration(const char *sysfs_prefix, -+ int threads_per_subcore) -+{ -+ virBitmapPtr online_cpus = NULL; -+ int cpu = -1; -+ bool ret = false; -+ -+ /* No point in checking if subcores are not in use */ -+ if (threads_per_subcore <= 0) -+ goto cleanup; -+ -+ if (!(online_cpus = nodeGetOnlineCPUBitmap(sysfs_prefix))) -+ goto cleanup; -+ -+ while ((cpu = virBitmapNextSetBit(online_cpus, cpu)) >= 0) { -+ -+ /* A single online secondary thread is enough to -+ * make the configuration invalid */ -+ if (cpu % threads_per_subcore != 0) -+ goto cleanup; -+ } -+ -+ ret = true; -+ -+ cleanup: -+ virBitmapFree(online_cpus); -+ -+ return ret; -+} -+ - int - linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - FILE *cpuinfo, -@@ -575,6 +634,7 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - DIR *nodedir = NULL; - struct dirent *nodedirent = NULL; - int cpus, cores, socks, threads, offline = 0; -+ int threads_per_subcore = 0; - unsigned int node; - int ret = -1; - char *sysfs_nodedir = NULL; -@@ -682,6 +742,36 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - goto fallback; - } - -+ /* PPC-KVM needs the secondary threads of a core to be offline on the -+ * host. The kvm scheduler brings the secondary threads online in the -+ * guest context. Moreover, P8 processor has split-core capability -+ * where, there can be 1,2 or 4 subcores per core. The primaries of the -+ * subcores alone will be online on the host for a subcore in the -+ * host. Even though the actual threads per core for P8 processor is 8, -+ * depending on the subcores_per_core = 1, 2 or 4, the threads per -+ * subcore will vary accordingly to 8, 4 and 2 repectively. -+ * So, On host threads_per_core what is arrived at from sysfs in the -+ * current logic is actually the subcores_per_core. Threads per subcore -+ * can only be obtained from the kvm device. For example, on P8 wih 1 -+ * core having 8 threads, sub_cores_percore=4, the threads 0,2,4 & 6 -+ * will be online. The sysfs reflects this and in the current logic -+ * variable 'threads' will be 4 which is nothing but subcores_per_core. -+ * If the user tampers the cpu online/offline states using chcpu or other -+ * means, then it is an unsupported configuration for kvm. -+ * The code below tries to keep in mind -+ * - when the libvirtd is run inside a KVM guest or Phyp based guest. -+ * - Or on the kvm host where user manually tampers the cpu states to -+ * offline/online randomly. -+ * On hosts other than POWER this will be 0, in which case a simpler -+ * thread-counting logic will be used */ -+ if ((threads_per_subcore = nodeGetThreadsPerSubcore(arch)) < 0) -+ goto cleanup; -+ -+ /* If the subcore configuration is not valid, just pretend subcores -+ * are not in use and count threads one by one */ -+ if (!nodeHasValidSubcoreConfiguration(sysfs_prefix, threads_per_subcore)) -+ threads_per_subcore = 0; -+ - while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) > 0) { - if (sscanf(nodedirent->d_name, "node%u", &node) != 1) - continue; -@@ -695,6 +785,7 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - if ((cpus = virNodeParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, -+ threads_per_subcore, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -728,6 +819,7 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - if ((cpus = virNodeParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, -+ threads_per_subcore, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -2247,3 +2339,56 @@ nodeAllocPages(unsigned int npages, - cleanup: - return ret; - } -+ -+/* Get the number of threads per subcore. -+ * -+ * This will be 2, 4 or 8 on POWER hosts, depending on the current -+ * micro-threading configuration, and 0 everywhere else. -+ * -+ * Returns the number of threads per subcore if subcores are in use, zero -+ * if subcores are not in use, and a negative value on error */ -+int -+nodeGetThreadsPerSubcore(virArch arch) -+{ -+ int threads_per_subcore = 0; -+ -+#if HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) -+ const char *kvmpath = "/dev/kvm"; -+ int kvmfd; -+ -+ if (ARCH_IS_PPC64(arch)) { -+ -+ /* It's okay if /dev/kvm doesn't exist, because -+ * a. we might be running in a guest -+ * b. the kvm module might not be installed or enabled -+ * In either case, falling back to the subcore-unaware thread -+ * counting logic is the right thing to do */ -+ if (!virFileExists(kvmpath)) -+ goto out; -+ -+ if ((kvmfd = open(kvmpath, O_RDONLY)) < 0) { -+ /* This can happen when running as a regular user if -+ * permissions are tight enough, in which case erroring out -+ * is better than silently falling back and reporting -+ * different nodeinfo depending on the user */ -+ virReportSystemError(errno, -+ _("Failed to open '%s'"), -+ kvmpath); -+ threads_per_subcore = -1; -+ goto out; -+ } -+ -+ /* For Phyp and KVM based guests the ioctl for KVM_CAP_PPC_SMT -+ * returns zero and both primary and secondary threads will be -+ * online */ -+ threads_per_subcore = ioctl(kvmfd, -+ KVM_CHECK_EXTENSION, -+ KVM_CAP_PPC_SMT); -+ -+ VIR_FORCE_CLOSE(kvmfd); -+ } -+#endif /* HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) */ -+ -+ out: -+ return threads_per_subcore; -+} -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 1810c1c..ac96dca 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -47,6 +47,7 @@ int nodeGetMemory(unsigned long long *mem, - virBitmapPtr nodeGetPresentCPUBitmap(const char *sysfs_prefix); - virBitmapPtr nodeGetOnlineCPUBitmap(const char *sysfs_prefix); - int nodeGetCPUCount(const char *sysfs_prefix); -+int nodeGetThreadsPerSubcore(virArch arch); - - int nodeGetMemoryParameters(virTypedParameterPtr params, - int *nparams, --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Formatting-changes.patch b/SOURCES/libvirt-nodeinfo-Formatting-changes.patch deleted file mode 100644 index 6e94b2d..0000000 --- a/SOURCES/libvirt-nodeinfo-Formatting-changes.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 276ade698758d0fe906f48b525fc803e6a072458 Mon Sep 17 00:00:00 2001 -Message-Id: <276ade698758d0fe906f48b525fc803e6a072458@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:18 +0200 -Subject: [PATCH] nodeinfo: Formatting changes - -(cherry picked from commit aa6c3fee866312ad02f675cd69b82ada7d1e0dfd) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 36 ++++++++++++++++++++---------------- - 1 file changed, 20 insertions(+), 16 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 60dfc8b..c874fa6 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -208,7 +208,7 @@ freebsdNodeGetCPUStats(int cpuNum, - - static int - freebsdNodeGetMemoryStats(virNodeMemoryStatsPtr params, -- int *nparams) -+ int *nparams) - { - size_t i, j = 0; - unsigned long pagesize = getpagesize() >> 10; -@@ -552,10 +552,11 @@ virNodeParseNode(const char *sysfs_prefix, - return ret; - } - --int linuxNodeInfoCPUPopulate(const char *sysfs_prefix, -- FILE *cpuinfo, -- virArch arch, -- virNodeInfoPtr nodeinfo) -+int -+linuxNodeInfoCPUPopulate(const char *sysfs_prefix, -+ FILE *cpuinfo, -+ virArch arch, -+ virNodeInfoPtr nodeinfo) - { - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char line[1024]; -@@ -1046,8 +1047,9 @@ virNodeGetSiblingsList(const char *dir, int cpu_id) - } - #endif - --int nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, -- virNodeInfoPtr nodeinfo) -+int -+nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, -+ virNodeInfoPtr nodeinfo) - { - virArch hostarch = virArchFromHost(); - -@@ -1123,10 +1125,11 @@ int nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, - #endif - } - --int nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, -- virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, -- int *nparams ATTRIBUTE_UNUSED, -- unsigned int flags) -+int -+nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, -+ virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, -+ int *nparams ATTRIBUTE_UNUSED, -+ unsigned int flags) - { - virCheckFlags(0, -1); - -@@ -1153,11 +1156,12 @@ int nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, - #endif - } - --int nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, -- int cellNum ATTRIBUTE_UNUSED, -- virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, -- int *nparams ATTRIBUTE_UNUSED, -- unsigned int flags) -+int -+nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, -+ int cellNum ATTRIBUTE_UNUSED, -+ virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, -+ int *nparams ATTRIBUTE_UNUSED, -+ unsigned int flags) - { - virCheckFlags(0, -1); - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Introduce-linuxGetCPUGlobalPath.patch b/SOURCES/libvirt-nodeinfo-Introduce-linuxGetCPUGlobalPath.patch deleted file mode 100644 index 7138124..0000000 --- a/SOURCES/libvirt-nodeinfo-Introduce-linuxGetCPUGlobalPath.patch +++ /dev/null @@ -1,53 +0,0 @@ -From a2dd895c863e4921fcc7e5b1939f8ca2526768c0 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:22 +0200 -Subject: [PATCH] nodeinfo: Introduce linuxGetCPUGlobalPath() - -This is just a more generic version of linuxGetCPUPresentPath(), -which is now implemented by calling the new function appropriately. - -(cherry picked from commit bd87f07c25bcdeaa48219deb7dbd94b5fcd6ca3c) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 105d7ab..b09a4fd 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -958,16 +958,24 @@ linuxNodeGetMemoryStats(FILE *meminfo, - } - - static char * --linuxGetCPUPresentPath(const char *sysfs_prefix) -+linuxGetCPUGlobalPath(const char *sysfs_prefix, -+ const char *file) - { - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char *path = NULL; - -- if (virAsprintf(&path, "%s/cpu/present", prefix) < 0) -+ if (virAsprintf(&path, "%s/cpu/%s", prefix, file) < 0) - return NULL; -+ - return path; - } - -+static char * -+linuxGetCPUPresentPath(const char *sysfs_prefix) -+{ -+ return linuxGetCPUGlobalPath(sysfs_prefix, "present"); -+} -+ - /* Determine the maximum cpu id from a Linux sysfs cpu/present file. */ - static int - linuxParseCPUmax(const char *path) --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Introduce-linuxGetCPUOnlinePath.patch b/SOURCES/libvirt-nodeinfo-Introduce-linuxGetCPUOnlinePath.patch deleted file mode 100644 index a96d1a2..0000000 --- a/SOURCES/libvirt-nodeinfo-Introduce-linuxGetCPUOnlinePath.patch +++ /dev/null @@ -1,45 +0,0 @@ -From bad19eb327daa3ad90674f09587113a2ef6d3620 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:23 +0200 -Subject: [PATCH] nodeinfo: Introduce linuxGetCPUOnlinePath() - -(cherry picked from commit 6fecc4017d953d2c4c73b29b0ac6209644585137) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index b09a4fd..5459cc6 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -976,6 +976,12 @@ linuxGetCPUPresentPath(const char *sysfs_prefix) - return linuxGetCPUGlobalPath(sysfs_prefix, "present"); - } - -+static char * -+linuxGetCPUOnlinePath(const char *sysfs_prefix) -+{ -+ return linuxGetCPUGlobalPath(sysfs_prefix, "online"); -+} -+ - /* Determine the maximum cpu id from a Linux sysfs cpu/present file. */ - static int - linuxParseCPUmax(const char *path) -@@ -1316,7 +1322,7 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, - if (present < 0) - return NULL; - -- if (virAsprintf(&online_path, "%s/cpu/online", prefix) < 0) -+ if (!(online_path = linuxGetCPUOnlinePath(sysfs_prefix))) - return NULL; - if (virFileExists(online_path)) { - cpumap = linuxParseCPUmap(present, online_path); --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Introduce-local-linuxGetCPUPresentPath.patch b/SOURCES/libvirt-nodeinfo-Introduce-local-linuxGetCPUPresentPath.patch deleted file mode 100644 index 9e6057e..0000000 --- a/SOURCES/libvirt-nodeinfo-Introduce-local-linuxGetCPUPresentPath.patch +++ /dev/null @@ -1,118 +0,0 @@ -From e1215ada2684480adcac35d58728cfac4fffd537 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Wed, 5 Aug 2015 18:18:07 +0200 -Subject: [PATCH] nodeinfo: Introduce local linuxGetCPUPresentPath - -The API will print the path to the /cpu/present file using the sysfs_prefix. - -NB: This is setup for future patches which will allow local/test sysfs paths. - -(cherry picked from commit 3119e05e267d6d5e49b54c8353d9e49da4889d1d) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 43 ++++++++++++++++++++++++++++++++++--------- - 1 file changed, 34 insertions(+), 9 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 2fafe2d..f3e3108 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1,7 +1,7 @@ - /* - * nodeinfo.c: Helper routines for OS specific node information - * -- * Copyright (C) 2006-2008, 2010-2014 Red Hat, Inc. -+ * Copyright (C) 2006-2008, 2010-2015 Red Hat, Inc. - * Copyright (C) 2006 Daniel P. Berrange - * - * This library is free software; you can redistribute it and/or -@@ -944,6 +944,16 @@ linuxNodeGetMemoryStats(FILE *meminfo, - return ret; - } - -+static char * -+linuxGetCPUPresentPath(const char *sysfs_prefix) -+{ -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; -+ char *path = NULL; -+ -+ if (virAsprintf(&path, "%s/cpu/present", prefix) < 0) -+ return NULL; -+ return path; -+} - - /* Determine the maximum cpu id from a Linux sysfs cpu/present file. */ - static int -@@ -1193,27 +1203,34 @@ nodeGetCPUCount(void) - * that such kernels also lack hotplug, and therefore cpu/cpuNN - * will be consecutive. - */ -+ char *present_path = NULL; - char *cpupath = NULL; -- int ncpu; -+ int ncpu = -1; - -- if (virFileExists(SYSFS_SYSTEM_PATH "/cpu/present")) { -- ncpu = linuxParseCPUmax(SYSFS_SYSTEM_PATH "/cpu/present"); -+ if (!(present_path = linuxGetCPUPresentPath(NULL))) -+ return -1; -+ -+ if (virFileExists(present_path)) { -+ ncpu = linuxParseCPUmax(present_path); - } else if (virFileExists(SYSFS_SYSTEM_PATH "/cpu/cpu0")) { - ncpu = 0; - do { - ncpu++; - VIR_FREE(cpupath); - if (virAsprintf(&cpupath, "%s/cpu/cpu%d", -- SYSFS_SYSTEM_PATH, ncpu) < 0) -- return -1; -+ SYSFS_SYSTEM_PATH, ncpu) < 0) { -+ ncpu = -1; -+ goto cleanup; -+ } - } while (virFileExists(cpupath)); - } else { - /* no cpu/cpu0: we give up */ - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("host cpu counting not supported on this node")); -- return -1; - } - -+ cleanup: -+ VIR_FREE(present_path); - VIR_FREE(cpupath); - return ncpu; - #elif defined(__FreeBSD__) || defined(__APPLE__) -@@ -1229,13 +1246,21 @@ virBitmapPtr - nodeGetPresentCPUBitmap(void) - { - int max_present; -+#ifdef __linux__ -+ char *present_path = NULL; -+ virBitmapPtr bitmap = NULL; -+#endif - - if ((max_present = nodeGetCPUCount()) < 0) - return NULL; - - #ifdef __linux__ -- if (virFileExists(SYSFS_SYSTEM_PATH "/cpu/present")) -- return linuxParseCPUmap(max_present, SYSFS_SYSTEM_PATH "/cpu/present"); -+ if (!(present_path = linuxGetCPUPresentPath(NULL))) -+ return NULL; -+ if (virFileExists(present_path)) -+ bitmap = linuxParseCPUmap(max_present, present_path); -+ VIR_FREE(present_path); -+ return bitmap; - #endif - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("non-continuous host cpu numbers not implemented on this platform")); --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Make-sysfs_prefix-usage-more-consistent.patch b/SOURCES/libvirt-nodeinfo-Make-sysfs_prefix-usage-more-consistent.patch deleted file mode 100644 index 4c561b3..0000000 --- a/SOURCES/libvirt-nodeinfo-Make-sysfs_prefix-usage-more-consistent.patch +++ /dev/null @@ -1,266 +0,0 @@ -From 7186535d4cb2661b6cc841440b46a154e6598d8e Mon Sep 17 00:00:00 2001 -Message-Id: <7186535d4cb2661b6cc841440b46a154e6598d8e@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:17 +0200 -Subject: [PATCH] nodeinfo: Make sysfs_prefix usage more consistent - -Make sure sysfs_prefix, when present, is always the first argument -to a function; don't use a different name to refer to it; check -whether it is NULL, and hence SYSFS_SYSTEM_PATH should be used, only -when using it directly and not just passing it down to another -function; always pass down the same value we've been passed when -calling another function. - -(cherry picked from commit 75f6f5454602d54bdb3218db2ec4931df133b8d0) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 41 +++++++++++++++++++---------------------- - src/nodeinfopriv.h | 4 ++-- - tests/nodeinfotest.c | 14 +++++++------- - 3 files changed, 28 insertions(+), 31 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 5158680..60dfc8b 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -415,7 +415,6 @@ virNodeParseNode(const char *sysfs_prefix, - int *threads, - int *offline) - { -- const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - int ret = -1; - int processors = 0; - DIR *cpudir = NULL; -@@ -441,7 +440,7 @@ virNodeParseNode(const char *sysfs_prefix, - goto cleanup; - } - -- present_cpumap = nodeGetPresentCPUBitmap(prefix); -+ present_cpumap = nodeGetPresentCPUBitmap(sysfs_prefix); - - /* enumerate sockets in the node */ - CPU_ZERO(&sock_map); -@@ -553,11 +552,12 @@ virNodeParseNode(const char *sysfs_prefix, - return ret; - } - --int linuxNodeInfoCPUPopulate(FILE *cpuinfo, -- const char *sysfs_dir, -+int linuxNodeInfoCPUPopulate(const char *sysfs_prefix, -+ FILE *cpuinfo, - virArch arch, - virNodeInfoPtr nodeinfo) - { -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char line[1024]; - DIR *nodedir = NULL; - struct dirent *nodedirent = NULL; -@@ -652,7 +652,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, - /* OK, we've parsed clock speed out of /proc/cpuinfo. Get the - * core, node, socket, thread and topology information from /sys - */ -- if (virAsprintf(&sysfs_nodedir, "%s/node", sysfs_dir) < 0) -+ if (virAsprintf(&sysfs_nodedir, "%s/node", prefix) < 0) - goto cleanup; - - if (!(nodedir = opendir(sysfs_nodedir))) { -@@ -667,10 +667,10 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, - nodeinfo->nodes++; - - if (virAsprintf(&sysfs_cpudir, "%s/node/%s", -- sysfs_dir, nodedirent->d_name) < 0) -+ prefix, nodedirent->d_name) < 0) - goto cleanup; - -- if ((cpus = virNodeParseNode(sysfs_dir, sysfs_cpudir, arch, -+ if ((cpus = virNodeParseNode(sysfs_prefix, sysfs_cpudir, arch, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -698,10 +698,10 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, - fallback: - VIR_FREE(sysfs_cpudir); - -- if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_dir) < 0) -+ if (virAsprintf(&sysfs_cpudir, "%s/cpu", prefix) < 0) - goto cleanup; - -- if ((cpus = virNodeParseNode(sysfs_dir, sysfs_cpudir, arch, -+ if ((cpus = virNodeParseNode(sysfs_prefix, sysfs_cpudir, arch, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -1059,7 +1059,6 @@ int nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, - #ifdef __linux__ - { - int ret = -1; -- const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - FILE *cpuinfo = fopen(CPUINFO_PATH, "r"); - - if (!cpuinfo) { -@@ -1068,7 +1067,7 @@ int nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, - return -1; - } - -- ret = linuxNodeInfoCPUPopulate(cpuinfo, prefix, -+ ret = linuxNodeInfoCPUPopulate(sysfs_prefix, cpuinfo, - hostarch, nodeinfo); - if (ret < 0) - goto cleanup; -@@ -1225,7 +1224,7 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) - char *cpupath = NULL; - int ncpu = -1; - -- if (!(present_path = linuxGetCPUPresentPath(prefix))) -+ if (!(present_path = linuxGetCPUPresentPath(sysfs_prefix))) - return -1; - - if (virFileExists(present_path)) { -@@ -1273,13 +1272,12 @@ nodeGetPresentCPUBitmap(const char *sysfs_prefix) - char *present_path = NULL; - virBitmapPtr bitmap = NULL; - #endif -- const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - -- if ((max_present = nodeGetCPUCount(prefix)) < 0) -+ if ((max_present = nodeGetCPUCount(sysfs_prefix)) < 0) - return NULL; - - #ifdef __linux__ -- if (!(present_path = linuxGetCPUPresentPath(prefix))) -+ if (!(present_path = linuxGetCPUPresentPath(sysfs_prefix))) - return NULL; - if (virFileExists(present_path)) - bitmap = linuxParseCPUmap(max_present, present_path); -@@ -1301,7 +1299,7 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, - virBitmapPtr cpumap; - int present; - -- present = nodeGetCPUCount(prefix); -+ present = nodeGetCPUCount(sysfs_prefix); - if (present < 0) - return NULL; - -@@ -1646,7 +1644,6 @@ nodeGetCPUMap(const char *sysfs_prefix, - unsigned int *online, - unsigned int flags) - { -- const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - virBitmapPtr cpus = NULL; - int maxpresent; - int ret = -1; -@@ -1655,9 +1652,9 @@ nodeGetCPUMap(const char *sysfs_prefix, - virCheckFlags(0, -1); - - if (!cpumap && !online) -- return nodeGetCPUCount(prefix); -+ return nodeGetCPUCount(sysfs_prefix); - -- if (!(cpus = nodeGetCPUBitmap(prefix, &maxpresent))) -+ if (!(cpus = nodeGetCPUBitmap(sysfs_prefix, &maxpresent))) - goto cleanup; - - if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) -@@ -1674,7 +1671,7 @@ nodeGetCPUMap(const char *sysfs_prefix, - } - - static int --nodeCapsInitNUMAFake(const char *prefix, -+nodeCapsInitNUMAFake(const char *sysfs_prefix, - const char *cpupath ATTRIBUTE_UNUSED, - virCapsPtr caps ATTRIBUTE_UNUSED) - { -@@ -1685,7 +1682,7 @@ nodeCapsInitNUMAFake(const char *prefix, - int id, cid; - int onlinecpus ATTRIBUTE_UNUSED; - -- if (nodeGetInfo(prefix, &nodeinfo) < 0) -+ if (nodeGetInfo(sysfs_prefix, &nodeinfo) < 0) - return -1; - - ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo); -@@ -1957,7 +1954,7 @@ nodeCapsInitNUMA(const char *sysfs_prefix, - return -1; - - if (!virNumaIsAvailable()) { -- ret = nodeCapsInitNUMAFake(prefix, cpupath, caps); -+ ret = nodeCapsInitNUMAFake(sysfs_prefix, cpupath, caps); - goto cleanup; - } - -diff --git a/src/nodeinfopriv.h b/src/nodeinfopriv.h -index 8bfbe1e..1aab4ad 100644 ---- a/src/nodeinfopriv.h -+++ b/src/nodeinfopriv.h -@@ -25,8 +25,8 @@ - # include "nodeinfo.h" - - # ifdef __linux__ --int linuxNodeInfoCPUPopulate(FILE *cpuinfo, -- const char *sysfs_dir, -+int linuxNodeInfoCPUPopulate(const char *sysfs_prefix, -+ FILE *cpuinfo, - virArch arch, - virNodeInfoPtr nodeinfo); - -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index be099f0..60467bc 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -24,8 +24,8 @@ main(void) - #else - - static int --linuxTestCompareFiles(const char *cpuinfofile, -- char *sysfs_dir, -+linuxTestCompareFiles(char *sysfs_prefix, -+ const char *cpuinfofile, - virArch arch, - const char *outputfile) - { -@@ -42,7 +42,7 @@ linuxTestCompareFiles(const char *cpuinfofile, - } - - memset(&nodeinfo, 0, sizeof(nodeinfo)); -- if (linuxNodeInfoCPUPopulate(cpuinfo, sysfs_dir, arch, &nodeinfo) < 0) { -+ if (linuxNodeInfoCPUPopulate(sysfs_prefix, cpuinfo, arch, &nodeinfo) < 0) { - if (virTestGetDebug()) { - virErrorPtr error = virSaveLastError(); - if (error && error->code != VIR_ERR_OK) -@@ -163,12 +163,12 @@ linuxTestNodeInfo(const void *opaque) - { - int result = -1; - char *cpuinfo = NULL; -- char *sysfs_dir = NULL; -+ char *sysfs_prefix = NULL; - char *output = NULL; - struct linuxTestNodeInfoData *data = (struct linuxTestNodeInfoData *) opaque; - const char *archStr = virArchToString(data->arch); - -- if (virAsprintf(&sysfs_dir, "%s/nodeinfodata/linux-%s", -+ if (virAsprintf(&sysfs_prefix, "%s/nodeinfodata/linux-%s", - abs_srcdir, data->testName) < 0 || - virAsprintf(&cpuinfo, "%s/nodeinfodata/linux-%s-%s.cpuinfo", - abs_srcdir, archStr, data->testName) < 0 || -@@ -177,12 +177,12 @@ linuxTestNodeInfo(const void *opaque) - goto cleanup; - } - -- result = linuxTestCompareFiles(cpuinfo, sysfs_dir, data->arch, output); -+ result = linuxTestCompareFiles(sysfs_prefix, cpuinfo, data->arch, output); - - cleanup: - VIR_FREE(cpuinfo); - VIR_FREE(output); -- VIR_FREE(sysfs_dir); -+ VIR_FREE(sysfs_prefix); - - return result; - } --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Phase-out-cpu_set_t-usage.patch b/SOURCES/libvirt-nodeinfo-Phase-out-cpu_set_t-usage.patch deleted file mode 100644 index 9f2b75c..0000000 --- a/SOURCES/libvirt-nodeinfo-Phase-out-cpu_set_t-usage.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 1a4abb61662ff2090ffb1c1f44cc626101742764 Mon Sep 17 00:00:00 2001 -Message-Id: <1a4abb61662ff2090ffb1c1f44cc626101742764@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:28 +0200 -Subject: [PATCH] nodeinfo: Phase out cpu_set_t usage - -Swap out all instances of cpu_set_t and replace them with virBitmap, -which some of the code was already using anyway. - -The changes are pretty mechanical, with one notable exception: an -assumption has been added on the max value we can run into while -reading either socket_it or core_id. - -While this specific assumption was not in place before, we were -using cpu_set_t improperly by not making sure not to set any bit -past CPU_SETSIZE or explicitly allocating bigger bitmaps; in fact -the default size of a cpu_set_t, 1024, is way too low to run our -testsuite, which includes core_id values in the 2000s. - -(cherry picked from commit b7b506475ca176276bfaa5dbcdba5b16744b6d56) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 65 ++++++++++++++++++++++++++++++++++------------------------ - 1 file changed, 38 insertions(+), 27 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 3550e24..7d0e6b0 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -30,7 +30,6 @@ - #include - #include - #include --#include - #include "conf/domain_conf.h" - - #if defined(__FreeBSD__) || defined(__APPLE__) -@@ -388,19 +387,6 @@ virNodeParseSocket(const char *dir, - return ret; - } - --# ifndef CPU_COUNT --static int --CPU_COUNT(cpu_set_t *set) --{ -- size_t i, count = 0; -- -- for (i = 0; i < CPU_SETSIZE; i++) -- if (CPU_ISSET(i, set)) -- count++; -- return count; --} --# endif /* !CPU_COUNT */ -- - /* parses a node entry, returning number of processors in the node and - * filling arguments */ - static int -@@ -415,15 +401,18 @@ virNodeParseNode(const char *sysfs_prefix, - int *threads, - int *offline) - { -+ /* Biggest value we can expect to be used as either socket id -+ * or core id. Bitmaps will need to be sized accordingly */ -+ const int ID_MAX = 4095; - int ret = -1; - int processors = 0; - DIR *cpudir = NULL; - struct dirent *cpudirent = NULL; - virBitmapPtr present_cpumap = NULL; -+ virBitmapPtr sockets_map = NULL; -+ virBitmapPtr *cores_maps = NULL; - int sock_max = 0; -- cpu_set_t sock_map; - int sock; -- cpu_set_t *core_maps = NULL; - int core; - size_t i; - int siblings; -@@ -445,7 +434,9 @@ virNodeParseNode(const char *sysfs_prefix, - goto cleanup; - - /* enumerate sockets in the node */ -- CPU_ZERO(&sock_map); -+ if (!(sockets_map = virBitmapNew(ID_MAX + 1))) -+ goto cleanup; -+ - while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) { - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; -@@ -462,7 +453,15 @@ virNodeParseNode(const char *sysfs_prefix, - /* Parse socket */ - if ((sock = virNodeParseSocket(node, arch, cpu)) < 0) - goto cleanup; -- CPU_SET(sock, &sock_map); -+ if (sock > ID_MAX) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Socket %d can't be handled (max socket is %d)"), -+ sock, ID_MAX); -+ goto cleanup; -+ } -+ -+ if (virBitmapSetBit(sockets_map, sock) < 0) -+ goto cleanup; - - if (sock > sock_max) - sock_max = sock; -@@ -473,12 +472,13 @@ virNodeParseNode(const char *sysfs_prefix, - - sock_max++; - -- /* allocate cpu maps for each socket */ -- if (VIR_ALLOC_N(core_maps, sock_max) < 0) -+ /* allocate cores maps for each socket */ -+ if (VIR_ALLOC_N(cores_maps, sock_max) < 0) - goto cleanup; - - for (i = 0; i < sock_max; i++) -- CPU_ZERO(&core_maps[i]); -+ if (!(cores_maps[i] = virBitmapNew(ID_MAX + 1))) -+ goto cleanup; - - /* iterate over all CPU's in the node */ - rewinddir(cpudir); -@@ -502,7 +502,7 @@ virNodeParseNode(const char *sysfs_prefix, - /* Parse socket */ - if ((sock = virNodeParseSocket(node, arch, cpu)) < 0) - goto cleanup; -- if (!CPU_ISSET(sock, &sock_map)) { -+ if (!virBitmapIsBitSet(sockets_map, sock)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("CPU socket topology has changed")); - goto cleanup; -@@ -515,8 +515,15 @@ virNodeParseNode(const char *sysfs_prefix, - } else { - core = virNodeGetCpuValue(node, cpu, "topology/core_id", 0); - } -+ if (core > ID_MAX) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Core %d can't be handled (max core is %d)"), -+ core, ID_MAX); -+ goto cleanup; -+ } - -- CPU_SET(core, &core_maps[sock]); -+ if (virBitmapSetBit(cores_maps[sock], core) < 0) -+ goto cleanup; - - if (!(siblings = virNodeCountThreadSiblings(node, cpu))) - goto cleanup; -@@ -529,13 +536,13 @@ virNodeParseNode(const char *sysfs_prefix, - goto cleanup; - - /* finalize the returned data */ -- *sockets = CPU_COUNT(&sock_map); -+ *sockets = virBitmapCountBits(sockets_map); - - for (i = 0; i < sock_max; i++) { -- if (!CPU_ISSET(i, &sock_map)) -+ if (!virBitmapIsBitSet(sockets_map, i)) - continue; - -- core = CPU_COUNT(&core_maps[i]); -+ core = virBitmapCountBits(cores_maps[i]); - if (core > *cores) - *cores = core; - } -@@ -548,7 +555,11 @@ virNodeParseNode(const char *sysfs_prefix, - virReportSystemError(errno, _("problem closing %s"), node); - ret = -1; - } -- VIR_FREE(core_maps); -+ if (cores_maps) -+ for (i = 0; i < sock_max; i++) -+ virBitmapFree(cores_maps[i]); -+ VIR_FREE(cores_maps); -+ virBitmapFree(sockets_map); - virBitmapFree(present_cpumap); - - return ret; --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Remove-out-parameter-from-nodeGetCPUBitmap.patch b/SOURCES/libvirt-nodeinfo-Remove-out-parameter-from-nodeGetCPUBitmap.patch deleted file mode 100644 index 8289aaa..0000000 --- a/SOURCES/libvirt-nodeinfo-Remove-out-parameter-from-nodeGetCPUBitmap.patch +++ /dev/null @@ -1,87 +0,0 @@ -From fa55eec14a4739ff3ab0a9e2c97319abb47168e6 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:26 +0200 -Subject: [PATCH] nodeinfo: Remove out parameter from nodeGetCPUBitmap() - -Not all users of this API will need the size of the returned -bitmap; those who do can simply call virBitmapSize() themselves. - -(cherry picked from commit ccd0ea7ef58130c46599453925e8f6716d310d5c) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 12 +++++------- - src/nodeinfo.h | 2 +- - 2 files changed, 6 insertions(+), 8 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index ceb517a..69c15fc 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1324,8 +1324,7 @@ nodeGetPresentCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) - } - - virBitmapPtr --nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, -- int *max_id ATTRIBUTE_UNUSED) -+nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) - { - #ifdef __linux__ - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; -@@ -1363,8 +1362,7 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED, - ignore_value(virBitmapSetBit(cpumap, i)); - } - } -- if (max_id && cpumap) -- *max_id = present; -+ - cleanup: - VIR_FREE(online_path); - VIR_FREE(cpudir); -@@ -1685,7 +1683,6 @@ nodeGetCPUMap(const char *sysfs_prefix, - unsigned int flags) - { - virBitmapPtr cpus = NULL; -- int maxpresent; - int ret = -1; - int dummy; - -@@ -1694,7 +1691,7 @@ nodeGetCPUMap(const char *sysfs_prefix, - if (!cpumap && !online) - return nodeGetCPUCount(sysfs_prefix); - -- if (!(cpus = nodeGetCPUBitmap(sysfs_prefix, &maxpresent))) -+ if (!(cpus = nodeGetCPUBitmap(sysfs_prefix))) - goto cleanup; - - if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) -@@ -1702,7 +1699,8 @@ nodeGetCPUMap(const char *sysfs_prefix, - if (online) - *online = virBitmapCountBits(cpus); - -- ret = maxpresent; -+ ret = virBitmapSize(cpus); -+ - cleanup: - if (ret < 0 && cpumap) - VIR_FREE(*cpumap); -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 4f983c2..02af9c5 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -45,7 +45,7 @@ int nodeGetMemory(unsigned long long *mem, - unsigned long long *freeMem); - - virBitmapPtr nodeGetPresentCPUBitmap(const char *sysfs_prefix); --virBitmapPtr nodeGetCPUBitmap(const char *sysfs_prefix, int *max_id); -+virBitmapPtr nodeGetCPUBitmap(const char *sysfs_prefix); - int nodeGetCPUCount(const char *sysfs_prefix); - - int nodeGetMemoryParameters(virTypedParameterPtr params, --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Rename-linuxParseCPUmax-to-linuxParseCPUCount.patch b/SOURCES/libvirt-nodeinfo-Rename-linuxParseCPUmax-to-linuxParseCPUCount.patch deleted file mode 100644 index 5bd17fe..0000000 --- a/SOURCES/libvirt-nodeinfo-Rename-linuxParseCPUmax-to-linuxParseCPUCount.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 3897d418e69e7604302040a8015bf6f50d40ae45 Mon Sep 17 00:00:00 2001 -Message-Id: <3897d418e69e7604302040a8015bf6f50d40ae45@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:24 +0200 -Subject: [PATCH] nodeinfo: Rename linuxParseCPUmax() to linuxParseCPUCount() - -The original name was confusing because the function returns the number -of CPUs, not the maximum CPU id. The comment above the function has -been updated to reflect this. - -No behavioral changes. - -(cherry picked from commit a2e2add1f1e253b5ba150446980aa32a161dc107) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 5459cc6..a7a5d98 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -982,9 +982,10 @@ linuxGetCPUOnlinePath(const char *sysfs_prefix) - return linuxGetCPUGlobalPath(sysfs_prefix, "online"); - } - --/* Determine the maximum cpu id from a Linux sysfs cpu/present file. */ -+/* Determine the number of CPUs (maximum CPU id + 1) from a file containing -+ * a list of CPU ids, like the Linux sysfs cpu/present file */ - static int --linuxParseCPUmax(const char *path) -+linuxParseCPUCount(const char *path) - { - char *str = NULL; - char *tmp; -@@ -1246,7 +1247,7 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) - return -1; - - if (virFileExists(present_path)) { -- ncpu = linuxParseCPUmax(present_path); -+ ncpu = linuxParseCPUCount(present_path); - goto cleanup; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Rename-nodeGetCPUBitmap-to-nodeGetOnlineCPUBitmap.patch b/SOURCES/libvirt-nodeinfo-Rename-nodeGetCPUBitmap-to-nodeGetOnlineCPUBitmap.patch deleted file mode 100644 index fa26c15..0000000 --- a/SOURCES/libvirt-nodeinfo-Rename-nodeGetCPUBitmap-to-nodeGetOnlineCPUBitmap.patch +++ /dev/null @@ -1,92 +0,0 @@ -From cd6ca9ba097bb551c02dbfd85d5010d3bceee9b9 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:27 +0200 -Subject: [PATCH] nodeinfo: Rename nodeGetCPUBitmap() to - nodeGetOnlineCPUBitmap() - -The new name makes it clear that the returned bitmap contains the -information about which CPUs are online, not eg. which CPUs are -present. - -No behavioral change. - -(cherry picked from commit c1df42d734fbd40b7220dad4a9c15f2584828a80) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 2 +- - src/nodeinfo.c | 6 +++--- - src/nodeinfo.h | 2 +- - 3 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index e92d2d0..1363c92 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -998,7 +998,6 @@ virLockManagerRelease; - nodeAllocPages; - nodeCapsInitNUMA; - nodeGetCellsFreeMemory; --nodeGetCPUBitmap; - nodeGetCPUCount; - nodeGetCPUMap; - nodeGetCPUStats; -@@ -1007,6 +1006,7 @@ nodeGetInfo; - nodeGetMemory; - nodeGetMemoryParameters; - nodeGetMemoryStats; -+nodeGetOnlineCPUBitmap; - nodeGetPresentCPUBitmap; - nodeSetMemoryParameters; - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 69c15fc..3550e24 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -1324,7 +1324,7 @@ nodeGetPresentCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) - } - - virBitmapPtr --nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) -+nodeGetOnlineCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) - { - #ifdef __linux__ - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; -@@ -1369,7 +1369,7 @@ nodeGetCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) - return cpumap; - #else - virReportError(VIR_ERR_NO_SUPPORT, "%s", -- _("node cpumap not implemented on this platform")); -+ _("node online CPU map not implemented on this platform")); - return NULL; - #endif - } -@@ -1691,7 +1691,7 @@ nodeGetCPUMap(const char *sysfs_prefix, - if (!cpumap && !online) - return nodeGetCPUCount(sysfs_prefix); - -- if (!(cpus = nodeGetCPUBitmap(sysfs_prefix))) -+ if (!(cpus = nodeGetOnlineCPUBitmap(sysfs_prefix))) - goto cleanup; - - if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) -diff --git a/src/nodeinfo.h b/src/nodeinfo.h -index 02af9c5..1810c1c 100644 ---- a/src/nodeinfo.h -+++ b/src/nodeinfo.h -@@ -45,7 +45,7 @@ int nodeGetMemory(unsigned long long *mem, - unsigned long long *freeMem); - - virBitmapPtr nodeGetPresentCPUBitmap(const char *sysfs_prefix); --virBitmapPtr nodeGetCPUBitmap(const char *sysfs_prefix); -+virBitmapPtr nodeGetOnlineCPUBitmap(const char *sysfs_prefix); - int nodeGetCPUCount(const char *sysfs_prefix); - - int nodeGetMemoryParameters(virTypedParameterPtr params, --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Use-a-bitmap-to-keep-track-of-node-CPUs.patch b/SOURCES/libvirt-nodeinfo-Use-a-bitmap-to-keep-track-of-node-CPUs.patch deleted file mode 100644 index 6414464..0000000 --- a/SOURCES/libvirt-nodeinfo-Use-a-bitmap-to-keep-track-of-node-CPUs.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 40939c6b2ef877a46fa0b3ec177673e6b0831414 Mon Sep 17 00:00:00 2001 -Message-Id: <40939c6b2ef877a46fa0b3ec177673e6b0831414@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:30 +0200 -Subject: [PATCH] nodeinfo: Use a bitmap to keep track of node CPUs - -Keep track of what CPUs belong to the current node while walking -through the sysfs node entry, so we don't need to do it a second -time immediately afterwards. - -This also allows us to loop through all CPUs that are part of a -node in guaranteed ascending order, which is something that is -required for some upcoming changes. - -(cherry picked from commit 05be6062822f3f694b9e2ba1982d60cad5c09f33) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 26 +++++++++++++++++--------- - 1 file changed, 17 insertions(+), 9 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 2d910c9..2328a86 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -410,8 +410,10 @@ virNodeParseNode(const char *sysfs_prefix, - struct dirent *cpudirent = NULL; - virBitmapPtr present_cpumap = NULL; - virBitmapPtr online_cpus_map = NULL; -+ virBitmapPtr node_cpus_map = NULL; - virBitmapPtr sockets_map = NULL; - virBitmapPtr *cores_maps = NULL; -+ int npresent_cpus; - int sock_max = 0; - int sock; - int core; -@@ -436,6 +438,12 @@ virNodeParseNode(const char *sysfs_prefix, - if (!online_cpus_map) - goto cleanup; - -+ npresent_cpus = virBitmapSize(present_cpumap); -+ -+ /* Keep track of the CPUs that belong to the current node */ -+ if (!(node_cpus_map = virBitmapNew(npresent_cpus))) -+ goto cleanup; -+ - /* enumerate sockets in the node */ - if (!(sockets_map = virBitmapNew(ID_MAX + 1))) - goto cleanup; -@@ -447,6 +455,10 @@ virNodeParseNode(const char *sysfs_prefix, - if (!virBitmapIsBitSet(present_cpumap, cpu)) - continue; - -+ /* Mark this CPU as part of the current node */ -+ if (virBitmapSetBit(node_cpus_map, cpu) < 0) -+ goto cleanup; -+ - if (!virBitmapIsBitSet(online_cpus_map, cpu)) - continue; - -@@ -480,13 +492,11 @@ virNodeParseNode(const char *sysfs_prefix, - if (!(cores_maps[i] = virBitmapNew(ID_MAX + 1))) - goto cleanup; - -- /* iterate over all CPU's in the node */ -- rewinddir(cpudir); -- while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) { -- if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) -- continue; -+ /* Iterate over all CPUs in the node, in ascending order */ -+ for (cpu = 0; cpu < npresent_cpus; cpu++) { - -- if (!virBitmapIsBitSet(present_cpumap, cpu)) -+ /* Skip CPUs that are not part of the current node */ -+ if (!virBitmapIsBitSet(node_cpus_map, cpu)) - continue; - - if (!virBitmapIsBitSet(online_cpus_map, cpu)) { -@@ -529,9 +539,6 @@ virNodeParseNode(const char *sysfs_prefix, - *threads = siblings; - } - -- if (direrr < 0) -- goto cleanup; -- - /* finalize the returned data */ - *sockets = virBitmapCountBits(sockets_map); - -@@ -557,6 +564,7 @@ virNodeParseNode(const char *sysfs_prefix, - virBitmapFree(cores_maps[i]); - VIR_FREE(cores_maps); - virBitmapFree(sockets_map); -+ virBitmapFree(node_cpus_map); - virBitmapFree(online_cpus_map); - virBitmapFree(present_cpumap); - --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-Use-nodeGetOnlineCPUBitmap-when-parsing-node.patch b/SOURCES/libvirt-nodeinfo-Use-nodeGetOnlineCPUBitmap-when-parsing-node.patch deleted file mode 100644 index a00ffb4..0000000 --- a/SOURCES/libvirt-nodeinfo-Use-nodeGetOnlineCPUBitmap-when-parsing-node.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 7d9e53dfd33baa9a934548aeba04abcf6775d7ca Mon Sep 17 00:00:00 2001 -Message-Id: <7d9e53dfd33baa9a934548aeba04abcf6775d7ca@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:29 +0200 -Subject: [PATCH] nodeinfo: Use nodeGetOnlineCPUBitmap() when parsing node - -No need to look up the online status of each CPU separately when we -can get all the information in one go. - -(cherry picked from commit b909e9fb2c095b7c83eab99e1f812bd1ffe6e480) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 16 +++++++--------- - 1 file changed, 7 insertions(+), 9 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 7d0e6b0..2d910c9 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -409,6 +409,7 @@ virNodeParseNode(const char *sysfs_prefix, - DIR *cpudir = NULL; - struct dirent *cpudirent = NULL; - virBitmapPtr present_cpumap = NULL; -+ virBitmapPtr online_cpus_map = NULL; - virBitmapPtr sockets_map = NULL; - virBitmapPtr *cores_maps = NULL; - int sock_max = 0; -@@ -417,7 +418,6 @@ virNodeParseNode(const char *sysfs_prefix, - size_t i; - int siblings; - unsigned int cpu; -- int online; - int direrr; - - *threads = 0; -@@ -432,6 +432,9 @@ virNodeParseNode(const char *sysfs_prefix, - present_cpumap = nodeGetPresentCPUBitmap(sysfs_prefix); - if (!present_cpumap) - goto cleanup; -+ online_cpus_map = nodeGetOnlineCPUBitmap(sysfs_prefix); -+ if (!online_cpus_map) -+ goto cleanup; - - /* enumerate sockets in the node */ - if (!(sockets_map = virBitmapNew(ID_MAX + 1))) -@@ -444,10 +447,7 @@ virNodeParseNode(const char *sysfs_prefix, - if (!virBitmapIsBitSet(present_cpumap, cpu)) - continue; - -- if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0) -- goto cleanup; -- -- if (!online) -+ if (!virBitmapIsBitSet(online_cpus_map, cpu)) - continue; - - /* Parse socket */ -@@ -489,10 +489,7 @@ virNodeParseNode(const char *sysfs_prefix, - if (!virBitmapIsBitSet(present_cpumap, cpu)) - continue; - -- if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0) -- goto cleanup; -- -- if (!online) { -+ if (!virBitmapIsBitSet(online_cpus_map, cpu)) { - (*offline)++; - continue; - } -@@ -560,6 +557,7 @@ virNodeParseNode(const char *sysfs_prefix, - virBitmapFree(cores_maps[i]); - VIR_FREE(cores_maps); - virBitmapFree(sockets_map); -+ virBitmapFree(online_cpus_map); - virBitmapFree(present_cpumap); - - return ret; --- -2.5.0 - diff --git a/SOURCES/libvirt-nodeinfo-fix-to-parse-present-cpus-rather-than-possible-cpus.patch b/SOURCES/libvirt-nodeinfo-fix-to-parse-present-cpus-rather-than-possible-cpus.patch deleted file mode 100644 index 8089aa7..0000000 --- a/SOURCES/libvirt-nodeinfo-fix-to-parse-present-cpus-rather-than-possible-cpus.patch +++ /dev/null @@ -1,123 +0,0 @@ -From ecd0ade9104cecedc1e82fac2b8e025ee98e2cb4 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Kothapally Madhu Pavan -Date: Wed, 5 Aug 2015 18:18:15 +0200 -Subject: [PATCH] nodeinfo: fix to parse present cpus rather than possible cpus - -This patch resolves a situation where a core is defective and is not -in the present mask during boot. Optionally a host can have empty sockets -could be brought online if the socket is added. In this case the present -mask contains the cpu's that are actually there in the sockets even though -they might be offline for some reason. This patch excludes the cpu's that -are offline because the socket is defective/empty by checking the present -mask before reading the cpu directory. Otherwise, the nodeinfo on such -hosts always displays wrong output which includes the defective/empty -sockets as set of offline cpu's. - -Signed-off-by: Kothapally Madhu Pavan -(cherry picked from commit bb31f4532b285a7392911f420bcdf05a126be8a0) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/nodeinfo.c | 23 ++++++++++++++++++----- - 1 file changed, 18 insertions(+), 5 deletions(-) - -diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index ca9cb3a..5158680 100644 ---- a/src/nodeinfo.c -+++ b/src/nodeinfo.c -@@ -43,6 +43,7 @@ - #include "c-ctype.h" - #include "viralloc.h" - #include "nodeinfopriv.h" -+#include "nodeinfo.h" - #include "physmem.h" - #include "virerror.h" - #include "count-one-bits.h" -@@ -403,20 +404,23 @@ CPU_COUNT(cpu_set_t *set) - /* parses a node entry, returning number of processors in the node and - * filling arguments */ - static int --ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) -+ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) - ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) --ATTRIBUTE_NONNULL(6) --virNodeParseNode(const char *node, -+ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7) -+virNodeParseNode(const char *sysfs_prefix, -+ const char *node, - virArch arch, - int *sockets, - int *cores, - int *threads, - int *offline) - { -+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - int ret = -1; - int processors = 0; - DIR *cpudir = NULL; - struct dirent *cpudirent = NULL; -+ virBitmapPtr present_cpumap = NULL; - int sock_max = 0; - cpu_set_t sock_map; - int sock; -@@ -437,12 +441,17 @@ virNodeParseNode(const char *node, - goto cleanup; - } - -+ present_cpumap = nodeGetPresentCPUBitmap(prefix); -+ - /* enumerate sockets in the node */ - CPU_ZERO(&sock_map); - while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) { - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; - -+ if (present_cpumap && !(virBitmapIsBitSet(present_cpumap, cpu))) -+ continue; -+ - if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0) - goto cleanup; - -@@ -476,6 +485,9 @@ virNodeParseNode(const char *node, - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; - -+ if (present_cpumap && !(virBitmapIsBitSet(present_cpumap, cpu))) -+ continue; -+ - if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0) - goto cleanup; - -@@ -536,6 +548,7 @@ virNodeParseNode(const char *node, - ret = -1; - } - VIR_FREE(core_maps); -+ virBitmapFree(present_cpumap); - - return ret; - } -@@ -657,7 +670,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, - sysfs_dir, nodedirent->d_name) < 0) - goto cleanup; - -- if ((cpus = virNodeParseNode(sysfs_cpudir, arch, -+ if ((cpus = virNodeParseNode(sysfs_dir, sysfs_cpudir, arch, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; -@@ -688,7 +701,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, - if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_dir) < 0) - goto cleanup; - -- if ((cpus = virNodeParseNode(sysfs_cpudir, arch, -+ if ((cpus = virNodeParseNode(sysfs_dir, sysfs_cpudir, arch, - &socks, &cores, - &threads, &offline)) < 0) - goto cleanup; --- -2.5.0 - diff --git a/SOURCES/libvirt-numa_conf-Introduce-virDomainNumaGetMaxCPUID.patch b/SOURCES/libvirt-numa_conf-Introduce-virDomainNumaGetMaxCPUID.patch deleted file mode 100644 index 34e7ebb..0000000 --- a/SOURCES/libvirt-numa_conf-Introduce-virDomainNumaGetMaxCPUID.patch +++ /dev/null @@ -1,89 +0,0 @@ -From ce34d90fb56c195924a0ef4d076d39ed4fc4cabc Mon Sep 17 00:00:00 2001 -Message-Id: -From: Michal Privoznik -Date: Fri, 7 Aug 2015 17:30:16 +0200 -Subject: [PATCH] numa_conf: Introduce virDomainNumaGetMaxCPUID - -https://bugzilla.redhat.com/show_bug.cgi?id=1176020 - -This function should return the greatest CPU number set in -/domain/cpu/numa/cell/@cpus. The idea is that we should compare -the returned value against /domain/vcpu value. Yes, there exist -users who think the following is a good idea: - - 4 - - - - - - - - -Signed-off-by: Michal Privoznik -(cherry picked from commit 8f2535dec1fdd969e86aa39c8a2583c723341733) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/conf/numa_conf.c | 17 +++++++++++++++++ - src/conf/numa_conf.h | 3 +++ - src/libvirt_private.syms | 1 + - 3 files changed, 21 insertions(+) - -diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c -index 57da215..5c123b9 100644 ---- a/src/conf/numa_conf.c -+++ b/src/conf/numa_conf.c -@@ -847,6 +847,23 @@ virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa) - return ret; - } - -+unsigned int -+virDomainNumaGetMaxCPUID(virDomainNumaPtr numa) -+{ -+ size_t i; -+ unsigned int ret = 0; -+ -+ for (i = 0; i < numa->nmem_nodes; i++) { -+ int bit; -+ -+ bit = virBitmapLastSetBit(virDomainNumaGetNodeCpumask(numa, i)); -+ if (bit > ret) -+ ret = bit; -+ } -+ -+ return ret; -+} -+ - - virDomainNumaPtr - virDomainNumaNew(void) -diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h -index 6739065..90deacb 100644 ---- a/src/conf/numa_conf.h -+++ b/src/conf/numa_conf.h -@@ -99,6 +99,9 @@ unsigned long long virDomainNumaGetNodeMemorySize(virDomainNumaPtr numa, - unsigned long long virDomainNumaGetMemorySize(virDomainNumaPtr numa) - ATTRIBUTE_NONNULL(1); - -+unsigned int -+virDomainNumaGetMaxCPUID(virDomainNumaPtr numa); -+ - /* - * Formatters - */ -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 0517c24..ad9ebb1 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -679,6 +679,7 @@ virNodeDeviceObjUnlock; - virDomainNumaCheckABIStability; - virDomainNumaEquals; - virDomainNumaFree; -+virDomainNumaGetMaxCPUID; - virDomainNumaGetMemorySize; - virDomainNumaGetNodeCount; - virDomainNumaGetNodeCpumask; --- -2.5.0 - diff --git a/SOURCES/libvirt-process-Log-when-limiting-the-amount-of-locked-memory.patch b/SOURCES/libvirt-process-Log-when-limiting-the-amount-of-locked-memory.patch deleted file mode 100644 index a3813d3..0000000 --- a/SOURCES/libvirt-process-Log-when-limiting-the-amount-of-locked-memory.patch +++ /dev/null @@ -1,36 +0,0 @@ -From ea2c6dc03a003bdfe3004fe91eb76ea1f958c898 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Fri, 20 Nov 2015 13:29:11 +0100 -Subject: [PATCH] process: Log when limiting the amount of locked memory - -This can be useful for debugging. - -(cherry picked from commit a6a5ac965056d3949e8fa2b6cb70dc554196d56f) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1283924 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/util/virprocess.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/util/virprocess.c b/src/util/virprocess.c -index 8fa7a9b..c86b7e9 100644 ---- a/src/util/virprocess.c -+++ b/src/util/virprocess.c -@@ -761,6 +761,10 @@ virProcessSetMaxMemLock(pid_t pid, unsigned long long bytes) - return -1; - } - } -+ -+ VIR_DEBUG("Locked memory for process %lld limited to %llu bytes", -+ (long long int) pid, bytes); -+ - return 0; - } - #else /* ! (HAVE_SETRLIMIT && defined(RLIMIT_MEMLOCK)) */ --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Add-capability-for-query-hotpluggable-cpus-command.patch b/SOURCES/libvirt-qemu-Add-capability-for-query-hotpluggable-cpus-command.patch new file mode 100644 index 0000000..c8de94b --- /dev/null +++ b/SOURCES/libvirt-qemu-Add-capability-for-query-hotpluggable-cpus-command.patch @@ -0,0 +1,63 @@ +From 5872dbc70ce1acf41445442c13703f22bc2d2c9b Mon Sep 17 00:00:00 2001 +Message-Id: <5872dbc70ce1acf41445442c13703f22bc2d2c9b@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:19 -0400 +Subject: [PATCH] qemu: Add capability for query-hotpluggable-cpus command + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +(cherry picked from commit f17ddfeee39858b98ae195ac1639645748a80e6f) +--- + src/qemu/qemu_capabilities.c | 2 ++ + src/qemu/qemu_capabilities.h | 1 + + tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 1 + + 3 files changed, 4 insertions(+) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 49ad9df..ffd54c5 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -339,6 +339,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, + "tls-creds-x509", /* 230 */ + "intel-iommu", + "smm", ++ "query-hotpluggable-cpus", + ); + + +@@ -1457,6 +1458,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = { + { "__com.redhat_change-backing-file", QEMU_CAPS_CHANGE_BACKING_FILE }, + { "rtc-reset-reinjection", QEMU_CAPS_RTC_RESET_REINJECTION }, + { "migrate-incoming", QEMU_CAPS_INCOMING_DEFER }, ++ { "query-hotpluggable-cpus", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS }, + }; + + struct virQEMUCapsStringFlags virQEMUCapsMigration[] = { +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index ac1593d..68d1ea8 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -372,6 +372,7 @@ typedef enum { + QEMU_CAPS_OBJECT_TLS_CREDS_X509, /* -object tls-creds-x509 */ + QEMU_CAPS_DEVICE_INTEL_IOMMU, /* -device intel-iommu */ + QEMU_CAPS_MACHINE_SMM_OPT, /* -machine xxx,smm=on/off/auto */ ++ QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS, /* qmp command query-hotpluggable-cpus */ + + QEMU_CAPS_LAST /* this must always be the last item */ + } virQEMUCapsFlags; +diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +index 8fb66d2..0f3c17a 100644 +--- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +@@ -191,6 +191,7 @@ + + + ++ + 2006091 + 0 + (v2.7.0-rc1-52-g42e0d60) +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Add-check-for-invalid-iothread_id-in-qemuDomainChgIOThread.patch b/SOURCES/libvirt-qemu-Add-check-for-invalid-iothread_id-in-qemuDomainChgIOThread.patch deleted file mode 100644 index a210223..0000000 --- a/SOURCES/libvirt-qemu-Add-check-for-invalid-iothread_id-in-qemuDomainChgIOThread.patch +++ /dev/null @@ -1,45 +0,0 @@ -From e654ad03a40a7f908704ec28cb50c38267eb7bff Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Tue, 18 Aug 2015 14:47:15 -0400 -Subject: [PATCH] qemu: Add check for invalid iothread_id in - qemuDomainChgIOThread - -https://bugzilla.redhat.com/show_bug.cgi?id=1251886 - -Since iothread_id == 0 is an invalid value for QEMU let's point -that out specifically. For the IOThreadDel code, the failure would -have ended up being a failure to find the IOThread ID; however, for -the IOThreadAdd code - an IOThread 0 was added and that isn't good. - -It seems during many reviews/edits to the code the check for -iothread_id = 0 being invalid was lost - it could have originally -been in the API code, but requested to be moved - I cannot remember. - -(cherry picked from commit 32c6b1908bbf8a1aa4a2692135e7d02a166a0317) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 748f16a..ec61bb5 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -6152,6 +6152,12 @@ qemuDomainChgIOThread(virQEMUDriverPtr driver, - virDomainDefPtr persistentDef; - int ret = -1; - -+ if (iothread_id == 0) { -+ virReportError(VIR_ERR_INVALID_ARG, "%s", -+ _("invalid value of 0 for iothread_id")); -+ return -1; -+ } -+ - cfg = virQEMUDriverGetConfig(driver); - - priv = vm->privateData; --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Add-conditions-for-qemu-kvm-use-on-ppc64.patch b/SOURCES/libvirt-qemu-Add-conditions-for-qemu-kvm-use-on-ppc64.patch deleted file mode 100644 index a143a80..0000000 --- a/SOURCES/libvirt-qemu-Add-conditions-for-qemu-kvm-use-on-ppc64.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 4058cc05cce5ed00aa9b2da4976a1a5565b9d3aa Mon Sep 17 00:00:00 2001 -Message-Id: <4058cc05cce5ed00aa9b2da4976a1a5565b9d3aa@dist-git> -From: Andrea Bolognani -Date: Mon, 5 Oct 2015 10:49:44 +0200 -Subject: [PATCH] qemu: Add conditions for qemu-kvm use on ppc64 - -qemu-kvm can be used to run ppc64 guests on ppc64le hosts and vice -versa, since the hardware is actually the same and the endianness -is chosen by the guest kernel. - -Up until now, however, libvirt didn't allow the use of qemu-kvm -to run guests if their endianness didn't match the host's. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1267882 -(cherry picked from commit 938368f8382ca94c5156c44ad85a06cf9e4f8f8f) -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 5b21307..12af0dc 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -770,7 +770,7 @@ virQEMUCapsInitGuest(virCapsPtr caps, - char *binary = NULL; - virQEMUCapsPtr qemubinCaps = NULL; - virQEMUCapsPtr kvmbinCaps = NULL; -- bool native_kvm, x86_32on64_kvm, arm_32on64_kvm; -+ bool native_kvm, x86_32on64_kvm, arm_32on64_kvm, ppc64_kvm; - int ret = -1; - - /* Check for existence of base emulator, or alternate base -@@ -790,14 +790,16 @@ virQEMUCapsInitGuest(virCapsPtr caps, - * - host & guest arches match - * - hostarch is x86_64 and guest arch is i686 (needs -cpu qemu32) - * - hostarch is aarch64 and guest arch is armv7l (needs -cpu aarch64=off) -+ * - hostarch and guestarch are both ppc64* - */ - native_kvm = (hostarch == guestarch); - x86_32on64_kvm = (hostarch == VIR_ARCH_X86_64 && - guestarch == VIR_ARCH_I686); - arm_32on64_kvm = (hostarch == VIR_ARCH_AARCH64 && - guestarch == VIR_ARCH_ARMV7L); -+ ppc64_kvm = (ARCH_IS_PPC64(hostarch) && ARCH_IS_PPC64(guestarch)); - -- if (native_kvm || x86_32on64_kvm || arm_32on64_kvm) { -+ if (native_kvm || x86_32on64_kvm || arm_32on64_kvm || ppc64_kvm) { - const char *kvmbins[] = { - "/usr/libexec/qemu-kvm", /* RHEL */ - "qemu-kvm", /* Fedora */ --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Add-cpu-ID-to-the-vCPU-pid-list-in-the-status-XML.patch b/SOURCES/libvirt-qemu-Add-cpu-ID-to-the-vCPU-pid-list-in-the-status-XML.patch new file mode 100644 index 0000000..6f649b2 --- /dev/null +++ b/SOURCES/libvirt-qemu-Add-cpu-ID-to-the-vCPU-pid-list-in-the-status-XML.patch @@ -0,0 +1,76 @@ +From b6f5a9033bbed6d3b4567544b7f6556c7b4e1861 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:51 -0400 +Subject: [PATCH] qemu: Add cpu ID to the vCPU pid list in the status XML + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Note the vcpu ID so that once we allow non-contiguous vCPU topologies it +will be possible to pair thread id's with the vcpus. + +(cherry picked from commit 3f57ce4a7675958c4c0f6aaddfbc2e3c2e8473da) +--- + src/qemu/qemu_domain.c | 13 ++++++++++++- + tests/qemuxml2xmltest.c | 3 ++- + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 01f0d6a..c27129e 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1368,7 +1368,7 @@ qemuDomainObjPrivateXMLFormatVcpus(virBufferPtr buf, + virBufferAdjustIndent(buf, 2); + + for (i = 0; i < nvcpupids; i++) +- virBufferAsprintf(buf, "\n", vcpupids[i]); ++ virBufferAsprintf(buf, "\n", i, vcpupids[i]); + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); +@@ -1497,9 +1497,19 @@ qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node, + unsigned int idx, + qemuDomainObjPrivatePtr priv) + { ++ char *idstr; + char *pidstr; + int ret = -1; + ++ if ((idstr = virXMLPropString(node, "id"))) { ++ if (virStrToLong_uip(idstr, NULL, 10, &idx) < 0 || ++ idx >= priv->nvcpupids) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("invalid vcpu index '%s'"), idstr); ++ goto cleanup; ++ } ++ } ++ + if (!(pidstr = virXMLPropString(node, "pid"))) + goto cleanup; + +@@ -1509,6 +1519,7 @@ qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node, + ret = 0; + + cleanup: ++ VIR_FREE(idstr); + VIR_FREE(pidstr); + return ret; + } +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index 573899f..639494b 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -113,7 +113,8 @@ testGetStatuXMLPrefixVcpus(virBufferPtr buf, + virBufferAdjustIndent(buf, 2); + + while ((vcpuid = virBitmapNextSetBit(data->activeVcpus, vcpuid)) >= 0) +- virBufferAsprintf(buf, "\n", vcpuid + 3803519); ++ virBufferAsprintf(buf, "\n", ++ vcpuid, vcpuid + 3803519); + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Add-luks-support-for-domain-disk.patch b/SOURCES/libvirt-qemu-Add-luks-support-for-domain-disk.patch new file mode 100644 index 0000000..6039139 --- /dev/null +++ b/SOURCES/libvirt-qemu-Add-luks-support-for-domain-disk.patch @@ -0,0 +1,409 @@ +From a1901b36addfb7a064a5d451e1cfb47d5737c8eb Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:43:00 -0400 +Subject: [PATCH] qemu: Add luks support for domain disk + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Generate the luks command line using the AES secret key to encrypt the +luks secret. A luks secret object will be in addition to a an AES secret. + +For hotplug, check if the encinfo exists and if so, add the AES secret +for the passphrase for the secret object used to decrypt the device. + +Modify/augment the fakeSecret* in qemuxml2argvtest in order to handle +find a uuid or a volume usage with a specific path prefix in the XML +(corresponds to the already generated XML tests). Add error message +when the 'usageID' is not 'mycluster_myname'. Commit id '1d632c39' +altered the error message generation to rely on the errors from the +secret_driver (or it's faked replacement). + +Add the .args output for adding the LUKS disk to the domain + +Signed-off-by: John Ferlan +(cherry picked from commit da86c6c22674ccc147224afa2740e33d8cbdbf22) + +NB: The .args output was modified from upstream since the downstream + does not contain commit id 'e114b09157b7fcca12b218b531debfbc0c3a09d7' + which adds ",sockets=1,cores=1,threads=1" to the "-smp 1" on the + command line + +Signed-off-by: John Ferlan +--- + src/qemu/qemu_command.c | 9 +++ + src/qemu/qemu_domain.c | 25 +++++++- + src/qemu/qemu_hotplug.c | 68 ++++++++++++++++++++++ + .../qemuxml2argvdata/qemuxml2argv-luks-disks.args | 36 ++++++++++++ + tests/qemuxml2argvtest.c | 24 +++++++- + 5 files changed, 156 insertions(+), 6 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 0ee1d34..6c91e53 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1087,6 +1087,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, + int actualType = virStorageSourceGetActualType(disk->src); + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo; ++ qemuDomainSecretInfoPtr encinfo = diskPriv->encinfo; + bool emitDeviceSyntax = qemuDiskBusNeedsDeviceArg(disk->bus); + + if (idx < 0) { +@@ -1226,6 +1227,10 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, + secinfo->s.aes.alias); + } + ++ if (encinfo) ++ virQEMUBuildLuksOpts(&opt, &disk->src->encryption->encinfo, ++ encinfo->s.aes.alias); ++ + if (disk->src->format > 0 && + disk->src->type != VIR_STORAGE_TYPE_DIR) + virBufferAsprintf(&opt, "format=%s,", +@@ -1928,6 +1933,7 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd, + virDomainDiskDefPtr disk = def->disks[i]; + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo; ++ qemuDomainSecretInfoPtr encinfo = diskPriv->encinfo; + + /* PowerPC pseries based VMs do not support floppy device */ + if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY && +@@ -1956,6 +1962,9 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd, + if (qemuBuildDiskSecinfoCommandLine(cmd, secinfo) < 0) + return -1; + ++ if (qemuBuildDiskSecinfoCommandLine(cmd, encinfo) < 0) ++ return -1; ++ + virCommandAddArg(cmd, "-drive"); + + optstr = qemuBuildDriveStr(disk, +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 27158f4..26d0d12 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -946,7 +946,8 @@ qemuDomainSecretSetup(virConnectPtr conn, + { + if (virCryptoHaveCipher(VIR_CRYPTO_CIPHER_AES256CBC) && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) && +- secretUsageType == VIR_SECRET_USAGE_TYPE_CEPH) { ++ (secretUsageType == VIR_SECRET_USAGE_TYPE_CEPH || ++ secretUsageType == VIR_SECRET_USAGE_TYPE_VOLUME)) { + if (qemuDomainSecretAESSetup(conn, priv, secinfo, srcalias, + secretUsageType, username, + seclookupdef, isLuks) < 0) +@@ -1006,11 +1007,14 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + virDomainDiskDefPtr disk) + { + virStorageSourcePtr src = disk->src; ++ qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuDomainSecretInfoPtr secinfo = NULL; + +- if (conn && qemuDomainSecretDiskCapable(src)) { ++ if (!conn) ++ return 0; ++ ++ if (qemuDomainSecretDiskCapable(src)) { + virSecretUsageType secretUsageType = VIR_SECRET_USAGE_TYPE_ISCSI; +- qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + + if (VIR_ALLOC(secinfo) < 0) + return -1; +@@ -1026,6 +1030,21 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + diskPriv->secinfo = secinfo; + } + ++ if (!virStorageSourceIsEmpty(src) && src->encryption && ++ src->format == VIR_STORAGE_FILE_LUKS) { ++ ++ if (VIR_ALLOC(secinfo) < 0) ++ return -1; ++ ++ if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias, ++ VIR_SECRET_USAGE_TYPE_VOLUME, NULL, ++ &src->encryption->secrets[0]->seclookupdef, ++ true) < 0) ++ goto error; ++ ++ diskPriv->encinfo = secinfo; ++ } ++ + return 0; + + error: +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 9cb1d44..6509867 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -312,11 +312,14 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + bool releaseaddr = false; + bool driveAdded = false; + bool secobjAdded = false; ++ bool encobjAdded = false; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + const char *src = virDomainDiskGetSource(disk); + virJSONValuePtr secobjProps = NULL; ++ virJSONValuePtr encobjProps = NULL; + qemuDomainDiskPrivatePtr diskPriv; + qemuDomainSecretInfoPtr secinfo; ++ qemuDomainSecretInfoPtr encinfo; + + if (!disk->info.type) { + if (qemuDomainMachineIsS390CCW(vm->def) && +@@ -356,6 +359,10 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + goto error; + } + ++ encinfo = diskPriv->encinfo; ++ if (encinfo && qemuBuildSecretInfoProps(encinfo, &encobjProps) < 0) ++ goto error; ++ + if (!(drivestr = qemuBuildDriveStr(disk, false, priv->qemuCaps))) + goto error; + +@@ -379,6 +386,15 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + } + secobjAdded = true; + ++ if (encobjProps) { ++ rv = qemuMonitorAddObject(priv->mon, "secret", encinfo->s.aes.alias, ++ encobjProps); ++ encobjProps = NULL; /* qemuMonitorAddObject consumes */ ++ if (rv < 0) ++ goto exit_monitor; ++ } ++ encobjAdded = true; ++ + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) + goto exit_monitor; + driveAdded = true; +@@ -398,6 +414,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + + cleanup: + virJSONValueFree(secobjProps); ++ virJSONValueFree(encobjProps); + qemuDomainSecretDiskDestroy(disk); + VIR_FREE(devstr); + VIR_FREE(drivestr); +@@ -413,6 +430,8 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + } + if (secobjAdded) + ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias)); ++ if (encobjAdded) ++ ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias)); + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); +@@ -570,11 +589,17 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + { + size_t i; + qemuDomainObjPrivatePtr priv = vm->privateData; ++ virErrorPtr orig_err; + char *drivestr = NULL; + char *devstr = NULL; + bool driveAdded = false; ++ bool encobjAdded = false; + int ret = -1; ++ int rv; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); ++ virJSONValuePtr encobjProps = NULL; ++ qemuDomainDiskPrivatePtr diskPriv; ++ qemuDomainSecretInfoPtr encinfo; + + if (qemuDomainPrepareDisk(driver, vm, disk, NULL, false) < 0) + goto cleanup; +@@ -605,6 +630,11 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + if (qemuDomainSecretDiskPrepare(conn, priv, disk) < 0) + goto error; + ++ diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); ++ encinfo = diskPriv->encinfo; ++ if (encinfo && qemuBuildSecretInfoProps(encinfo, &encobjProps) < 0) ++ goto error; ++ + if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) + goto error; + +@@ -616,6 +646,15 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + + qemuDomainObjEnterMonitor(driver, vm); + ++ if (encobjProps) { ++ rv = qemuMonitorAddObject(priv->mon, "secret", encinfo->s.aes.alias, ++ encobjProps); ++ encobjProps = NULL; /* qemuMonitorAddObject consumes */ ++ if (rv < 0) ++ goto exit_monitor; ++ } ++ encobjAdded = true; ++ + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) + goto exit_monitor; + driveAdded = true; +@@ -632,6 +671,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + ret = 0; + + cleanup: ++ virJSONValueFree(encobjProps); + qemuDomainSecretDiskDestroy(disk); + VIR_FREE(devstr); + VIR_FREE(drivestr); +@@ -643,6 +683,14 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + if (driveAdded) + VIR_WARN("qemuMonitorAddDevice failed on %s (%s)", drivestr, devstr); + ++ orig_err = virSaveLastError(); ++ if (encobjAdded) ++ ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias)); ++ if (orig_err) { ++ virSetError(orig_err); ++ virFreeError(orig_err); ++ } ++ + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + + virDomainAuditDisk(vm, NULL, disk->src, "attach", false); +@@ -2856,6 +2904,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + qemuDomainObjPrivatePtr priv = vm->privateData; + char *drivestr; + char *objAlias = NULL; ++ char *encAlias = NULL; + + VIR_DEBUG("Removing disk %s from domain %p %s", + disk->info.alias, vm, vm->def->name); +@@ -2881,6 +2930,20 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + } + } + ++ /* Similarly, if this is possible a device using LUKS encryption, we ++ * can remove the luks object password too ++ */ ++ if (!virStorageSourceIsEmpty(disk->src) && disk->src->encryption && ++ disk->src->format == VIR_STORAGE_FILE_LUKS) { ++ ++ if (!(encAlias = ++ qemuDomainGetSecretAESAlias(disk->info.alias, true))) { ++ VIR_FREE(objAlias); ++ VIR_FREE(drivestr); ++ return -1; ++ } ++ } ++ + qemuDomainObjEnterMonitor(driver, vm); + + /* If it fails, then so be it - it was a best shot */ +@@ -2888,6 +2951,11 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); + VIR_FREE(objAlias); + ++ /* If it fails, then so be it - it was a best shot */ ++ if (encAlias) ++ ignore_value(qemuMonitorDelObject(priv->mon, encAlias)); ++ VIR_FREE(encAlias); ++ + qemuMonitorDriveDel(priv->mon, drivestr); + VIR_FREE(drivestr); + if (qemuDomainObjExitMonitor(driver, vm) < 0) +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args +new file mode 100644 +index 0000000..efb5cb0 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args +@@ -0,0 +1,36 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name encryptdisk \ ++-S \ ++-object secret,id=masterKey0,format=raw,\ ++file=/tmp/lib/domain--1-encryptdisk/master-key.aes \ ++-M pc-i440fx-2.1 \ ++-m 1024 \ ++-smp 1 \ ++-uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot c \ ++-usb \ ++-object secret,id=virtio-disk0-luks-secret0,\ ++data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\ ++keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \ ++-drive file=/storage/guest_disks/encryptdisk,\ ++key-secret=virtio-disk0-luks-secret0,format=luks,if=none,id=drive-virtio-disk0 \ ++-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\ ++id=virtio-disk0 \ ++-object secret,id=virtio-disk1-luks-secret0,\ ++data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\ ++keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \ ++-drive file=/storage/guest_disks/encryptdisk2,\ ++key-secret=virtio-disk1-luks-secret0,format=luks,if=none,id=drive-virtio-disk1 \ ++-device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\ ++id=virtio-disk1 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index d37d125..eddacf8 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -49,12 +49,22 @@ fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED, + + static virSecretPtr + fakeSecretLookupByUsage(virConnectPtr conn, +- int usageType ATTRIBUTE_UNUSED, ++ int usageType, + const char *usageID) + { + unsigned char uuid[VIR_UUID_BUFLEN]; +- if (STRNEQ(usageID, "mycluster_myname")) ++ if (usageType == VIR_SECRET_USAGE_TYPE_VOLUME) { ++ if (!STRPREFIX(usageID, "/storage/guest_disks/")) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ "test provided invalid volume storage prefix '%s'", ++ usageID); ++ return NULL; ++ } ++ } else if (STRNEQ(usageID, "mycluster_myname")) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ "test provided incorrect usage '%s'", usageID); + return NULL; ++ } + + if (virUUIDGenerate(uuid) < 0) + return NULL; +@@ -62,10 +72,17 @@ fakeSecretLookupByUsage(virConnectPtr conn, + return virGetSecret(conn, uuid, usageType, usageID); + } + ++static virSecretPtr ++fakeSecretLookupByUUID(virConnectPtr conn, ++ const unsigned char *uuid) ++{ ++ return virGetSecret(conn, uuid, 0, ""); ++} ++ + static virSecretDriver fakeSecretDriver = { + .connectNumOfSecrets = NULL, + .connectListSecrets = NULL, +- .secretLookupByUUID = NULL, ++ .secretLookupByUUID = fakeSecretLookupByUUID, + .secretLookupByUsage = fakeSecretLookupByUsage, + .secretDefineXML = NULL, + .secretGetXMLDesc = NULL, +@@ -1362,6 +1379,7 @@ mymain(void) + + DO_TEST("encrypted-disk", NONE); + DO_TEST("encrypted-disk-usage", NONE); ++ DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET); + + DO_TEST("memtune", NONE); + DO_TEST("memtune-unlimited", NONE); +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Add-mem-path-even-with-numa.patch b/SOURCES/libvirt-qemu-Add-mem-path-even-with-numa.patch deleted file mode 100644 index 9e09770..0000000 --- a/SOURCES/libvirt-qemu-Add-mem-path-even-with-numa.patch +++ /dev/null @@ -1,46 +0,0 @@ -From eb59153c2c09c2e59f214e0bdcb90ea430753060 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Tue, 6 Oct 2015 15:20:34 +0200 -Subject: [PATCH] qemu: Add -mem-path even with numa - -https://bugzilla.redhat.com/show_bug.cgi?id=1266856 - -So since the introduction of the memory-backend-file object until now we -only added '-mem-path' for non-NUMA guests and we used the parameters of -the memory-backend-file object to specify the path to the hugetlbfs -mount. But hugepages can be also used without memory-backend-file -object, as it used to be before its introduction. Let's just get this -part of the code back and properly append the '-mem-path' for NUMA -guests as well, but only when the memory backend is not needed. - -This parameter is already being applied when no numa is requested and -because we still use memory-object-file unconditionally for -hugepage-backed NUMA guests, this should not fire until later. - -Signed-off-by: Martin Kletzander -(cherry picked from commit a2dba3ceb2e2639cc5fd91da81204682f27d0d8c) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 0822ee4..1d020d2 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -7856,6 +7856,10 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, - } - } - -+ if (!needBackend && -+ qemuBuildMemPathStr(cfg, def, qemuCaps, cmd) < 0) -+ goto cleanup; -+ - for (i = 0; i < ncells; i++) { - VIR_FREE(cpumask); - if (!(cpumask = virBitmapFormat(virDomainNumaGetNodeCpumask(def->numa, i)))) --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Add-ppc64-specific-math-to-qemuDomainGetMlockLimitBytes.patch b/SOURCES/libvirt-qemu-Add-ppc64-specific-math-to-qemuDomainGetMlockLimitBytes.patch deleted file mode 100644 index ff0c0c7..0000000 --- a/SOURCES/libvirt-qemu-Add-ppc64-specific-math-to-qemuDomainGetMlockLimitBytes.patch +++ /dev/null @@ -1,124 +0,0 @@ -From c1bbe50778b3a114bccccb1d94fa9beefcc52ae5 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Fri, 20 Nov 2015 13:29:14 +0100 -Subject: [PATCH] qemu: Add ppc64-specific math to - qemuDomainGetMlockLimitBytes() - -The amount of memory a ppc64 domain might need to lock is different -than that of a equally-sized x86 domain, so we need to check the -domain's architecture and act accordingly. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1273480 - -(cherry picked from commit d269ef165c178ad62b48e5179fc4f3b4fa5e590b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1283924 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 79 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index be3dcf6..4615e3e 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3430,7 +3430,7 @@ qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, - * @def: domain definition - * - * Returns the size of the memory in bytes that needs to be set as -- * RLIMIT_MEMLOCK for purpose of VFIO device passthrough. -+ * RLIMIT_MEMLOCK for the QEMU process. - * If a mem.hard_limit is set, then that value is preferred; otherwise, the - * value returned may depend upon the architecture or devices present. - */ -@@ -3445,6 +3445,84 @@ qemuDomainGetMlockLimitBytes(virDomainDefPtr def) - goto done; - } - -+ if (ARCH_IS_PPC64(def->os.arch)) { -+ unsigned long long maxMemory; -+ unsigned long long memory; -+ unsigned long long baseLimit; -+ unsigned long long passthroughLimit; -+ size_t nPCIHostBridges; -+ size_t i; -+ bool usesVFIO = false; -+ -+ /* TODO: Detect at runtime once we start using more than just -+ * the default PCI Host Bridge */ -+ nPCIHostBridges = 1; -+ -+ for (i = 0; i < def->nhostdevs; i++) { -+ virDomainHostdevDefPtr dev = def->hostdevs[i]; -+ -+ if (dev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && -+ dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && -+ dev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) { -+ usesVFIO = true; -+ break; -+ } -+ } -+ -+ memory = virDomainDefGetMemoryActual(def); -+ -+ if (def->mem.max_memory) -+ maxMemory = def->mem.max_memory; -+ else -+ maxMemory = memory; -+ -+ /* baseLimit := maxMemory / 128 (a) -+ * + 4 MiB * #PHBs + 8 MiB (b) -+ * -+ * (a) is the hash table -+ * -+ * (b) is accounting for the 32-bit DMA window - it could be either the -+ * KVM accelerated TCE tables for emulated devices, or the VFIO -+ * userspace view. The 4 MiB per-PHB (including the default one) covers -+ * a 2GiB DMA window: default is 1GiB, but it's possible it'll be -+ * increased to help performance. The 8 MiB extra should be plenty for -+ * the TCE table index for any reasonable number of PHBs and several -+ * spapr-vlan or spapr-vscsi devices (512kB + a tiny bit each) */ -+ baseLimit = maxMemory / 128 + -+ 4096 * nPCIHostBridges + -+ 8192; -+ -+ /* passthroughLimit := max( 2 GiB * #PHBs, (c) -+ * memory (d) -+ * + memory * 1/512 * #PHBs + 8 MiB ) (e) -+ * -+ * (c) is the pre-DDW VFIO DMA window accounting. We're allowing 2 GiB -+ * rather than 1 GiB -+ * -+ * (d) is the with-DDW (and memory pre-registration and related -+ * features) DMA window accounting - assuming that we only account RAM -+ * once, even if mapped to multiple PHBs -+ * -+ * (e) is the with-DDW userspace view and overhead for the 64-bit DMA -+ * window. This is based a bit on expected guest behaviour, but there -+ * really isn't a way to completely avoid that. We assume the guest -+ * requests a 64-bit DMA window (per PHB) just big enough to map all -+ * its RAM. 4 kiB page size gives the 1/512; it will be less with 64 -+ * kiB pages, less still if the guest is mapped with hugepages (unlike -+ * the default 32-bit DMA window, DDW windows can use large IOMMU -+ * pages). 8 MiB is for second and further level overheads, like (b) */ -+ passthroughLimit = MAX(2 * 1024 * 1024 * nPCIHostBridges, -+ memory + -+ memory / 512 * nPCIHostBridges + 8192); -+ -+ if (usesVFIO) -+ memKB = baseLimit + passthroughLimit; -+ else -+ memKB = baseLimit; -+ -+ goto done; -+ } -+ - /* For device passthrough using VFIO the guest memory and MMIO memory - * regions need to be locked persistent in order to allow DMA. - * --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Add-qemuProcessSetupPid-and-use-it-in-qemuProcessSetupIOThread.patch b/SOURCES/libvirt-qemu-Add-qemuProcessSetupPid-and-use-it-in-qemuProcessSetupIOThread.patch new file mode 100644 index 0000000..49216d0 --- /dev/null +++ b/SOURCES/libvirt-qemu-Add-qemuProcessSetupPid-and-use-it-in-qemuProcessSetupIOThread.patch @@ -0,0 +1,250 @@ +From 341e7b3d6b2e1d1bc9c11aa59ebac376f847da87 Mon Sep 17 00:00:00 2001 +Message-Id: <341e7b3d6b2e1d1bc9c11aa59ebac376f847da87@dist-git> +From: Martin Kletzander +Date: Wed, 24 Aug 2016 16:10:54 -0400 +Subject: [PATCH] qemu: Add qemuProcessSetupPid() and use it in + qemuProcessSetupIOThread() + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Setting up cgroups and other things for all kinds of threads (the +emulator thread, vCPU threads, I/O threads) was copy-pasted every time +new thing was added. Over time each one of those functions changed a +bit differently. So create one function that does all that setup and +start using it, starting with I/O thread setup. That will shave some +duplicated code and maybe fix some bugs as well. + +Signed-off-by: Martin Kletzander +(cherry picked from commit 71e419bbeb7d7bf6f9be0c2516c320cfb7492ef3) +--- + src/qemu/qemu_process.c | 200 +++++++++++++++++++++++++++--------------------- + 1 file changed, 114 insertions(+), 86 deletions(-) + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 41e401b..64b1ac9 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -2304,6 +2304,114 @@ qemuProcessSetLinkStates(virQEMUDriverPtr driver, + } + + ++/** ++ * qemuProcessSetupPid: ++ * ++ * This function sets resource properities (affinity, cgroups, ++ * scheduler) for any PID associated with a domain. It should be used ++ * to set up emulator PIDs as well as vCPU and I/O thread pids to ++ * ensure they are all handled the same way. ++ * ++ * Returns 0 on success, -1 on error. ++ */ ++static int ++qemuProcessSetupPid(virDomainObjPtr vm, ++ pid_t pid, ++ virCgroupThreadName nameval, ++ int id, ++ virBitmapPtr cpumask, ++ unsigned long long period, ++ long long quota, ++ virDomainThreadSchedParamPtr sched) ++{ ++ qemuDomainObjPrivatePtr priv = vm->privateData; ++ virDomainNumatuneMemMode mem_mode; ++ virCgroupPtr cgroup = NULL; ++ virBitmapPtr use_cpumask; ++ char *mem_mask = NULL; ++ int ret = -1; ++ ++ if ((period || quota) && ++ !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("cgroup cpu is required for scheduler tuning")); ++ goto cleanup; ++ } ++ ++ /* Infer which cpumask shall be used. */ ++ if (cpumask) ++ use_cpumask = cpumask; ++ else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) ++ use_cpumask = priv->autoCpuset; ++ else ++ use_cpumask = vm->def->cpumask; ++ ++ /* ++ * If CPU cgroup controller is not initialized here, then we need ++ * neither period nor quota settings. And if CPUSET controller is ++ * not initialized either, then there's nothing to do anyway. ++ */ ++ if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) || ++ virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { ++ ++ if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 && ++ mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT && ++ virDomainNumatuneMaybeFormatNodeset(vm->def->numa, ++ priv->autoNodeset, ++ &mem_mask, -1) < 0) ++ goto cleanup; ++ ++ if (virCgroupNewThread(priv->cgroup, nameval, id, true, &cgroup) < 0) ++ goto cleanup; ++ ++ if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { ++ if (use_cpumask && ++ qemuSetupCgroupCpusetCpus(cgroup, use_cpumask) < 0) ++ goto cleanup; ++ ++ /* ++ * Don't setup cpuset.mems for the emulator, they need to ++ * be set up after initialization in order for kvm ++ * allocations to succeed. ++ */ ++ if (nameval != VIR_CGROUP_THREAD_EMULATOR && ++ mem_mask && virCgroupSetCpusetMems(cgroup, mem_mask) < 0) ++ goto cleanup; ++ ++ } ++ ++ if ((period || quota) && ++ qemuSetupCgroupVcpuBW(cgroup, period, quota) < 0) ++ goto cleanup; ++ ++ /* Move the thread to the sub dir */ ++ if (virCgroupAddTask(cgroup, pid) < 0) ++ goto cleanup; ++ ++ } ++ ++ /* Setup legacy affinity. */ ++ if (use_cpumask && virProcessSetAffinity(pid, use_cpumask) < 0) ++ goto cleanup; ++ ++ /* Set scheduler type and priority. */ ++ if (sched && ++ virProcessSetScheduler(pid, sched->policy, sched->priority) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ cleanup: ++ VIR_FREE(mem_mask); ++ if (cgroup) { ++ if (ret < 0) ++ virCgroupRemove(cgroup); ++ virCgroupFree(&cgroup); ++ } ++ ++ return ret; ++} ++ ++ + static int + qemuProcessSetupEmulator(virDomainObjPtr vm) + { +@@ -4704,98 +4812,18 @@ qemuProcessSetupVcpus(virDomainObjPtr vm) + } + + +-/** +- * qemuProcessSetupIOThread: +- * @vm: domain object +- * @iothread: iothread data structure to set the data for +- * +- * This function sets resource properities (affinity, cgroups, scheduler) for a +- * IOThread. This function expects that the IOThread is online and the IOThread +- * pids were correctly detected at the point when it's called. +- * +- * Returns 0 on success, -1 on error. +- */ + int + qemuProcessSetupIOThread(virDomainObjPtr vm, + virDomainIOThreadIDDefPtr iothread) + { +- qemuDomainObjPrivatePtr priv = vm->privateData; +- unsigned long long period = vm->def->cputune.period; +- long long quota = vm->def->cputune.quota; +- virDomainNumatuneMemMode mem_mode; +- char *mem_mask = NULL; +- virCgroupPtr cgroup_iothread = NULL; +- virBitmapPtr cpumask = NULL; +- int ret = -1; + +- if ((period || quota) && +- !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("cgroup cpu is required for scheduler tuning")); +- return -1; +- } +- +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) || +- virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 && +- mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT && +- virDomainNumatuneMaybeFormatNodeset(vm->def->numa, +- priv->autoNodeset, +- &mem_mask, -1) < 0) +- goto cleanup; +- +- if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_IOTHREAD, ++ return qemuProcessSetupPid(vm, iothread->thread_id, ++ VIR_CGROUP_THREAD_IOTHREAD, + iothread->iothread_id, +- true, &cgroup_iothread) < 0) +- goto cleanup; +- } +- +- if (iothread->cpumask) +- cpumask = iothread->cpumask; +- else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) +- cpumask = priv->autoCpuset; +- else +- cpumask = vm->def->cpumask; +- +- if (period || quota) { +- if (qemuSetupCgroupVcpuBW(cgroup_iothread, period, quota) < 0) +- goto cleanup; +- } +- +- if (cgroup_iothread) { +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- if (mem_mask && +- virCgroupSetCpusetMems(cgroup_iothread, mem_mask) < 0) +- goto cleanup; +- +- if (cpumask && +- qemuSetupCgroupCpusetCpus(cgroup_iothread, cpumask) < 0) +- goto cleanup; +- } +- +- if (virCgroupAddTask(cgroup_iothread, iothread->thread_id) < 0) +- goto cleanup; +- } +- +- if (cpumask && virProcessSetAffinity(iothread->thread_id, cpumask) < 0) +- goto cleanup; +- +- if (iothread->sched.policy != VIR_PROC_POLICY_NONE && +- virProcessSetScheduler(iothread->thread_id, iothread->sched.policy, +- iothread->sched.priority) < 0) +- goto cleanup; +- +- ret = 0; +- +- cleanup: +- if (cgroup_iothread) { +- if (ret < 0) +- virCgroupRemove(cgroup_iothread); +- virCgroupFree(&cgroup_iothread); +- } +- +- VIR_FREE(mem_mask); +- return ret; ++ iothread->cpumask, ++ vm->def->cputune.period, ++ vm->def->cputune.quota, ++ &iothread->sched); + } + + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Add-secinfo-for-hotplug-virtio-disk.patch b/SOURCES/libvirt-qemu-Add-secinfo-for-hotplug-virtio-disk.patch new file mode 100644 index 0000000..55fc915 --- /dev/null +++ b/SOURCES/libvirt-qemu-Add-secinfo-for-hotplug-virtio-disk.patch @@ -0,0 +1,137 @@ +From ff0dba475aad3bcad524391a7fddfede1e6fe189 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:58 -0400 +Subject: [PATCH] qemu: Add secinfo for hotplug virtio disk + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Commit id 'a1344f70a' added AES secret processing for RBD when starting +up a guest. As such, when the hotplug code calls qemuDomainSecretDiskPrepare +an AES secret could be added to the disk about to be hotplugged. If an AES +secret was added, then the hotplug code would need to generate the secret +object because qemuBuildDriveStr would add the "password-secret=" to the +returned 'driveStr' rather than the base64 encoded password. + +Signed-off-by: John Ferlan +(cherry picked from commit fceeeda2115bcb86b992c4add38704a886c099c8) +--- + src/qemu/qemu_hotplug.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index b3fab6a..084443f 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -303,6 +303,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + virDomainDiskDefPtr disk) + { + int ret = -1; ++ int rv; + qemuDomainObjPrivatePtr priv = vm->privateData; + virErrorPtr orig_err; + char *devstr = NULL; +@@ -310,8 +311,12 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + char *drivealias = NULL; + bool releaseaddr = false; + bool driveAdded = false; ++ bool secobjAdded = false; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + const char *src = virDomainDiskGetSource(disk); ++ virJSONValuePtr secobjProps = NULL; ++ qemuDomainDiskPrivatePtr diskPriv; ++ qemuDomainSecretInfoPtr secinfo; + + if (!disk->info.type) { + if (qemuDomainMachineIsS390CCW(vm->def) && +@@ -344,6 +349,13 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + if (qemuDomainSecretDiskPrepare(conn, priv, disk) < 0) + goto error; + ++ diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); ++ secinfo = diskPriv->secinfo; ++ if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { ++ if (qemuBuildSecretInfoProps(secinfo, &secobjProps) < 0) ++ goto error; ++ } ++ + if (!(drivestr = qemuBuildDriveStr(disk, false, priv->qemuCaps))) + goto error; + +@@ -358,6 +370,15 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + + qemuDomainObjEnterMonitor(driver, vm); + ++ if (secobjProps) { ++ rv = qemuMonitorAddObject(priv->mon, "secret", secinfo->s.aes.alias, ++ secobjProps); ++ secobjProps = NULL; /* qemuMonitorAddObject consumes */ ++ if (rv < 0) ++ goto exit_monitor; ++ } ++ secobjAdded = true; ++ + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) + goto exit_monitor; + driveAdded = true; +@@ -376,6 +397,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + ret = 0; + + cleanup: ++ virJSONValueFree(secobjProps); + qemuDomainSecretDiskDestroy(disk); + VIR_FREE(devstr); + VIR_FREE(drivestr); +@@ -389,10 +411,13 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + VIR_WARN("Unable to remove drive %s (%s) after failed " + "qemuMonitorAddDevice", drivealias, drivestr); + } ++ if (secobjAdded) ++ ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias)); + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); + } ++ + if (qemuDomainObjExitMonitor(driver, vm) < 0) + releaseaddr = false; + +@@ -2830,6 +2855,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + const char *src = virDomainDiskGetSource(disk); + qemuDomainObjPrivatePtr priv = vm->privateData; + char *drivestr; ++ char *objAlias = NULL; + + VIR_DEBUG("Removing disk %s from domain %p %s", + disk->info.alias, vm, vm->def->name); +@@ -2840,7 +2866,27 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + QEMU_DRIVE_HOST_PREFIX, disk->info.alias) < 0) + return -1; + ++ /* Let's look for some markers for a secret object and create an alias ++ * object to be used to attempt to delete the object that was created. ++ * We cannot just use the disk private secret info since it would have ++ * been removed during cleanup of qemuProcessLaunch. Likewise, libvirtd ++ * restart wouldn't have them, so no assumption can be made. */ ++ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) && ++ qemuDomainSecretDiskCapable(disk->src)) { ++ ++ if (!(objAlias = qemuDomainGetSecretAESAlias(disk->info.alias))) { ++ VIR_FREE(drivestr); ++ return -1; ++ } ++ } ++ + qemuDomainObjEnterMonitor(driver, vm); ++ ++ /* If it fails, then so be it - it was a best shot */ ++ if (objAlias) ++ ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); ++ VIR_FREE(objAlias); ++ + qemuMonitorDriveDel(priv->mon, drivestr); + VIR_FREE(drivestr); + if (qemuDomainObjExitMonitor(driver, vm) < 0) +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Add-support-to-get-set-IOThread-period-and-quota-cgroup-values.patch b/SOURCES/libvirt-qemu-Add-support-to-get-set-IOThread-period-and-quota-cgroup-values.patch new file mode 100644 index 0000000..ceca397 --- /dev/null +++ b/SOURCES/libvirt-qemu-Add-support-to-get-set-IOThread-period-and-quota-cgroup-values.patch @@ -0,0 +1,241 @@ +From 6a60677f21bd3ef90603e25d9c609c3f569918c3 Mon Sep 17 00:00:00 2001 +Message-Id: <6a60677f21bd3ef90603e25d9c609c3f569918c3@dist-git> +From: John Ferlan +Date: Tue, 6 Sep 2016 16:43:14 -0400 +Subject: [PATCH] qemu: Add support to get/set IOThread period and quota cgroup + values + +https://bugzilla.redhat.com/show_bug.cgi?id=1356937 + +Add support for IOThread quota/bandwidth and period parameters for non +session mode. If in session mode, then error out. Uses all the same +places where {vcpu|emulator|global}_{period|quota} are adjusted and +adds the iothread values. + +(cherry picked from commit e4e4d17c9c2828b3a7d2909295e724c57e60a334) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_command.c | 3 +- + src/qemu/qemu_driver.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++- + src/qemu/qemu_process.c | 4 +- + 3 files changed, 129 insertions(+), 5 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index e292f48..de121c5 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -9306,7 +9306,8 @@ qemuBuildCommandLineValidate(virQEMUDriverPtr driver, + if (def->cputune.sharesSpecified || def->cputune.period || + def->cputune.quota || def->cputune.global_period || + def->cputune.global_quota || def->cputune.emulator_period || +- def->cputune.emulator_quota) { ++ def->cputune.emulator_quota || def->cputune.iothread_period || ++ def->cputune.iothread_quota) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("CPU tuning is not available in session mode")); + return -1; +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 8081417..33bfb67 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -8705,7 +8705,7 @@ static char *qemuDomainGetSchedulerType(virDomainPtr dom, + /* Domain not running, thus no cgroups - return defaults */ + if (!virDomainObjIsActive(vm)) { + if (nparams) +- *nparams = 7; ++ *nparams = 9; + ignore_value(VIR_STRDUP(ret, "posix")); + goto cleanup; + } +@@ -8718,7 +8718,7 @@ static char *qemuDomainGetSchedulerType(virDomainPtr dom, + + if (nparams) { + if (virCgroupSupportsCpuBW(priv->cgroup)) +- *nparams = 7; ++ *nparams = 9; + else + *nparams = 1; + } +@@ -9939,6 +9939,40 @@ qemuSetEmulatorBandwidthLive(virCgroupPtr cgroup, + return -1; + } + ++ ++static int ++qemuSetIOThreadsBWLive(virDomainObjPtr vm, virCgroupPtr cgroup, ++ unsigned long long period, long long quota) ++{ ++ size_t i; ++ virCgroupPtr cgroup_iothread = NULL; ++ ++ if (period == 0 && quota == 0) ++ return 0; ++ ++ if (!vm->def->niothreadids) ++ return 0; ++ ++ for (i = 0; i < vm->def->niothreadids; i++) { ++ if (virCgroupNewThread(cgroup, VIR_CGROUP_THREAD_IOTHREAD, ++ vm->def->iothreadids[i]->iothread_id, ++ false, &cgroup_iothread) < 0) ++ goto cleanup; ++ ++ if (qemuSetupCgroupVcpuBW(cgroup_iothread, period, quota) < 0) ++ goto cleanup; ++ ++ virCgroupFree(&cgroup_iothread); ++ } ++ ++ return 0; ++ ++ cleanup: ++ virCgroupFree(&cgroup_iothread); ++ return -1; ++} ++ ++ + #define SCHED_RANGE_CHECK(VAR, NAME, MIN, MAX) \ + if (((VAR) > 0 && (VAR) < (MIN)) || (VAR) > (MAX)) { \ + virReportError(VIR_ERR_INVALID_ARG, \ +@@ -9989,6 +10023,10 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA, + VIR_TYPED_PARAM_LLONG, ++ VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD, ++ VIR_TYPED_PARAM_ULLONG, ++ VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA, ++ VIR_TYPED_PARAM_LLONG, + NULL) < 0) + return -1; + +@@ -10181,6 +10219,46 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom, + + if (persistentDef) + persistentDefCopy->cputune.emulator_quota = value_l; ++ ++ } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD)) { ++ SCHED_RANGE_CHECK(value_ul, VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD, ++ QEMU_SCHED_MIN_PERIOD, QEMU_SCHED_MAX_PERIOD); ++ ++ if (def && value_ul) { ++ if ((rc = qemuSetIOThreadsBWLive(vm, priv->cgroup, value_ul, 0))) ++ goto endjob; ++ ++ def->cputune.iothread_period = value_ul; ++ ++ if (virTypedParamsAddULLong(&eventParams, &eventNparams, ++ &eventMaxNparams, ++ VIR_DOMAIN_TUNABLE_CPU_IOTHREAD_PERIOD, ++ value_ul) < 0) ++ goto endjob; ++ } ++ ++ if (persistentDef) ++ persistentDefCopy->cputune.iothread_period = params[i].value.ul; ++ ++ } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA)) { ++ SCHED_RANGE_CHECK(value_l, VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA, ++ QEMU_SCHED_MIN_QUOTA, QEMU_SCHED_MAX_QUOTA); ++ ++ if (def && value_l) { ++ if ((rc = qemuSetIOThreadsBWLive(vm, priv->cgroup, 0, value_l))) ++ goto endjob; ++ ++ def->cputune.iothread_quota = value_l; ++ ++ if (virTypedParamsAddLLong(&eventParams, &eventNparams, ++ &eventMaxNparams, ++ VIR_DOMAIN_TUNABLE_CPU_IOTHREAD_QUOTA, ++ value_l) < 0) ++ goto endjob; ++ } ++ ++ if (persistentDef) ++ persistentDefCopy->cputune.iothread_quota = value_l; + } + } + +@@ -10304,6 +10382,43 @@ qemuGetEmulatorBandwidthLive(virCgroupPtr cgroup, + } + + static int ++qemuGetIOThreadsBWLive(virDomainObjPtr vm, ++ unsigned long long *period, long long *quota) ++{ ++ virCgroupPtr cgroup_iothread = NULL; ++ qemuDomainObjPrivatePtr priv = NULL; ++ int rc; ++ int ret = -1; ++ ++ priv = vm->privateData; ++ if (!vm->def->niothreadids) { ++ /* We do not create sub dir for each iothread */ ++ if ((rc = qemuGetVcpuBWLive(priv->cgroup, period, quota)) < 0) ++ goto cleanup; ++ ++ goto out; ++ } ++ ++ /* get period and quota for the "first" IOThread */ ++ if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_IOTHREAD, ++ vm->def->iothreadids[0]->iothread_id, ++ false, &cgroup_iothread) < 0) ++ goto cleanup; ++ ++ rc = qemuGetVcpuBWLive(cgroup_iothread, period, quota); ++ if (rc < 0) ++ goto cleanup; ++ ++ out: ++ ret = 0; ++ ++ cleanup: ++ virCgroupFree(&cgroup_iothread); ++ return ret; ++} ++ ++ ++static int + qemuGetGlobalBWLive(virCgroupPtr cgroup, unsigned long long *period, + long long *quota) + { +@@ -10378,6 +10493,11 @@ qemuDomainGetSchedulerParametersFlags(virDomainPtr dom, + qemuGetGlobalBWLive(priv->cgroup, &data.global_period, + &data.global_quota) < 0) + goto cleanup; ++ ++ if (maxparams > 7 && ++ qemuGetIOThreadsBWLive(vm, &data.iothread_period, ++ &data.iothread_quota) < 0) ++ goto cleanup; + } else { + cpu_bw_status = false; + } +@@ -10402,6 +10522,9 @@ qemuDomainGetSchedulerParametersFlags(virDomainPtr dom, + + QEMU_SCHED_ASSIGN(global_period, GLOBAL_PERIOD, ULLONG); + QEMU_SCHED_ASSIGN(global_quota, GLOBAL_QUOTA, LLONG); ++ ++ QEMU_SCHED_ASSIGN(iothread_period, IOTHREAD_PERIOD, ULLONG); ++ QEMU_SCHED_ASSIGN(iothread_quota, IOTHREAD_QUOTA, LLONG); + } + + #undef QEMU_SCHED_ASSIGN +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 2eac422..9583506 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -4697,8 +4697,8 @@ qemuProcessSetupIOThread(virDomainObjPtr vm, + VIR_CGROUP_THREAD_IOTHREAD, + iothread->iothread_id, + iothread->cpumask, +- vm->def->cputune.period, +- vm->def->cputune.quota, ++ vm->def->cputune.iothread_period, ++ vm->def->cputune.iothread_quota, + &iothread->sched); + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Adjust-the-cur_ballon-on-coldplug-unplug-of-dimms.patch b/SOURCES/libvirt-qemu-Adjust-the-cur_ballon-on-coldplug-unplug-of-dimms.patch new file mode 100644 index 0000000..6855f9e --- /dev/null +++ b/SOURCES/libvirt-qemu-Adjust-the-cur_ballon-on-coldplug-unplug-of-dimms.patch @@ -0,0 +1,73 @@ +From 55801bed29ad9b57d8deca92be44e436c3b60b5e Mon Sep 17 00:00:00 2001 +Message-Id: <55801bed29ad9b57d8deca92be44e436c3b60b5e@dist-git> +From: Shivaprasad G Bhat +Date: Tue, 16 Aug 2016 16:26:38 +0200 +Subject: [PATCH] qemu: Adjust the cur_ballon on coldplug/unplug of dimms + +https://bugzilla.redhat.com/show_bug.cgi?id=1220702 + +The cur_balloon also increases/decreases with dimm hotplug/unplug. +To be consistent, adjust the value for coldplug too. This was inconsistently +taken care when cur_ballon != memory to begin with. The patch fixes it +irrespective of that. + +Signed-off-by: Shivaprasad G Bhat +Signed-off-by: Peter Krempa +(cherry picked from commit 707063efa86a8cab3ee7d64ad203f2e517b82bce) +--- + src/conf/domain_conf.c | 4 ---- + src/qemu/qemu_driver.c | 9 +++++---- + 2 files changed, 5 insertions(+), 8 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 715ca2b..33954f7 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -14668,10 +14668,6 @@ virDomainMemoryRemove(virDomainDefPtr def, + + VIR_DELETE_ELEMENT(def->mems, idx, def->nmems); + +- /* fix up balloon size */ +- if (def->mem.cur_balloon > virDomainDefGetMemoryTotal(def)) +- def->mem.cur_balloon = virDomainDefGetMemoryTotal(def); +- + /* fix total memory size of the domain */ + virDomainDefSetMemoryTotal(def, memory - ret->size); + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 2fe217d..9c6c1cf 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -7788,8 +7788,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, + return -1; + } + +- if (vmdef->mem.cur_balloon == virDomainDefGetMemoryTotal(vmdef)) +- vmdef->mem.cur_balloon += dev->data.memory->size; ++ vmdef->mem.cur_balloon += dev->data.memory->size; + + if (virDomainMemoryInsert(vmdef, dev->data.memory) < 0) + return -1; +@@ -7846,6 +7845,7 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef, + virDomainControllerDefPtr cont, det_cont; + virDomainChrDefPtr chr; + virDomainFSDefPtr fs; ++ virDomainMemoryDefPtr mem; + int idx; + + switch ((virDomainDeviceType) dev->type) { +@@ -7943,8 +7943,9 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef, + _("matching memory device was not found")); + return -1; + } +- +- virDomainMemoryDefFree(virDomainMemoryRemove(vmdef, idx)); ++ mem = virDomainMemoryRemove(vmdef, idx); ++ vmdef->mem.cur_balloon -= mem->size; ++ virDomainMemoryDefFree(mem); + break; + + case VIR_DOMAIN_DEVICE_REDIRDEV: +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Advertise-OVMF_CODE.secboot.fd.patch b/SOURCES/libvirt-qemu-Advertise-OVMF_CODE.secboot.fd.patch new file mode 100644 index 0000000..85255dd --- /dev/null +++ b/SOURCES/libvirt-qemu-Advertise-OVMF_CODE.secboot.fd.patch @@ -0,0 +1,68 @@ +From 3d07abddf4b080d2f33c668404d88be5679ec9ee Mon Sep 17 00:00:00 2001 +Message-Id: <3d07abddf4b080d2f33c668404d88be5679ec9ee@dist-git> +From: Michal Privoznik +Date: Fri, 5 Aug 2016 14:35:28 +0200 +Subject: [PATCH] qemu: Advertise OVMF_CODE.secboot.fd + +https://bugzilla.redhat.com/show_bug.cgi?id=1304483 + +Signed-off-by: Michal Privoznik +(cherry picked from commit f522b7d2693f5804e1a12f2c3b0b6e5f4b1c85fd) +Signed-off-by: Michal Privoznik +--- + src/qemu/qemu.conf | 1 + + src/qemu/qemu_conf.c | 13 +++++++++---- + 2 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf +index 7964273..20bfb74 100644 +--- a/src/qemu/qemu.conf ++++ b/src/qemu/qemu.conf +@@ -524,6 +524,7 @@ + # follows this scheme. + #nvram = [ + # "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd", ++# "/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd", + # "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" + #] + +diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c +index 49e8e8b..2fd7e51 100644 +--- a/src/qemu/qemu_conf.c ++++ b/src/qemu/qemu_conf.c +@@ -126,6 +126,8 @@ void qemuDomainCmdlineDefFree(qemuDomainCmdlineDefPtr def) + + #define VIR_QEMU_OVMF_LOADER_PATH "/usr/share/OVMF/OVMF_CODE.fd" + #define VIR_QEMU_OVMF_NVRAM_PATH "/usr/share/OVMF/OVMF_VARS.fd" ++#define VIR_QEMU_OVMF_SEC_LOADER_PATH "/usr/share/OVMF/OVMF_CODE.secboot.fd" ++#define VIR_QEMU_OVMF_SEC_NVRAM_PATH "/usr/share/OVMF/OVMF_VARS.fd" + #define VIR_QEMU_AAVMF_LOADER_PATH "/usr/share/AAVMF/AAVMF_CODE.fd" + #define VIR_QEMU_AAVMF_NVRAM_PATH "/usr/share/AAVMF/AAVMF_VARS.fd" + +@@ -292,16 +294,19 @@ virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged) + goto error; + + #else +- if (VIR_ALLOC_N(cfg->firmwares, 2) < 0) ++ if (VIR_ALLOC_N(cfg->firmwares, 3) < 0) + goto error; +- cfg->nfirmwares = 2; +- if (VIR_ALLOC(cfg->firmwares[0]) < 0 || VIR_ALLOC(cfg->firmwares[1]) < 0) ++ cfg->nfirmwares = 3; ++ if (VIR_ALLOC(cfg->firmwares[0]) < 0 || VIR_ALLOC(cfg->firmwares[1]) < 0 || ++ VIR_ALLOC(cfg->firmwares[2]) < 0) + goto error; + + if (VIR_STRDUP(cfg->firmwares[0]->name, VIR_QEMU_AAVMF_LOADER_PATH) < 0 || + VIR_STRDUP(cfg->firmwares[0]->nvram, VIR_QEMU_AAVMF_NVRAM_PATH) < 0 || + VIR_STRDUP(cfg->firmwares[1]->name, VIR_QEMU_OVMF_LOADER_PATH) < 0 || +- VIR_STRDUP(cfg->firmwares[1]->nvram, VIR_QEMU_OVMF_NVRAM_PATH) < 0) ++ VIR_STRDUP(cfg->firmwares[1]->nvram, VIR_QEMU_OVMF_NVRAM_PATH) < 0 || ++ VIR_STRDUP(cfg->firmwares[2]->name, VIR_QEMU_OVMF_SEC_LOADER_PATH) < 0 || ++ VIR_STRDUP(cfg->firmwares[2]->nvram, VIR_QEMU_OVMF_SEC_NVRAM_PATH) < 0) + goto error; + #endif + +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Align-memory-module-sizes-to-2MiB.patch b/SOURCES/libvirt-qemu-Align-memory-module-sizes-to-2MiB.patch deleted file mode 100644 index 6611986..0000000 --- a/SOURCES/libvirt-qemu-Align-memory-module-sizes-to-2MiB.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 64eebe80b8722e3abb3c51a9b7282ae7445fef58 Mon Sep 17 00:00:00 2001 -Message-Id: <64eebe80b8722e3abb3c51a9b7282ae7445fef58@dist-git> -From: Peter Krempa -Date: Wed, 23 Sep 2015 14:06:01 +0200 -Subject: [PATCH] qemu: Align memory module sizes to 2MiB - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -My original implementation was based on a qemu version that still did -not have all the checks in place. Using sizes that would align to odd -megabyte increments will produce the following error: - -qemu-kvm: -device pc-dimm,node=0,memdev=memdimm0,id=dimm0: backend memory size must be multiple of 0x200000 -qemu-kvm: -device pc-dimm,node=0,memdev=memdimm0,id=dimm0: Device 'pc-dimm' could not be initialized - -Introduce an alignment retrieval function for memory devices and use it -to align the devices separately and modify a test case to verify it. - -(cherry picked from commit 624ec1c2f9157082db415711cd3b347d1af7f5c4) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 19 ++++++++++++++++++- - .../qemuxml2argv-memory-hotplug-dimm.xml | 2 +- - 2 files changed, 19 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index a47535e..1528cfd 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3173,6 +3173,21 @@ qemuDomainGetMemorySizeAlignment(virDomainDefPtr def) - } - - -+static unsigned long long -+qemuDomainGetMemoryModuleSizeAlignment(const virDomainDef *def, -+ const virDomainMemoryDef *mem ATTRIBUTE_UNUSED) -+{ -+ /* PPC requires the memory sizes to be rounded to 256MiB increments, so -+ * round them to the size always. */ -+ if (ARCH_IS_PPC64(def->os.arch)) -+ return 256 * 1024; -+ -+ /* dimm memory modules require 2MiB alignment rather than the 1MiB we are -+ * using elsewhere. */ -+ return 2048; -+} -+ -+ - int - qemuDomainAlignMemorySizes(virDomainDefPtr def) - { -@@ -3199,8 +3214,10 @@ qemuDomainAlignMemorySizes(virDomainDefPtr def) - def->mem.max_memory = VIR_ROUND_UP(def->mem.max_memory, align); - - /* Align memory module sizes */ -- for (i = 0; i < def->nmems; i++) -+ for (i = 0; i < def->nmems; i++) { -+ align = qemuDomainGetMemoryModuleSizeAlignment(def, def->mems[i]); - def->mems[i]->size = VIR_ROUND_UP(def->mems[i]->size, align); -+ } - - return 0; - } -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.xml b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.xml -index 3f468ec..fbcac84 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.xml -+++ b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.xml -@@ -36,7 +36,7 @@ - - - -- 524287 -+ 523264 - 0 - - --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-Allow-others-to-browse-var-lib-libvirt-qemu.patch b/SOURCES/libvirt-qemu-Allow-others-to-browse-var-lib-libvirt-qemu.patch deleted file mode 100644 index 5079679..0000000 --- a/SOURCES/libvirt-qemu-Allow-others-to-browse-var-lib-libvirt-qemu.patch +++ /dev/null @@ -1,43 +0,0 @@ -From bb648b91212e2f43ef408e7be7212c60d02203ce Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Mon, 14 Sep 2015 10:15:27 +0200 -Subject: [PATCH] qemu: Allow others to browse /var/lib/libvirt/qemu - -Commit f1f68ca33433 tried fixing running multiple domains under various -users, but if the user can't browse the directory, it's hard for the -qemu running under that user to create the monitor socket. - -The permissions need to be fixed in two places in the spec file due to -support for both installations with and without driver modules. - -Creating a directory with '$(MKDIR_P) -m' shouldn't fail even on systems -where autoconf needs to fallback to 'install-sh -d'. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit f05f005c8b0ec8a53bb7fd6da65f4ac08afac858) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - libvirt.spec.in | 4 ++-- - src/Makefile.am | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 62b8fd6..8c202a5 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -2777,7 +2777,7 @@ if WITH_SANLOCK - $(MKDIR_P) "$(DESTDIR)$(localstatedir)/lib/libvirt/sanlock" - endif WITH_SANLOCK - if WITH_QEMU -- $(MKDIR_P) "$(DESTDIR)$(localstatedir)/lib/libvirt/qemu" -+ $(MKDIR_P) -m 0751 "$(DESTDIR)$(localstatedir)/lib/libvirt/qemu" - $(MKDIR_P) "$(DESTDIR)$(localstatedir)/run/libvirt/qemu" - $(MKDIR_P) "$(DESTDIR)$(localstatedir)/cache/libvirt/qemu" - $(MKDIR_P) "$(DESTDIR)$(localstatedir)/log/libvirt/qemu" --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachHostSCSIDevice.patch b/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachHostSCSIDevice.patch new file mode 100644 index 0000000..a3d3993 --- /dev/null +++ b/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachHostSCSIDevice.patch @@ -0,0 +1,81 @@ +From 9d97987c6cd5a7bf0dbd251d48b72b506bf0abe9 Mon Sep 17 00:00:00 2001 +Message-Id: <9d97987c6cd5a7bf0dbd251d48b72b506bf0abe9@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:53 -0400 +Subject: [PATCH] qemu: Alter error path cleanup for + qemuDomainAttachHostSCSIDevice + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Based on recent review comment - rather than have a spate of goto failxxxx, +change to a boolean based model. Ensures that the original error can be +preserved and cleanup is a bit more orderly if more objects are added. + +(cherry picked from commit 6fe2eb2458b5e4b84f5aede6d3fdf3ae47c0cd02) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_hotplug.c | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 7a71333..3f63b0e 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -1899,6 +1899,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, + char *drvstr = NULL; + bool teardowncgroup = false; + bool teardownlabel = false; ++ bool driveAdded = false; + + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_SCSI_GENERIC)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +@@ -1960,17 +1961,17 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, + if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1) < 0) + goto cleanup; + +- /* Attach the device - 2 step process */ + qemuDomainObjEnterMonitor(driver, vm); + + if (qemuMonitorAddDrive(priv->mon, drvstr) < 0) +- goto failadddrive; ++ goto exit_monitor; ++ driveAdded = true; + + if (qemuMonitorAddDevice(priv->mon, devstr) < 0) +- goto failadddevice; ++ goto exit_monitor; + + if (qemuDomainObjExitMonitor(driver, vm) < 0) +- goto failexitmonitor; ++ goto cleanup; + + virDomainAuditHostdev(vm, hostdev, "attach", true); + +@@ -1993,21 +1994,19 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, + VIR_FREE(devstr); + return ret; + +- failadddevice: ++ exit_monitor: + orig_err = virSaveLastError(); +- if (qemuMonitorDriveDel(priv->mon, drvstr) < 0) ++ if (driveAdded && qemuMonitorDriveDel(priv->mon, drvstr) < 0) { + VIR_WARN("Unable to remove drive %s (%s) after failed " + "qemuMonitorAddDevice", + drvstr, devstr); ++ } + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); + } + +- failadddrive: + ignore_value(qemuDomainObjExitMonitor(driver, vm)); +- +- failexitmonitor: + virDomainAuditHostdev(vm, hostdev, "attach", false); + + goto cleanup; +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachSCSIDisk.patch b/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachSCSIDisk.patch new file mode 100644 index 0000000..1d3a41b --- /dev/null +++ b/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachSCSIDisk.patch @@ -0,0 +1,73 @@ +From 48393066faa3d6af3791e6a0d0fcf79a71b8e9e4 Mon Sep 17 00:00:00 2001 +Message-Id: <48393066faa3d6af3791e6a0d0fcf79a71b8e9e4@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:55 -0400 +Subject: [PATCH] qemu: Alter error path cleanup for qemuDomainAttachSCSIDisk + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Based on recent review comment - rather than have a spate of goto failxxxx, +change to a boolean based model. Ensures that the original error can be +preserved and cleanup is a bit more orderly if more objects are added. + +(cherry picked from commit c3b5f22dec05389a8a164761976d4aa64d4c399f) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_hotplug.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index e21720b..b3fab6a 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -547,6 +547,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + qemuDomainObjPrivatePtr priv = vm->privateData; + char *drivestr = NULL; + char *devstr = NULL; ++ bool driveAdded = false; + int ret = -1; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + +@@ -588,17 +589,17 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) + goto error; + +- /* Attach the device - 2 step process */ + qemuDomainObjEnterMonitor(driver, vm); + + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) +- goto failadddrive; ++ goto exit_monitor; ++ driveAdded = true; + + if (qemuMonitorAddDevice(priv->mon, devstr) < 0) +- goto failadddevice; ++ goto exit_monitor; + + if (qemuDomainObjExitMonitor(driver, vm) < 0) +- goto failexitmonitor; ++ goto error; + + virDomainAuditDisk(vm, NULL, disk->src, "attach", true); + +@@ -612,14 +613,13 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + virObjectUnref(cfg); + return ret; + +- failadddevice: ++ exit_monitor: + /* XXX should call 'drive_del' on error but this does not exist yet */ +- VIR_WARN("qemuMonitorAddDevice failed on %s (%s)", drivestr, devstr); ++ if (driveAdded) ++ VIR_WARN("qemuMonitorAddDevice failed on %s (%s)", drivestr, devstr); + +- failadddrive: + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + +- failexitmonitor: + virDomainAuditDisk(vm, NULL, disk->src, "attach", false); + + error: +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachVirtioDiskDevice.patch b/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachVirtioDiskDevice.patch new file mode 100644 index 0000000..fbec0ff --- /dev/null +++ b/SOURCES/libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachVirtioDiskDevice.patch @@ -0,0 +1,82 @@ +From bf72946b78df7a69566eb9e25df8210f926aa513 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:54 -0400 +Subject: [PATCH] qemu: Alter error path cleanup for + qemuDomainAttachVirtioDiskDevice + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Based on recent review comment - rather than have a spate of goto failxxxx, +change to a boolean based model. Ensures that the original error can be +preserved and cleanup is a bit more orderly if more objects are added. + +(cherry picked from commit a7f84cb1ee037c2ea6c803450eb692d8030b4227) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_hotplug.c | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 3f63b0e..e21720b 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -309,6 +309,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + char *drivestr = NULL; + char *drivealias = NULL; + bool releaseaddr = false; ++ bool driveAdded = false; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + const char *src = virDomainDiskGetSource(disk); + +@@ -355,18 +356,18 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) + goto error; + +- /* Attach the device - 2 step process */ + qemuDomainObjEnterMonitor(driver, vm); + + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) +- goto failadddrive; ++ goto exit_monitor; ++ driveAdded = true; + + if (qemuMonitorAddDevice(priv->mon, devstr) < 0) +- goto failadddevice; ++ goto exit_monitor; + + if (qemuDomainObjExitMonitor(driver, vm) < 0) { + releaseaddr = false; +- goto failexitmonitor; ++ goto error; + } + + virDomainAuditDisk(vm, NULL, disk->src, "attach", true); +@@ -382,9 +383,9 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + virObjectUnref(cfg); + return ret; + +- failadddevice: ++ exit_monitor: + orig_err = virSaveLastError(); +- if (qemuMonitorDriveDel(priv->mon, drivealias) < 0) { ++ if (driveAdded && qemuMonitorDriveDel(priv->mon, drivealias) < 0) { + VIR_WARN("Unable to remove drive %s (%s) after failed " + "qemuMonitorAddDevice", drivealias, drivestr); + } +@@ -392,12 +393,9 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + virSetError(orig_err); + virFreeError(orig_err); + } +- +- failadddrive: + if (qemuDomainObjExitMonitor(driver, vm) < 0) + releaseaddr = false; + +- failexitmonitor: + virDomainAuditDisk(vm, NULL, disk->src, "attach", false); + + error: +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Alter-the-qemuDomainGetSecretAESAlias-to-add-new-arg.patch b/SOURCES/libvirt-qemu-Alter-the-qemuDomainGetSecretAESAlias-to-add-new-arg.patch new file mode 100644 index 0000000..9c461b7 --- /dev/null +++ b/SOURCES/libvirt-qemu-Alter-the-qemuDomainGetSecretAESAlias-to-add-new-arg.patch @@ -0,0 +1,169 @@ +From 3d1c9b608003e9b8faf80180530b8073b3337fc8 Mon Sep 17 00:00:00 2001 +Message-Id: <3d1c9b608003e9b8faf80180530b8073b3337fc8@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:59 -0400 +Subject: [PATCH] qemu: Alter the qemuDomainGetSecretAESAlias to add new arg + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Soon we will be adding luks encryption support. Since a volume could require +both a luks secret and a secret to give to the server to use of the device, +alter the alias generation to create a slightly different alias so that +we don't have two objects with the same alias. + +Signed-off-by: John Ferlan +(cherry picked from commit b7b3a51e8ab7c95b7ffab6b8d727338d71c37c55) +--- + src/qemu/qemu_alias.c | 10 ++++++++-- + src/qemu/qemu_alias.h | 3 ++- + src/qemu/qemu_domain.c | 17 ++++++++++------- + src/qemu/qemu_hotplug.c | 3 ++- + 4 files changed, 22 insertions(+), 11 deletions(-) + +diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c +index d624071..51a654a 100644 +--- a/src/qemu/qemu_alias.c ++++ b/src/qemu/qemu_alias.c +@@ -485,13 +485,16 @@ qemuDomainGetMasterKeyAlias(void) + + + /* qemuDomainGetSecretAESAlias: ++ * @srcalias: Source alias used to generate the secret alias ++ * @isLuks: True when we are generating a secret for LUKS encrypt/decrypt + * + * Generate and return an alias for the encrypted secret + * + * Returns NULL or a string containing the alias + */ + char * +-qemuDomainGetSecretAESAlias(const char *srcalias) ++qemuDomainGetSecretAESAlias(const char *srcalias, ++ bool isLuks) + { + char *alias; + +@@ -501,7 +504,10 @@ qemuDomainGetSecretAESAlias(const char *srcalias) + return NULL; + } + +- ignore_value(virAsprintf(&alias, "%s-secret0", srcalias)); ++ if (isLuks) ++ ignore_value(virAsprintf(&alias, "%s-luks-secret0", srcalias)); ++ else ++ ignore_value(virAsprintf(&alias, "%s-secret0", srcalias)); + + return alias; + } +diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h +index e328a9b..d1c6ba8 100644 +--- a/src/qemu/qemu_alias.h ++++ b/src/qemu/qemu_alias.h +@@ -69,6 +69,7 @@ char *qemuAliasFromDisk(const virDomainDiskDef *disk); + + char *qemuDomainGetMasterKeyAlias(void); + +-char *qemuDomainGetSecretAESAlias(const char *srcalias); ++char *qemuDomainGetSecretAESAlias(const char *srcalias, ++ bool isLuks); + + #endif /* __QEMU_ALIAS_H__*/ +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index f298366..27158f4 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -848,6 +848,7 @@ qemuDomainSecretPlainSetup(virConnectPtr conn, + * @secretUsageType: The virSecretUsageType + * @username: username to use for authentication (may be NULL) + * @seclookupdef: Pointer to seclookupdef data ++ * @isLuks: True/False for is for luks (alias generation) + * + * Taking a secinfo, fill in the AES specific information using the + * +@@ -860,7 +861,8 @@ qemuDomainSecretAESSetup(virConnectPtr conn, + const char *srcalias, + virSecretUsageType secretUsageType, + const char *username, +- virSecretLookupTypeDefPtr seclookupdef) ++ virSecretLookupTypeDefPtr seclookupdef, ++ bool isLuks) + { + int ret = -1; + uint8_t *raw_iv = NULL; +@@ -874,7 +876,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn, + if (VIR_STRDUP(secinfo->s.aes.username, username) < 0) + return -1; + +- if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias))) ++ if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks))) + return -1; + + /* Create a random initialization vector */ +@@ -923,6 +925,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn, + * @secretUsageType: The virSecretUsageType + * @username: username to use for authentication (may be NULL) + * @seclookupdef: Pointer to seclookupdef data ++ * @isLuks: True when is luks (generates different alias) + * + * If we have the encryption API present and can support a secret object, then + * build the AES secret; otherwise, build the Plain secret. This is the magic +@@ -938,14 +941,15 @@ qemuDomainSecretSetup(virConnectPtr conn, + const char *srcalias, + virSecretUsageType secretUsageType, + const char *username, +- virSecretLookupTypeDefPtr seclookupdef) ++ virSecretLookupTypeDefPtr seclookupdef, ++ bool isLuks) + { + if (virCryptoHaveCipher(VIR_CRYPTO_CIPHER_AES256CBC) && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) && + secretUsageType == VIR_SECRET_USAGE_TYPE_CEPH) { + if (qemuDomainSecretAESSetup(conn, priv, secinfo, srcalias, + secretUsageType, username, +- seclookupdef) < 0) ++ seclookupdef, isLuks) < 0) + return -1; + } else { + if (qemuDomainSecretPlainSetup(conn, secinfo, secretUsageType, +@@ -1005,7 +1009,6 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + qemuDomainSecretInfoPtr secinfo = NULL; + + if (conn && qemuDomainSecretDiskCapable(src)) { +- + virSecretUsageType secretUsageType = VIR_SECRET_USAGE_TYPE_ISCSI; + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + +@@ -1017,7 +1020,7 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + + if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias, + secretUsageType, src->auth->username, +- &src->auth->seclookupdef) < 0) ++ &src->auth->seclookupdef, false) < 0) + goto error; + + diskPriv->secinfo = secinfo; +@@ -1084,7 +1087,7 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn, + if (qemuDomainSecretSetup(conn, priv, secinfo, hostdev->info->alias, + VIR_SECRET_USAGE_TYPE_ISCSI, + iscsisrc->auth->username, +- &iscsisrc->auth->seclookupdef) < 0) ++ &iscsisrc->auth->seclookupdef, false) < 0) + goto error; + + hostdevPriv->secinfo = secinfo; +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 084443f..9cb1d44 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -2874,7 +2874,8 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) && + qemuDomainSecretDiskCapable(disk->src)) { + +- if (!(objAlias = qemuDomainGetSecretAESAlias(disk->info.alias))) { ++ if (!(objAlias = ++ qemuDomainGetSecretAESAlias(disk->info.alias, false))) { + VIR_FREE(drivestr); + return -1; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Always-set-locked-memory-limit-for-ppc64-domains.patch b/SOURCES/libvirt-qemu-Always-set-locked-memory-limit-for-ppc64-domains.patch deleted file mode 100644 index 1146b8a..0000000 --- a/SOURCES/libvirt-qemu-Always-set-locked-memory-limit-for-ppc64-domains.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 3f49b7d6c486486baabcfa956bea6aa32f133a91 Mon Sep 17 00:00:00 2001 -Message-Id: <3f49b7d6c486486baabcfa956bea6aa32f133a91@dist-git> -From: Andrea Bolognani -Date: Fri, 20 Nov 2015 13:29:15 +0100 -Subject: [PATCH] qemu: Always set locked memory limit for ppc64 domains - -Unlike other architectures, ppc64 domains need to lock memory -even when VFIO is not used. - -Change qemuDomainRequiresMlock() to reflect this fact. - -(cherry picked from commit 16562bbc587add5a03a01c8eb8607c9e05819607) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1283924 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 4615e3e..d0df935 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3551,8 +3551,9 @@ qemuDomainGetMlockLimitBytes(virDomainDefPtr def) - /** - * @def: domain definition - * -- * Returns ture if the locked memory limit needs to be set or updated due to -- * configuration or passthrough devices. -+ * Returns true if the locked memory limit needs to be set or updated because -+ * of domain configuration, VFIO passthrough devices or architecture-specific -+ * requirements. - * */ - bool - qemuDomainRequiresMlock(virDomainDefPtr def) -@@ -3562,6 +3563,10 @@ qemuDomainRequiresMlock(virDomainDefPtr def) - if (def->mem.locked) - return true; - -+ /* ppc64 domains need to lock some memory even when VFIO is not used */ -+ if (ARCH_IS_PPC64(def->os.arch)) -+ return true; -+ - for (i = 0; i < def->nhostdevs; i++) { - virDomainHostdevDefPtr dev = def->hostdevs[i]; - --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Always-update-migration-times-on-destination.patch b/SOURCES/libvirt-qemu-Always-update-migration-times-on-destination.patch deleted file mode 100644 index e32a06e..0000000 --- a/SOURCES/libvirt-qemu-Always-update-migration-times-on-destination.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 779b0c17407ca656c666a0eb6f66d6210bf65eca Mon Sep 17 00:00:00 2001 -Message-Id: <779b0c17407ca656c666a0eb6f66d6210bf65eca@dist-git> -From: Jiri Denemark -Date: Thu, 1 Oct 2015 21:39:35 +0200 -Subject: [PATCH] qemu: Always update migration times on destination - -Even if we are migrating a domain with VIR_MIGRATE_PAUSED flag set, we -should still update the total time of the migration. Updating downtime -doesn't hurt either, even though we don't actually start guest CPUs. - -Signed-off-by: Jiri Denemark -(cherry picked from commit d27c66dbaae33d9b463eab8a8a2b0ad8cebff06a) - -https://bugzilla.redhat.com/show_bug.cgi?id=1265902 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index cb82687..759fd21 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -5735,10 +5735,11 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - } - goto endjob; - } -- if (priv->job.completed) { -- qemuDomainJobInfoUpdateTime(priv->job.completed); -- qemuDomainJobInfoUpdateDowntime(priv->job.completed); -- } -+ } -+ -+ if (priv->job.completed) { -+ qemuDomainJobInfoUpdateTime(priv->job.completed); -+ qemuDomainJobInfoUpdateDowntime(priv->job.completed); - } - - dom = virGetDomain(dconn, vm->def->name, vm->def->uuid); --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Auto-assign-pci-addresses-for-shared-memory-devices.patch b/SOURCES/libvirt-qemu-Auto-assign-pci-addresses-for-shared-memory-devices.patch deleted file mode 100644 index 9bb773d..0000000 --- a/SOURCES/libvirt-qemu-Auto-assign-pci-addresses-for-shared-memory-devices.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 1298c305b6e4dcb364e8944a60bf2f698eb601ca Mon Sep 17 00:00:00 2001 -Message-Id: <1298c305b6e4dcb364e8944a60bf2f698eb601ca@dist-git> -From: Luyao Huang -Date: Thu, 6 Aug 2015 13:09:12 +0200 -Subject: [PATCH] qemu: Auto assign pci addresses for shared memory devices - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1165029 - -Signed-off-by: Luyao Huang -(cherry picked from commit e309ea66580798860154c70f275c56236702c7dc) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 11 +++++++++++ - tests/qemuxml2argvdata/qemuxml2argv-shmem.args | 19 +++++++++++-------- - tests/qemuxml2argvdata/qemuxml2argv-shmem.xml | 1 + - 3 files changed, 23 insertions(+), 8 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index feba308..1e5e244 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -2562,6 +2562,7 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, - flags) < 0) - goto error; - } -+ - /* Further non-primary video cards which have to be qxl type */ - for (i = 1; i < def->nvideos; i++) { - if (def->videos[i]->type != VIR_DOMAIN_VIDEO_TYPE_QXL) { -@@ -2575,6 +2576,16 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, - flags) < 0) - goto error; - } -+ -+ /* Shared Memory */ -+ for (i = 0; i < def->nshmems; i++) { -+ if (def->shmems[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) -+ continue; -+ -+ if (virDomainPCIAddressReserveNextSlot(addrs, -+ &def->shmems[i]->info, flags) < 0) -+ goto error; -+ } - for (i = 0; i < def->ninputs; i++) { - /* Nada - none are PCI based (yet) */ - } -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-shmem.args b/tests/qemuxml2argvdata/qemuxml2argv-shmem.args -index a3d3cc8..7e10fc4 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-shmem.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-shmem.args -@@ -1,16 +1,19 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults \ - -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \ ---device ivshmem,shm=shmem0 \ ---device ivshmem,size=128m,shm=shmem1 \ ---device ivshmem,size=256m,shm=shmem2 \ ---device ivshmem,size=512m,chardev=charshmem3 \ -+-device ivshmem,shm=shmem0,bus=pci.0,addr=0x3 \ -+-device ivshmem,size=128m,shm=shmem1,bus=pci.0,addr=0x5 \ -+-device ivshmem,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \ -+-device ivshmem,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \ - -chardev socket,id=charshmem3,path=/var/lib/libvirt/shmem-shmem3-sock \ ---device ivshmem,size=1024m,chardev=charshmem4 \ -+-device ivshmem,size=1024m,chardev=charshmem4,bus=pci.0,addr=0x7 \ - -chardev socket,id=charshmem4,path=/tmp/shmem4-sock \ ---device ivshmem,size=2048m,chardev=charshmem5,msi=on,ioeventfd=off \ -+-device ivshmem,size=2048m,chardev=charshmem5,\ -+msi=on,ioeventfd=off,bus=pci.0,addr=0x8 \ - -chardev socket,id=charshmem5,path=/tmp/shmem5-sock \ ---device ivshmem,size=4096m,chardev=charshmem6,msi=on,vectors=16 \ -+-device ivshmem,size=4096m,chardev=charshmem6,\ -+msi=on,vectors=16,bus=pci.0,addr=0x9 \ - -chardev socket,id=charshmem6,path=/tmp/shmem6-sock \ ---device ivshmem,size=8192m,chardev=charshmem7,msi=on,vectors=32,ioeventfd=on \ -+-device ivshmem,size=8192m,chardev=charshmem7,\ -+msi=on,vectors=32,ioeventfd=on,bus=pci.0,addr=0xa \ - -chardev socket,id=charshmem7,path=/tmp/shmem7-sock -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-shmem.xml b/tests/qemuxml2argvdata/qemuxml2argv-shmem.xml -index fd79c89..d4b38f9 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-shmem.xml -+++ b/tests/qemuxml2argvdata/qemuxml2argv-shmem.xml -@@ -23,6 +23,7 @@ - - - 256 -+
- - - 512 --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Check-duplicate-WWNs-also-for-hotplugged-disks.patch b/SOURCES/libvirt-qemu-Check-duplicate-WWNs-also-for-hotplugged-disks.patch deleted file mode 100644 index 59e8c2e..0000000 --- a/SOURCES/libvirt-qemu-Check-duplicate-WWNs-also-for-hotplugged-disks.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 7bf87a91878c0a2830be2534430f98527e361cd5 Mon Sep 17 00:00:00 2001 -Message-Id: <7bf87a91878c0a2830be2534430f98527e361cd5@dist-git> -From: Peter Krempa -Date: Fri, 10 Jul 2015 09:20:32 +0200 -Subject: [PATCH] qemu: Check duplicate WWNs also for hotplugged disks - -In commit 714b38cb232bcbbd7487af4c058fa6d0999b3326 I tried to avoid -having two disks with the same WWN in a VM. I forgot to check the -hotplug paths though which make it possible bypass that check. Reinforce -the fix by checking the wwn when attaching the disk. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1208009 -(cherry picked from commit 780fe4e4baf7e2f10f65ba1a34f9274fc547cad2) - -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 37 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 37 insertions(+) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index f3416cf..535701e 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -22130,6 +22130,34 @@ virDomainDeviceInfoCheckBootIndex(virDomainDefPtr def ATTRIBUTE_UNUSED, - return 0; - } - -+ -+/** -+ * virDomainDefGetDiskByWWN: -+ * @def: domain definition -+ * @wwn: wwn of a disk to find -+ * -+ * Returns a disk definition pointer corresponding to the given WWN identifier -+ * or NULL either if @wwn was NULL or if disk with given WWN is not present in -+ * the domain definition. -+ */ -+static virDomainDiskDefPtr -+virDomainDefGetDiskByWWN(virDomainDefPtr def, -+ const char *wwn) -+{ -+ size_t i; -+ -+ if (!wwn) -+ return NULL; -+ -+ for (i = 0; i < def->ndisks; i++) { -+ if (STREQ_NULLABLE(def->disks[i]->wwn, wwn)) -+ return def->disks[i]; -+ } -+ -+ return NULL; -+} -+ -+ - int - virDomainDefCompatibleDevice(virDomainDefPtr def, - virDomainDeviceDefPtr dev, -@@ -22173,6 +22201,15 @@ virDomainDefCompatibleDevice(virDomainDefPtr def, - } - } - -+ if (dev->type == VIR_DOMAIN_DEVICE_DISK) { -+ if (!!virDomainDefGetDiskByWWN(def, dev->data.disk->wwn)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("Domain already has a disk with wwn '%s'"), -+ dev->data.disk->wwn); -+ return -1; -+ } -+ } -+ - return 0; - } - --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Check-for-iotune_max-support-properly.patch b/SOURCES/libvirt-qemu-Check-for-iotune_max-support-properly.patch deleted file mode 100644 index 6b3be5e..0000000 --- a/SOURCES/libvirt-qemu-Check-for-iotune_max-support-properly.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 314408b2a7fea6400ba6d5dda4c6031b7c7bde4e Mon Sep 17 00:00:00 2001 -Message-Id: <314408b2a7fea6400ba6d5dda4c6031b7c7bde4e@dist-git> -From: Martin Kletzander -Date: Tue, 4 Aug 2015 13:11:29 +0200 -Subject: [PATCH] qemu: Check for iotune_max support properly - -Commit d506a51aeb2a7a7b0c963f760e32b94376ea7173 meant to check for -QEMU_CAPS_DRIVE_IOTUNE_MAX, but checked for QEMU_CAPS_DRIVE_IOTUNE -instead. That's clearly visible from the diff, but it got in. Because -of that, we were supplying information unknown for QEMU if it wasn't new -enough and we couldn't even properly handle the error, leading to -"Unexpected error". Also iops_size came at the same time with all the -other "_max" options, so check whether we're not setting that either if -QEMU_CAPS_DRIVE_IOTUNE_MAX is not supported. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1224053 - -Signed-off-by: Martin Kletzander -(cherry picked from commit ba167186cf7753cf662697ab67a4b10e9b3d4096) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index fbe37c2..c59186d 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -17666,7 +17666,8 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, - } - - if (flags & VIR_DOMAIN_AFFECT_LIVE) { -- supportMaxOptions = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DRIVE_IOTUNE); -+ supportMaxOptions = virQEMUCapsGet(priv->qemuCaps, -+ QEMU_CAPS_DRIVE_IOTUNE_MAX); - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DRIVE_IOTUNE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("block I/O throttling not supported with this " -@@ -17674,12 +17675,13 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, - goto endjob; - } - -- if (!supportMaxOptions && (set_iops_max || set_bytes_max)) { -+ if (!supportMaxOptions && -+ (set_iops_max || set_bytes_max || set_size_iops)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("a block I/O throttling parameter is not " - "supported with this QEMU binary")); - goto endjob; -- } -+ } - - if (!(device = qemuDiskPathToAlias(vm, disk, &idx))) - goto endjob; --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Copy-complete-domain-def-in-qemuDomainDefFormatBuf.patch b/SOURCES/libvirt-qemu-Copy-complete-domain-def-in-qemuDomainDefFormatBuf.patch new file mode 100644 index 0000000..9734156 --- /dev/null +++ b/SOURCES/libvirt-qemu-Copy-complete-domain-def-in-qemuDomainDefFormatBuf.patch @@ -0,0 +1,139 @@ +From 83f771b2e5a114d84af3519125408a2da9579391 Mon Sep 17 00:00:00 2001 +Message-Id: <83f771b2e5a114d84af3519125408a2da9579391@dist-git> +From: Jiri Denemark +Date: Fri, 8 Jul 2016 16:44:02 +0200 +Subject: [PATCH] qemu: Copy complete domain def in qemuDomainDefFormatBuf + +Playing directly with our live definition, updating it, and reverting it +back once we are done is very nice and it's quite dangerous too. Let's +just make a copy of the domain definition if needed and do all tricks on +the copy. + +https://bugzilla.redhat.com/show_bug.cgi?id=1320470 + +Signed-off-by: Jiri Denemark +(cherry picked from commit b1305a6b8fcb807296a00458c5495ef321553cd0) +Signed-off-by: Jiri Denemark +--- + src/conf/domain_conf.c | 10 ++++++---- + src/qemu/qemu_domain.c | 44 ++++++++++++++++++++++++-------------------- + 2 files changed, 30 insertions(+), 24 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 78e394d..bb297f6 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -21032,10 +21032,12 @@ virDomainChrSourceDefFormat(virBufferPtr buf, + break; + + case VIR_DOMAIN_CHR_TYPE_UNIX: +- virBufferAsprintf(buf, "data.nix.listen ? "bind" : "connect"); +- virBufferEscapeString(buf, " path='%s'", def->data.nix.path); +- virDomainSourceDefFormatSeclabel(buf, nseclabels, seclabels, flags); ++ if (def->data.nix.path) { ++ virBufferAsprintf(buf, "data.nix.listen ? "bind" : "connect"); ++ virBufferEscapeString(buf, " path='%s'", def->data.nix.path); ++ virDomainSourceDefFormatSeclabel(buf, nseclabels, seclabels, flags); ++ } + break; + + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 2a42b1b..e81e63f 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -3061,19 +3061,25 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver, + virBuffer *buf) + { + int ret = -1; +- virCPUDefPtr cpu = NULL; +- virCPUDefPtr def_cpu = def->cpu; +- virDomainControllerDefPtr *controllers = NULL; +- int ncontrollers = 0; ++ virDomainDefPtr copy = NULL; + virCapsPtr caps = NULL; + + if (!(caps = virQEMUDriverGetCapabilities(driver, false))) + goto cleanup; + ++ if (!(flags & (VIR_DOMAIN_XML_UPDATE_CPU | VIR_DOMAIN_XML_MIGRATABLE))) ++ goto format; ++ ++ if (!(copy = virDomainDefCopy(def, caps, driver->xmlopt, ++ flags & VIR_DOMAIN_XML_MIGRATABLE))) ++ goto cleanup; ++ ++ def = copy; ++ + /* Update guest CPU requirements according to host CPU */ + if ((flags & VIR_DOMAIN_XML_UPDATE_CPU) && +- def_cpu && +- (def_cpu->mode != VIR_CPU_MODE_CUSTOM || def_cpu->model)) { ++ def->cpu && ++ (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) { + if (!caps->host.cpu || + !caps->host.cpu->model) { + virReportError(VIR_ERR_OPERATION_FAILED, +@@ -3081,10 +3087,8 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver, + goto cleanup; + } + +- if (!(cpu = virCPUDefCopy(def_cpu)) || +- cpuUpdate(cpu, caps->host.cpu) < 0) ++ if (cpuUpdate(def->cpu, caps->host.cpu) < 0) + goto cleanup; +- def->cpu = cpu; + } + + if ((flags & VIR_DOMAIN_XML_MIGRATABLE)) { +@@ -3141,10 +3145,11 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver, + } + + if (toremove) { +- controllers = def->controllers; +- ncontrollers = def->ncontrollers; ++ virDomainControllerDefPtr *controllers = def->controllers; ++ int ncontrollers = def->ncontrollers; ++ + if (VIR_ALLOC_N(def->controllers, ncontrollers - toremove) < 0) { +- controllers = NULL; ++ def->controllers = controllers; + goto cleanup; + } + +@@ -3153,23 +3158,22 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver, + if (controllers[i] != usb && controllers[i] != pci) + def->controllers[def->ncontrollers++] = controllers[i]; + } ++ ++ VIR_FREE(controllers); ++ virDomainControllerDefFree(pci); ++ virDomainControllerDefFree(usb); + } + + + } + +- ret = virDomainDefFormatInternal(def, driver->caps, ++ format: ++ ret = virDomainDefFormatInternal(def, caps, + virDomainDefFormatConvertXMLFlags(flags), + buf); + + cleanup: +- def->cpu = def_cpu; +- virCPUDefFree(cpu); +- if (controllers) { +- VIR_FREE(def->controllers); +- def->controllers = controllers; +- def->ncontrollers = ncontrollers; +- } ++ virDomainDefFree(copy); + virObjectUnref(caps); + return ret; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Copy-completed-migration-stats-only-on-success.patch b/SOURCES/libvirt-qemu-Copy-completed-migration-stats-only-on-success.patch deleted file mode 100644 index e00870f..0000000 --- a/SOURCES/libvirt-qemu-Copy-completed-migration-stats-only-on-success.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 7d1f7fce8d06ca2154be5f0a6f9a07bddcfac794 Mon Sep 17 00:00:00 2001 -Message-Id: <7d1f7fce8d06ca2154be5f0a6f9a07bddcfac794@dist-git> -From: Jiri Denemark -Date: Thu, 1 Oct 2015 21:54:38 +0200 -Subject: [PATCH] qemu: Copy completed migration stats only on success - -The destination host gets detailed statistics about the current -migration form the source host via migration cookie and copies them to -the domain object so that they can be queried using -virDomainGetJobStats. However, we should only copy statistics to the -domain object when migration finished successfully. - -Signed-off-by: Jiri Denemark -(cherry picked from commit b106c8b910ec49f1018146dd82b0f93833a66600) - -https://bugzilla.redhat.com/show_bug.cgi?id=1265902 - -Conflicts: - src/qemu/qemu_migration.c -- missing qemuMigrationFinish - refactoring - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 25 ++++++++++++++----------- - 1 file changed, 14 insertions(+), 11 deletions(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 759fd21..e04459d 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -5617,6 +5617,10 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - * object, but if no, clean up the empty qemu process. - */ - if (retcode == 0) { -+ unsigned long long timeReceived = 0; -+ -+ ignore_value(virTimeMillisNow(&timeReceived)); -+ - if (!virDomainObjIsActive(vm) && !(flags & VIR_MIGRATE_OFFLINE)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("guest unexpectedly quit")); -@@ -5624,16 +5628,6 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - goto endjob; - } - -- if (mig->jobInfo) { -- qemuDomainJobInfoPtr jobInfo = mig->jobInfo; -- priv->job.completed = jobInfo; -- mig->jobInfo = NULL; -- if (jobInfo->sent && virTimeMillisNow(&jobInfo->received) == 0) { -- jobInfo->timeDelta = jobInfo->received - jobInfo->sent; -- jobInfo->timeDeltaSet = true; -- } -- } -- - if (!(flags & VIR_MIGRATE_OFFLINE)) { - if (qemuMigrationVPAssociatePortProfiles(vm->def) < 0) { - qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, -@@ -5737,7 +5731,16 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - } - } - -- if (priv->job.completed) { -+ if (mig->jobInfo) { -+ qemuDomainJobInfoPtr jobInfo = mig->jobInfo; -+ priv->job.completed = jobInfo; -+ mig->jobInfo = NULL; -+ -+ if (jobInfo->sent && timeReceived) { -+ jobInfo->timeDelta = timeReceived - jobInfo->sent; -+ jobInfo->received = timeReceived; -+ jobInfo->timeDeltaSet = true; -+ } - qemuDomainJobInfoUpdateTime(priv->job.completed); - qemuDomainJobInfoUpdateDowntime(priv->job.completed); - } --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Disallow-usage-of-luks-encryption-if-aes-secret-not-possible.patch b/SOURCES/libvirt-qemu-Disallow-usage-of-luks-encryption-if-aes-secret-not-possible.patch new file mode 100644 index 0000000..5802e6f --- /dev/null +++ b/SOURCES/libvirt-qemu-Disallow-usage-of-luks-encryption-if-aes-secret-not-possible.patch @@ -0,0 +1,72 @@ +From b3b0863f3274d3de217d006cf03a442a63606271 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:43:04 -0400 +Subject: [PATCH] qemu: Disallow usage of luks encryption if aes secret not + possible + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Resolves a CI test integration failure with a RHEL6/Centos6 environment. + +In order to use a LUKS encrypted device, the design decision was to +generate an encrypted secret based on the master key. However, commit +id 'da86c6c' missed checking for that specifically. + +When qemuDomainSecretSetup was implemented, a design decision was made +to "fall back" to a plain text secret setup if the specific cipher was +not available (e.g. virCryptoHaveCipher(VIR_CRYPTO_CIPHER_AES256CBC)) +as well as the QEMU_CAPS_OBJECT_SECRET. For the luks encryption setup +there is no fall back to the plaintext secret, thus if that gets set +up by qemuDomainSecretSetup, then we need to fail. + +Also, while the qemuxml2argvtest has set the QEMU_CAPS_OBJECT_SECRET +bit, it didn't take into account the second requirement that the +ability to generate the encrypted secret is possible. So modify the +test to not attempt to run the luks-disk if we know we don't have +the encryption algorithm. + +(cherry picked from commit a53349e6c6d3ff051e48b40c94a672168bbc3aac) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_domain.c | 7 +++++++ + tests/qemuxml2argvtest.c | 4 ++++ + 2 files changed, 11 insertions(+) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 26d0d12..158f3ef 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1042,6 +1042,13 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + true) < 0) + goto error; + ++ if (secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("luks encryption requires encrypted secrets " ++ "to be supported")); ++ goto error; ++ } ++ + diskPriv->encinfo = secinfo; + } + +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index eddacf8..f49f9b9 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1379,7 +1379,11 @@ mymain(void) + + DO_TEST("encrypted-disk", NONE); + DO_TEST("encrypted-disk-usage", NONE); ++# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT + DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET); ++# else ++ DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET); ++# endif + + DO_TEST("memtune", NONE); + DO_TEST("memtune-unlimited", NONE); +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Do-not-allow-others-into-per-VM-subdirectories.patch b/SOURCES/libvirt-qemu-Do-not-allow-others-into-per-VM-subdirectories.patch deleted file mode 100644 index c2376cb..0000000 --- a/SOURCES/libvirt-qemu-Do-not-allow-others-into-per-VM-subdirectories.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 1b3b61bc9cd913a2f3fea1ab39ded81c6da2bacd Mon Sep 17 00:00:00 2001 -Message-Id: <1b3b61bc9cd913a2f3fea1ab39ded81c6da2bacd@dist-git> -From: Martin Kletzander -Date: Mon, 14 Sep 2015 10:15:26 +0200 -Subject: [PATCH] qemu: Do not allow others into per-VM subdirectories - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 192a13948905668955ff39e32d4622f8511fadf0) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index d5b0fc0..ee1d6b2 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -4737,7 +4737,7 @@ int qemuProcessStart(virConnectPtr conn, - if (virAsprintf(&tmppath, "%s/domain-%s", cfg->libDir, vm->def->name) < 0) - goto cleanup; - -- if (virFileMakePath(tmppath) < 0) { -+ if (virFileMakePathWithMode(tmppath, 0750) < 0) { - virReportSystemError(errno, _("Cannot create directory '%s'"), tmppath); - goto cleanup; - } -@@ -4752,7 +4752,7 @@ int qemuProcessStart(virConnectPtr conn, - cfg->channelTargetDir, vm->def->name) < 0) - goto cleanup; - -- if (virFileMakePath(tmppath) < 0) { -+ if (virFileMakePathWithMode(tmppath, 0750) < 0) { - virReportSystemError(errno, _("Cannot create directory '%s'"), tmppath); - goto cleanup; - } --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Do-not-reset-labels-when-migration-fails.patch b/SOURCES/libvirt-qemu-Do-not-reset-labels-when-migration-fails.patch deleted file mode 100644 index 7697d8f..0000000 --- a/SOURCES/libvirt-qemu-Do-not-reset-labels-when-migration-fails.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 73cc6287624a227f16c27e138258b5199c8687a0 Mon Sep 17 00:00:00 2001 -Message-Id: <73cc6287624a227f16c27e138258b5199c8687a0@dist-git> -From: Jiri Denemark -Date: Thu, 30 Jul 2015 16:42:43 +0200 -Subject: [PATCH] qemu: Do not reset labels when migration fails - -When stopping a domain on the destination host after a failed migration, -we need to avoid reseting security labels since the domain is still -running on the source host. While we were correctly doing so in some -cases, there were still some paths which did this wrong. - -https://bugzilla.redhat.com/show_bug.cgi?id=1242904 - -Signed-off-by: Jiri Denemark -(cherry picked from commit e8d0166e1d27c18aacea4b1316760fad4106e1c7) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 5 ++++- - src/qemu/qemu_migration.c | 3 ++- - src/qemu/qemu_process.c | 19 ++++++++++++++----- - 3 files changed, 20 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 204ed72..fbe37c2 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -2199,6 +2199,7 @@ qemuDomainDestroyFlags(virDomainPtr dom, - int ret = -1; - virObjectEventPtr event = NULL; - qemuDomainObjPrivatePtr priv; -+ unsigned int stopFlags = 0; - - virCheckFlags(VIR_DOMAIN_DESTROY_GRACEFUL, -1); - -@@ -2212,6 +2213,8 @@ qemuDomainDestroyFlags(virDomainPtr dom, - - qemuDomainSetFakeReboot(driver, vm, false); - -+ if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) -+ stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED; - - /* We need to prevent monitor EOF callback from doing our work (and sending - * misleading events) while the vm is unlocked inside BeginJob/ProcessKill API -@@ -2246,7 +2249,7 @@ qemuDomainDestroyFlags(virDomainPtr dom, - goto endjob; - } - -- qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED, 0); -+ qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED, stopFlags); - event = virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_STOPPED, - VIR_DOMAIN_EVENT_STOPPED_DESTROYED); -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 6386744..16bb1af 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -3474,7 +3474,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, - - stop: - virDomainAuditStart(vm, "migrated", false); -- qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, 0); -+ qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, -+ VIR_QEMU_PROCESS_STOP_MIGRATED); - - endjob: - qemuMigrationJobFinish(driver, vm); -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 31315b1..f41fd9d 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -285,6 +285,7 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - int eventReason = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN; - int stopReason = VIR_DOMAIN_SHUTOFF_SHUTDOWN; - const char *auditReason = "shutdown"; -+ unsigned int stopFlags = 0; - - VIR_DEBUG("Received EOF on %p '%s'", vm, vm->def->name); - -@@ -310,14 +311,16 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - auditReason = "failed"; - } - -- if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) -+ if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) { -+ stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED; - qemuMigrationErrorSave(driver, vm->def->name, - qemuMonitorLastError(priv->mon)); -+ } - - event = virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_STOPPED, - eventReason); -- qemuProcessStop(driver, vm, stopReason, 0); -+ qemuProcessStop(driver, vm, stopReason, stopFlags); - virDomainAuditStop(vm, auditReason); - - if (!vm->persistent) { -@@ -3732,10 +3735,13 @@ qemuProcessReconnect(void *opaque) - virQEMUDriverConfigPtr cfg; - size_t i; - int ret; -+ unsigned int stopFlags = 0; - - VIR_FREE(data); - - qemuDomainObjRestoreJob(obj, &oldjob); -+ if (oldjob.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) -+ stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED; - - cfg = virQEMUDriverGetConfig(driver); - priv = obj->privateData; -@@ -3916,7 +3922,7 @@ qemuProcessReconnect(void *opaque) - * really is and FAILED means "failed to start" */ - state = VIR_DOMAIN_SHUTOFF_UNKNOWN; - } -- qemuProcessStop(driver, obj, state, 0); -+ qemuProcessStop(driver, obj, state, stopFlags); - } - - if (!obj->persistent) -@@ -5692,9 +5698,13 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, - virQEMUDriverPtr driver = opaque; - qemuDomainObjPrivatePtr priv = dom->privateData; - virObjectEventPtr event = NULL; -+ unsigned int stopFlags = 0; - - VIR_DEBUG("vm=%s, conn=%p", dom->def->name, conn); - -+ if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) -+ stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED; -+ - if (priv->job.asyncJob) { - VIR_DEBUG("vm=%s has long-term job active, cancelling", - dom->def->name); -@@ -5707,8 +5717,7 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, - - VIR_DEBUG("Killing domain"); - -- qemuProcessStop(driver, dom, VIR_DOMAIN_SHUTOFF_DESTROYED, -- VIR_QEMU_PROCESS_STOP_MIGRATED); -+ qemuProcessStop(driver, dom, VIR_DOMAIN_SHUTOFF_DESTROYED, stopFlags); - - virDomainAuditStop(dom, "destroyed"); - event = virDomainEventLifecycleNewFromObj(dom, --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Don-t-report-false-error-from-MigrateFinish.patch b/SOURCES/libvirt-qemu-Don-t-report-false-error-from-MigrateFinish.patch deleted file mode 100644 index 2c4d9be..0000000 --- a/SOURCES/libvirt-qemu-Don-t-report-false-error-from-MigrateFinish.patch +++ /dev/null @@ -1,79 +0,0 @@ -From b70bc3fb7517fe18b7ef6d2c3801c3b217f977bb Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Thu, 2 Jul 2015 22:32:54 +0200 -Subject: [PATCH] qemu: Don't report false error from MigrateFinish - -virDomainMigrateFinish* APIs were unfortunately designed to return the -pointer to the domain on destination and NULL on error. This looks OK in -normal cases but the same API is also called when we know migration -failed and thus we expect Finish to return NULL even if it actually did -all it was supposed to do without any error. The call is defined to -return nonnull domain pointer over RPC, which means returning NULL will -always result in an error being send. If this was not in fact an error, -the API itself wouldn't set anything to the thread local virError, which -makes the RPC layer come up with it's own "Library function returned -error but did not set virError" error. - -This is quite confusing and also hard to detect by the caller. This -patch adds a special error code which can be used to check that Finish -successfully aborted migration. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 44c42b564dc61ddc8fdfc5b6ca4ca969bcffc7d8) - -https://bugzilla.redhat.com/show_bug.cgi?id=1090093 - -Signed-off-by: Jiri Denemark ---- - include/libvirt/virterror.h | 1 + - src/qemu/qemu_migration.c | 6 ++++++ - src/util/virerror.c | 3 +++ - 3 files changed, 10 insertions(+) - -diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h -index 6325030..f716cb9 100644 ---- a/include/libvirt/virterror.h -+++ b/include/libvirt/virterror.h -@@ -307,6 +307,7 @@ typedef enum { - VIR_ERR_CPU_INCOMPATIBLE = 91, /* given CPU is incompatible with host - CPU*/ - VIR_ERR_XML_INVALID_SCHEMA = 92, /* XML document doesn't validate against schema */ -+ VIR_ERR_MIGRATE_FINISH_OK = 93, /* Finish API succeeded but it is expected to return NULL */ - } virErrorNumber; - - /** -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 58874ee..a9cbada 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -5751,6 +5751,12 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - } - virObjectUnref(caps); - virObjectUnref(cfg); -+ -+ /* Set a special error if Finish is expected to return NULL as a result of -+ * successful call with retcode != 0 -+ */ -+ if (retcode != 0 && !dom && !virGetLastError()) -+ virReportError(VIR_ERR_MIGRATE_FINISH_OK, NULL); - return dom; - } - -diff --git a/src/util/virerror.c b/src/util/virerror.c -index 60b2e79..6dc05f4 100644 ---- a/src/util/virerror.c -+++ b/src/util/virerror.c -@@ -1369,6 +1369,9 @@ virErrorMsg(virErrorNumber error, const char *info) - else - errmsg = _("XML document failed to validate against schema: %s"); - break; -+ case VIR_ERR_MIGRATE_FINISH_OK: -+ errmsg = _("migration successfully aborted"); -+ break; - } - return errmsg; - } --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Don-t-use-query-migrate-on-destination.patch b/SOURCES/libvirt-qemu-Don-t-use-query-migrate-on-destination.patch new file mode 100644 index 0000000..4fa8b91 --- /dev/null +++ b/SOURCES/libvirt-qemu-Don-t-use-query-migrate-on-destination.patch @@ -0,0 +1,129 @@ +From 9e01d644cf472248e05cb6ac98271b1af6722f28 Mon Sep 17 00:00:00 2001 +Message-Id: <9e01d644cf472248e05cb6ac98271b1af6722f28@dist-git> +From: Jiri Denemark +Date: Mon, 12 Sep 2016 10:24:21 +0200 +Subject: [PATCH] qemu: Don't use query-migrate on destination + +When migration fails, we need to poke QEMU monitor to check for a reason +of the failure. We did this using query-migrate QMP command, which is +not supposed to return any meaningful result on the destination side. +Thus if the monitor was still functional when we detected the migration +failure, parsing the answer from query-migrate always failed with the +following error message: + + "info migration reply was missing return status" + +This irrelevant message was then used as the reason for the migration +failure replacing any message we might have had. + +Let's use harmless query-status for poking the monitor to make sure we +only get an error if the monitor connection is broken. + +https://bugzilla.redhat.com/show_bug.cgi?id=1374613 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 56258a388fbb1d44ef6d6e59c7a0795f1fae53d0) +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_domain.c | 20 ++++++++++++++++++++ + src/qemu/qemu_domain.h | 4 ++++ + src/qemu/qemu_migration.c | 6 +----- + src/qemu/qemu_monitor.c | 8 ++++++++ + src/qemu/qemu_monitor.h | 1 + + 5 files changed, 34 insertions(+), 5 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 8eb6e51..989baa5 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -6057,3 +6057,23 @@ qemuDomainVcpuPersistOrder(virDomainDefPtr def) + } + } + } ++ ++ ++int ++qemuDomainCheckMonitor(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ qemuDomainAsyncJob asyncJob) ++{ ++ qemuDomainObjPrivatePtr priv = vm->privateData; ++ int ret; ++ ++ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) ++ return -1; ++ ++ ret = qemuMonitorCheck(priv->mon); ++ ++ if (qemuDomainObjExitMonitor(driver, vm) < 0) ++ return -1; ++ ++ return ret; ++} +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index cc7bd51..f94bfc9 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -730,4 +730,8 @@ bool qemuDomainVcpuHotplugIsInOrder(virDomainDefPtr def) + void qemuDomainVcpuPersistOrder(virDomainDefPtr def) + ATTRIBUTE_NONNULL(1); + ++int qemuDomainCheckMonitor(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ qemuDomainAsyncJob asyncJob); ++ + #endif /* __QEMU_DOMAIN_H__ */ +diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c +index 537bfeb..7426bfd 100644 +--- a/src/qemu/qemu_migration.c ++++ b/src/qemu/qemu_migration.c +@@ -6212,14 +6212,10 @@ qemuMigrationFinish(virQEMUDriverPtr driver, + } + + if (retcode != 0) { +- qemuDomainJobInfo info; +- + /* Check for a possible error on the monitor in case Finish was called + * earlier than monitor EOF handler got a chance to process the error + */ +- qemuMigrationFetchJobStatus(driver, vm, +- QEMU_ASYNC_JOB_MIGRATION_IN, +- &info); ++ qemuDomainCheckMonitor(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN); + goto endjob; + } + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 1f633fc..699dd7d 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1612,6 +1612,14 @@ qemuMonitorStopCPUs(qemuMonitorPtr mon) + + + int ++qemuMonitorCheck(qemuMonitorPtr mon) ++{ ++ bool running; ++ return qemuMonitorGetStatus(mon, &running, NULL); ++} ++ ++ ++int + qemuMonitorGetStatus(qemuMonitorPtr mon, + bool *running, + virDomainPausedReason *reason) +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index d07e60c..09c404a 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -382,6 +382,7 @@ typedef enum { + VIR_ENUM_DECL(qemuMonitorVMStatus) + int qemuMonitorVMStatusToPausedReason(const char *status); + ++int qemuMonitorCheck(qemuMonitorPtr mon); + int qemuMonitorGetStatus(qemuMonitorPtr mon, + bool *running, + virDomainPausedReason *reason) +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Drop-LFs-at-the-end-of-error-from-QEMU-log.patch b/SOURCES/libvirt-qemu-Drop-LFs-at-the-end-of-error-from-QEMU-log.patch deleted file mode 100644 index 7205b89..0000000 --- a/SOURCES/libvirt-qemu-Drop-LFs-at-the-end-of-error-from-QEMU-log.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 4b79d32a523e7ce5dc0e1e0123e74a2ea1b6ffc5 Mon Sep 17 00:00:00 2001 -Message-Id: <4b79d32a523e7ce5dc0e1e0123e74a2ea1b6ffc5@dist-git> -From: Jiri Denemark -Date: Fri, 3 Jul 2015 19:35:06 +0200 -Subject: [PATCH] qemu: Drop LFs at the end of error from QEMU log - -Libvirt's error messages do not end with a LF. However, when reading the -error from QEMU log, we would read the LF from the log and keep it in -the message. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 04d5fb2e0a92f78eca61de59971eba7fb36c6c1d) - -https://bugzilla.redhat.com/show_bug.cgi?id=1090093 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_monitor.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c -index d7d211e..dabe8e2 100644 ---- a/src/qemu/qemu_monitor.c -+++ b/src/qemu/qemu_monitor.c -@@ -407,6 +407,9 @@ qemuMonitorGetErrorFromLog(qemuMonitorPtr mon) - if ((len = qemuProcessReadLog(mon->logfd, logbuf, 4096 - 1, 0, true)) <= 0) - goto error; - -+ while (len > 0 && logbuf[len - 1] == '\n') -+ logbuf[--len] = '\0'; -+ - cleanup: - errno = orig_errno; - VIR_FORCE_CLOSE(mon->logfd); --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Drop-default-channel-path-during-migration.patch b/SOURCES/libvirt-qemu-Drop-default-channel-path-during-migration.patch new file mode 100644 index 0000000..1979241 --- /dev/null +++ b/SOURCES/libvirt-qemu-Drop-default-channel-path-during-migration.patch @@ -0,0 +1,101 @@ +From 4fc22ae3f2a6894e26e996918d48e8cb8b4ca591 Mon Sep 17 00:00:00 2001 +Message-Id: <4fc22ae3f2a6894e26e996918d48e8cb8b4ca591@dist-git> +From: Jiri Denemark +Date: Fri, 8 Jul 2016 17:25:03 +0200 +Subject: [PATCH] qemu: Drop default channel path during migration + +Migration to an older libvirt (pre v1.3.0-175-g7140807) is broken +because older versions of libvirt generated different channel paths and +they didn't drop the default paths when parsing domain XMLs. We'd get +such a nice error message: + + internal error: process exited while connecting to monitor: + 2016-07-08T15:28:02.665706Z qemu-kvm: -chardev socket, + id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/ + domain-3-nest/org.qemu.guest_agent.0,server,nowait: Failed to bind + socket to /var/lib/libvirt/qemu/channel/target/domain-3-nest/ + org.qemu.guest_agent.0: No such file or directory + +That said, we should not even format the default paths when generating a +migratable XML. + +https://bugzilla.redhat.com/show_bug.cgi?id=1320470 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 08d566a0cf7ed052b6ab3c9bd93f04156999d80b) +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_domain.c | 43 +++++++++++++++++++++++++++---------------- + 1 file changed, 27 insertions(+), 16 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index e81e63f..5b4d7a3 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -2254,6 +2254,29 @@ qemuDomainDefaultNetModel(const virDomainDef *def, + return "rtl8139"; + } + ++ ++/* ++ * Clear auto generated unix socket path, i.e., the one which starts with our ++ * channel directory. ++ */ ++static void ++qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr, ++ virQEMUDriverPtr driver) ++{ ++ virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); ++ ++ if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && ++ chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && ++ chr->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && ++ chr->source.data.nix.path && ++ STRPREFIX(chr->source.data.nix.path, cfg->channelTargetDir)) { ++ VIR_FREE(chr->source.data.nix.path); ++ } ++ ++ virObjectUnref(cfg); ++} ++ ++ + static int + qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, + const virDomainDef *def, +@@ -2335,21 +2358,8 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, + + /* clear auto generated unix socket path for inactive definitions */ + if ((parseFlags & VIR_DOMAIN_DEF_PARSE_INACTIVE) && +- dev->type == VIR_DOMAIN_DEVICE_CHR && +- dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && +- dev->data.chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && +- dev->data.chr->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && +- dev->data.chr->source.data.nix.path && +- STRPREFIX(dev->data.chr->source.data.nix.path, cfg->channelTargetDir)) { +- /* +- * If the address is generated by us (starts with our +- * channel dir), we should not keep it in the persistent +- * XML. If libvirt is the one who generated it, users +- * shouldn't care about that. If they do, they are +- * supposed to set it themselves. +- */ +- VIR_FREE(dev->data.chr->source.data.nix.path); +- } ++ dev->type == VIR_DOMAIN_DEVICE_CHR) ++ qemuDomainChrDefDropDefaultPath(dev->data.chr, driver); + + /* forbid capabilities mode hostdev in this kind of hypervisor */ + if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV && +@@ -3164,7 +3174,8 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver, + virDomainControllerDefFree(usb); + } + +- ++ for (i = 0; i < def->nchannels; i++) ++ qemuDomainChrDefDropDefaultPath(def->channels[i], driver); + } + + format: +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Drop-useless-SPICE-migration-code.patch b/SOURCES/libvirt-qemu-Drop-useless-SPICE-migration-code.patch new file mode 100644 index 0000000..3303dc8 --- /dev/null +++ b/SOURCES/libvirt-qemu-Drop-useless-SPICE-migration-code.patch @@ -0,0 +1,49 @@ +From 4dffbf5c8beda557fd741c01287655e3a476f5d6 Mon Sep 17 00:00:00 2001 +Message-Id: <4dffbf5c8beda557fd741c01287655e3a476f5d6@dist-git> +From: Jiri Denemark +Date: Wed, 29 Jun 2016 15:01:17 +0200 +Subject: [PATCH] qemu: Drop useless SPICE migration code + +The spiceMigration flag will never be true if there is no SPICE graphics +configured for the domain. + +https://bugzilla.redhat.com/show_bug.cgi?id=1151723 + +Signed-off-by: Jiri Denemark +(cherry picked from commit f34b981e403ce7abf41c0047e1b5610e1f5269db) +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_migration.c | 12 ------------ + 1 file changed, 12 deletions(-) + +diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c +index 6a683f7..0b1770b 100644 +--- a/src/qemu/qemu_migration.c ++++ b/src/qemu/qemu_migration.c +@@ -2522,23 +2522,11 @@ static int + qemuMigrationWaitForSpice(virDomainObjPtr vm) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- bool wait_for_spice = false; +- size_t i = 0; + + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SEAMLESS_MIGRATION) || + !priv->job.spiceMigration) + return 0; + +- for (i = 0; i < vm->def->ngraphics; i++) { +- if (vm->def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { +- wait_for_spice = true; +- break; +- } +- } +- +- if (!wait_for_spice) +- return 0; +- + VIR_DEBUG("Waiting for SPICE to finish migration"); + while (!priv->job.spiceMigrated && !priv->job.abortJob) { + if (virDomainObjWait(vm) < 0) +-- +2.9.0 + diff --git a/SOURCES/libvirt-qemu-Emit-correct-audit-message-for-memory-hot-plug.patch b/SOURCES/libvirt-qemu-Emit-correct-audit-message-for-memory-hot-plug.patch deleted file mode 100644 index d67587b..0000000 --- a/SOURCES/libvirt-qemu-Emit-correct-audit-message-for-memory-hot-plug.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 5d51d05823e8cb75b452f86c854d0d404d21503e Mon Sep 17 00:00:00 2001 -Message-Id: <5d51d05823e8cb75b452f86c854d0d404d21503e@dist-git> -From: Luyao Huang -Date: Thu, 12 Nov 2015 08:40:41 +0100 -Subject: [PATCH] qemu: Emit correct audit message for memory hot plug - -https://bugzilla.redhat.com/show_bug.cgi?id=1280420 -https://bugzilla.redhat.com/show_bug.cgi?id=1226234#c3 - -Prior to this patch, after successfully hot plugging memory -the audit log indicated that the update failed, e.g.: - -type=VIRT_RESOURCE ... old-mem=1024000 new-mem=1548288 \ -exe="/usr/sbin/libvirtd" hostname=? addr=? terminal=pts/2 res=failed - -This patch will adjust where virDomainAuditMemory is called to -ensure the proper 'ret' value is used based on success or failure. - -Additionally, the audit message should include the size of the -memory we were attempting to change to rather than the current -actual size. On failure to add, the message showed the same value -for old-mem and new-mem. - -In order to do this, introduce a 'newmem' local which will compute -the new size based on the oldmem size plus the size of memory we -are about to add. NB: This would be the same as calling the -virDomainDefGetMemoryActual again on success, but avoids the -overhead of recalculating. Plus cur_balloon is already adjusted -by the same value, so this follows that. - -Signed-off-by: Luyao Huang -(cherry picked from commit cb1fbda4a1b23581ed9e305a48b0376633d5ff4a) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_hotplug.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index aa1fb31..bd96abf 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -1774,6 +1774,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - qemuDomainObjPrivatePtr priv = vm->privateData; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - unsigned long long oldmem = virDomainDefGetMemoryActual(vm->def); -+ unsigned long long newmem = oldmem + mem->size; - char *devstr = NULL; - char *objalias = NULL; - const char *backendType; -@@ -1829,7 +1830,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - if (qemuDomainObjExitMonitor(driver, vm) < 0) { - /* we shouldn't touch mem now, as the def might be freed */ - mem = NULL; -- goto cleanup; -+ goto audit; - } - - event = virDomainEventDeviceAddedNewFromObj(vm, objalias); -@@ -1840,9 +1841,6 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - if (fix_balloon) - vm->def->mem.cur_balloon += mem->size; - -- virDomainAuditMemory(vm, oldmem, virDomainDefGetMemoryActual(vm->def), -- "update", ret == 0); -- - /* mem is consumed by vm->def */ - mem = NULL; - -@@ -1852,6 +1850,8 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - - ret = 0; - -+ audit: -+ virDomainAuditMemory(vm, oldmem, newmem, "update", ret == 0); - cleanup: - virObjectUnref(cfg); - VIR_FREE(devstr); -@@ -1862,7 +1862,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - removedef: - if (qemuDomainObjExitMonitor(driver, vm) < 0) { - mem = NULL; -- goto cleanup; -+ goto audit; - } - - if ((id = virDomainMemoryFindByDef(vm->def, mem)) >= 0) -@@ -1870,7 +1870,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - else - mem = NULL; - -- goto cleanup; -+ goto audit; - } - - --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Emit-correct-audit-message-for-memory-hot-unplug.patch b/SOURCES/libvirt-qemu-Emit-correct-audit-message-for-memory-hot-unplug.patch deleted file mode 100644 index 8eea993..0000000 --- a/SOURCES/libvirt-qemu-Emit-correct-audit-message-for-memory-hot-unplug.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 95b3838c5ea2c34dbb400979f69eb50114feb72f Mon Sep 17 00:00:00 2001 -Message-Id: <95b3838c5ea2c34dbb400979f69eb50114feb72f@dist-git> -From: Luyao Huang -Date: Thu, 12 Nov 2015 08:40:40 +0100 -Subject: [PATCH] qemu: Emit correct audit message for memory hot unplug - -https://bugzilla.redhat.com/show_bug.cgi?id=1280420 -https://bugzilla.redhat.com/show_bug.cgi?id=1226234#c3 - -If the qemu monitor fails to remove the memory from the guest for -any reason, the auditlog message will incorrectly use the current -actual memory (via virDomainDefGetMemoryActual) instead of the -value we were attempting to reduce to. The result is the 'new-mem' -and 'old-mem' values for the auditlog message would be identical. - -This patch creates a local 'newmem' which accounts for the current -memory size minus the memory which is being removed. NB, for the -success case this results in the same value that would be returned -by virDomainDefGetMemoryActual without the need to do the math. This -follows the existing code which would subtract the size for cur_balloon. - -Signed-off-by: Luyao Huang -(cherry picked from commit 8f8031df1998725ac34a9a3138705c4f7cdf0488) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_hotplug.c | 23 +++++++++++------------ - 1 file changed, 11 insertions(+), 12 deletions(-) - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index f702c9f..aa1fb31 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -2933,11 +2933,11 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, - { - qemuDomainObjPrivatePtr priv = vm->privateData; - unsigned long long oldmem = virDomainDefGetMemoryActual(vm->def); -+ unsigned long long newmem = oldmem - mem->size; - virObjectEventPtr event; - char *backendAlias = NULL; - int rc; - int idx; -- int ret = -1; - - VIR_DEBUG("Removing memory device %s from domain %p %s", - mem->info.alias, vm, vm->def->name); -@@ -2946,12 +2946,18 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, - qemuDomainEventQueue(driver, event); - - if (virAsprintf(&backendAlias, "mem%s", mem->info.alias) < 0) -- goto cleanup; -+ return -1; - - qemuDomainObjEnterMonitor(driver, vm); - rc = qemuMonitorDelObject(priv->mon, backendAlias); -- if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) -- goto cleanup; -+ if (qemuDomainObjExitMonitor(driver, vm) < 0) -+ rc = -1; -+ -+ VIR_FREE(backendAlias); -+ -+ virDomainAuditMemory(vm, oldmem, newmem, "update", rc == 0); -+ if (rc < 0) -+ return -1; - - vm->def->mem.cur_balloon -= mem->size; - -@@ -2959,14 +2965,7 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, - virDomainMemoryRemove(vm->def, idx); - - virDomainMemoryDefFree(mem); -- ret = 0; -- -- cleanup: -- virDomainAuditMemory(vm, oldmem, virDomainDefGetMemoryActual(vm->def), -- "update", ret == 0); -- -- VIR_FREE(backendAlias); -- return ret; -+ return 0; - } - - --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Enable-ioeventfd-usage-for-virtio-scsi-controllers.patch b/SOURCES/libvirt-qemu-Enable-ioeventfd-usage-for-virtio-scsi-controllers.patch deleted file mode 100644 index bd0860f..0000000 --- a/SOURCES/libvirt-qemu-Enable-ioeventfd-usage-for-virtio-scsi-controllers.patch +++ /dev/null @@ -1,76 +0,0 @@ -From eb34bc3c4d9a9db2785d56ff30f6d7ca86663cb9 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Thu, 3 Sep 2015 15:55:44 +0200 -Subject: [PATCH] qemu: Enable ioeventfd usage for virtio-scsi controllers - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1150484 - -Signed-off-by: Martin Kletzander -(cherry picked from commit cf0404455cecb47ddbfa3266eea6b66f8540facd) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 7 +++++++ - .../qemuxml2argv-disk-virtio-scsi-ioeventfd.args | 9 +++++++++ - tests/qemuxml2argvtest.c | 3 +++ - 3 files changed, 19 insertions(+) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index aebaf35..f3e45a5 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -4509,6 +4509,11 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, - _("'max_sectors' is only supported by virtio-scsi controller")); - return NULL; - } -+ if (def->ioeventfd) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("'ioeventfd' is only supported by virtio-scsi controller")); -+ return NULL; -+ } - } - - switch (def->type) { -@@ -4654,6 +4659,8 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, - if (def->max_sectors) - virBufferAsprintf(&buf, ",max_sectors=%u", def->max_sectors); - -+ qemuBuildIoEventFdStr(&buf, def->ioeventfd, qemuCaps); -+ - if (qemuBuildDeviceAddressStr(&buf, domainDef, &def->info, qemuCaps) < 0) - goto error; - -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args -new file mode 100644 -index 0000000..1c53189 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args -@@ -0,0 +1,9 @@ -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ -+/usr/bin/qemu -S -M pc -m 214 -smp 8 -nographic -nodefconfig -nodefaults \ -+-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \ -+-device virtio-scsi-pci,id=scsi0,ioeventfd=on,bus=pci.0,addr=0x3 \ -+-usb \ -+-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-scsi0-0-0-0 \ -+-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\ -+drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \ -+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c -index c2657d7..0dd1b9a 100644 ---- a/tests/qemuxml2argvtest.c -+++ b/tests/qemuxml2argvtest.c -@@ -877,6 +877,9 @@ mymain(void) - DO_TEST("disk-virtio-scsi-max_sectors", - QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, - QEMU_CAPS_VIRTIO_SCSI); -+ DO_TEST("disk-virtio-scsi-ioeventfd", -+ QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, -+ QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI); - DO_TEST("disk-scsi-megasas", - QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, - QEMU_CAPS_SCSI_MEGASAS); --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Enable-migration-events-on-QMP-monitor.patch b/SOURCES/libvirt-qemu-Enable-migration-events-on-QMP-monitor.patch deleted file mode 100644 index ce5892f..0000000 --- a/SOURCES/libvirt-qemu-Enable-migration-events-on-QMP-monitor.patch +++ /dev/null @@ -1,114 +0,0 @@ -From ddad58d06d082ce9522de4139f3768e02de39309 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Tue, 7 Jul 2015 18:17:25 +0200 -Subject: [PATCH] qemu: Enable migration events on QMP monitor - -Even if QEMU supports migration events it doesn't send them by default. -We have to enable them by calling migrate-set-capabilities. Let's enable -migration events everytime we can and clear QEMU_CAPS_MIGRATION_EVENT in -case migrate-set-capabilities does not support events. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 3df4d2a45aaafd0fe2191c648c83a609726638f7) - -https://bugzilla.redhat.com/show_bug.cgi?id=1212077 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_monitor.c | 2 +- - src/qemu/qemu_monitor.h | 1 + - src/qemu/qemu_process.c | 36 ++++++++++++++++++++++++------------ - 3 files changed, 26 insertions(+), 13 deletions(-) - -diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c -index dd742cf..d7d211e 100644 ---- a/src/qemu/qemu_monitor.c -+++ b/src/qemu/qemu_monitor.c -@@ -163,7 +163,7 @@ VIR_ENUM_IMPL(qemuMonitorMigrationStatus, - - VIR_ENUM_IMPL(qemuMonitorMigrationCaps, - QEMU_MONITOR_MIGRATION_CAPS_LAST, -- "xbzrle", "auto-converge", "rdma-pin-all") -+ "xbzrle", "auto-converge", "rdma-pin-all", "events") - - VIR_ENUM_IMPL(qemuMonitorVMStatus, - QEMU_MONITOR_VM_STATUS_LAST, -diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h -index d2b2f94..2ceba28 100644 ---- a/src/qemu/qemu_monitor.h -+++ b/src/qemu/qemu_monitor.h -@@ -512,6 +512,7 @@ typedef enum { - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE, - QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL, -+ QEMU_MONITOR_MIGRATION_CAPS_EVENTS, - - QEMU_MONITOR_MIGRATION_CAPS_LAST - } qemuMonitorMigrationCaps; -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index ba84182..1d223d3 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -1546,7 +1546,7 @@ qemuConnectMonitor(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - vm->def) < 0) { - VIR_ERROR(_("Failed to set security context for monitor for %s"), - vm->def->name); -- goto error; -+ return -1; - } - - /* Hold an extra reference because we can't allow 'vm' to be -@@ -1578,26 +1578,38 @@ qemuConnectMonitor(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - if (virSecurityManagerClearSocketLabel(driver->securityManager, vm->def) < 0) { - VIR_ERROR(_("Failed to clear security context for monitor for %s"), - vm->def->name); -- goto error; -+ return -1; - } - - if (priv->mon == NULL) { - VIR_INFO("Failed to connect monitor for %s", vm->def->name); -- goto error; -+ return -1; - } - - - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) -- goto error; -- ret = qemuMonitorSetCapabilities(priv->mon); -- if (ret == 0 && -- virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MONITOR_JSON)) -- ret = virQEMUCapsProbeQMP(priv->qemuCaps, priv->mon); -+ return -1; -+ -+ if (qemuMonitorSetCapabilities(priv->mon) < 0) -+ goto cleanup; -+ -+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MONITOR_JSON) && -+ virQEMUCapsProbeQMP(priv->qemuCaps, priv->mon) < 0) -+ goto cleanup; -+ -+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT) && -+ qemuMonitorSetMigrationCapability(priv->mon, -+ QEMU_MONITOR_MIGRATION_CAPS_EVENTS, -+ true) < 0) { -+ VIR_DEBUG("Cannot enable migration events; clearing capability"); -+ virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); -+ } -+ -+ ret = 0; -+ -+ cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) -- return -1; -- -- error: -- -+ ret = -1; - return ret; - } - --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Enable-secure-boot.patch b/SOURCES/libvirt-qemu-Enable-secure-boot.patch new file mode 100644 index 0000000..362fa1a --- /dev/null +++ b/SOURCES/libvirt-qemu-Enable-secure-boot.patch @@ -0,0 +1,151 @@ +From 43382d91d15bf35798590ce786c2ae6a0d0bae5c Mon Sep 17 00:00:00 2001 +Message-Id: <43382d91d15bf35798590ce786c2ae6a0d0bae5c@dist-git> +From: Michal Privoznik +Date: Fri, 5 Aug 2016 14:35:27 +0200 +Subject: [PATCH] qemu: Enable secure boot + +https://bugzilla.redhat.com/show_bug.cgi?id=1304483 + +In qemu, enabling this feature boils down to adding the following +onto the command line: + + -global driver=cfi.pflash01,property=secure,value=on + +However, there are some constraints resulting from the +implementation. For instance, System Management Mode (SMM) is +required to be enabled, the machine type must be q35-2.4 or +later, and the guest should be x86_64. While technically it is +possible to have 32 bit guests with secure boot, some non-trivial +CPU flags tuning is required (for instance lm and nx flags must +be prohibited). Given complexity of our CPU driver, this is not +trivial. Therefore I've chosen to forbid 32 bit guests for now. +If there's ever need, we can refine the check later. + +Also, for the RHEL-7.3 I had to adjust the machine-smm-opt test. +In the upstream we already retired QEMU_CAPS_SMP_TOPOLOGY +capability, but not in RHEL yet. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 9c1524a01c357ea235f90c345c3b6a2682ec05f2) +Signed-off-by: Michal Privoznik +--- + src/qemu/qemu_command.c | 7 ++++++ + src/qemu/qemu_domain.c | 27 ++++++++++++++++++++ + .../qemuxml2argv-bios-nvram-secure.args | 29 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 8 ++++++ + 4 files changed, 71 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 773f5f3..6be16cc 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -8949,6 +8949,13 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd, + goto cleanup; + } + ++ if (loader->secure == VIR_TRISTATE_BOOL_YES) { ++ virCommandAddArgList(cmd, ++ "-global", ++ "driver=cfi.pflash01,property=secure,value=on", ++ NULL); ++ } ++ + virBufferAsprintf(&buf, + "file=%s,if=pflash,format=raw,unit=%d", + loader->path, unit); +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index a6a0121..cc726dc 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -2228,6 +2228,33 @@ qemuDomainDefValidate(const virDomainDef *def, + return -1; + } + ++ if (def->os.loader && ++ def->os.loader->secure == VIR_TRISTATE_BOOL_YES) { ++ /* These are the QEMU implementation limitations. But we ++ * have to live with them for now. */ ++ ++ if (!qemuDomainMachineIsQ35(def)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Secure boot is supported with q35 machine types only")); ++ return -1; ++ } ++ ++ /* Now, technically it is possible to have secure boot on ++ * 32bits too, but that would require some -cpu xxx magic ++ * too. Not worth it unless we are explicitly asked. */ ++ if (def->os.arch != VIR_ARCH_X86_64) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Secure boot is supported for x86_64 architecture only")); ++ return -1; ++ } ++ ++ if (def->features[VIR_DOMAIN_FEATURE_SMM] != VIR_TRISTATE_SWITCH_ON) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Secure boot requires SMM feature enabled")); ++ return -1; ++ } ++ } ++ + return 0; + } + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args +new file mode 100644 +index 0000000..c014254 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args +@@ -0,0 +1,29 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name test-bios \ ++-S \ ++-machine pc-q35-2.5,accel=tcg,smm=on \ ++-global driver=cfi.pflash01,property=secure,value=on \ ++-drive file=/usr/share/OVMF/OVMF_CODE.secboot.fd,if=pflash,format=raw,unit=0,\ ++readonly=on \ ++-drive file=/usr/share/OVMF/OVMF_VARS.fd,if=pflash,format=raw,unit=1 \ ++-m 1024 \ ++-smp 1,sockets=1,cores=1,threads=1 \ ++-uuid 362d1fc1-df7d-193e-5c18-49a71bd1da66 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-test-bios/monitor.sock,server,nowait \ ++-boot c \ ++-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \ ++-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \ ++-device virtio-scsi-pci,id=scsi0,bus=pci.2,addr=0x1 \ ++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-scsi0-0-0-0 \ ++-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\ ++drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \ ++-serial pty \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x2 +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 5c26812..95474e8 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -685,6 +685,14 @@ mymain(void) + + DO_TEST("bios", QEMU_CAPS_SGA); + DO_TEST("bios-nvram", NONE); ++ DO_TEST("bios-nvram-secure", ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_ICH9_AHCI, ++ QEMU_CAPS_MACHINE_OPT, ++ QEMU_CAPS_MACHINE_SMM_OPT, ++ QEMU_CAPS_SMP_TOPOLOGY, ++ QEMU_CAPS_VIRTIO_SCSI); + DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG); + DO_TEST("clock-localtime", NONE); + DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC); +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Explain-mlock-limit-size-more-in-detail.patch b/SOURCES/libvirt-qemu-Explain-mlock-limit-size-more-in-detail.patch deleted file mode 100644 index 750580a..0000000 --- a/SOURCES/libvirt-qemu-Explain-mlock-limit-size-more-in-detail.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 02482db69537daa5a1235db00ece500fd7e1844d Mon Sep 17 00:00:00 2001 -Message-Id: <02482db69537daa5a1235db00ece500fd7e1844d@dist-git> -From: Peter Krempa -Date: Thu, 12 Nov 2015 08:40:45 +0100 -Subject: [PATCH] qemu: Explain mlock limit size more in detail - -https://bugzilla.redhat.com/show_bug.cgi?id=1280420 - -Based on Alex's explanation [1] in the recent discussion let's update -the comment explaining the memory lock limit calculation. - -[1] -http://www.redhat.com/archives/libvir-list/2015-November/msg00329.html - -(cherry picked from commit 63ed05d2410bfb9179b26bc3422ea5f9b546d7b3) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 21 ++++++++++++++++++--- - 1 file changed, 18 insertions(+), 3 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index fd4449d..be3dcf6 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3445,9 +3445,24 @@ qemuDomainGetMlockLimitBytes(virDomainDefPtr def) - goto done; - } - -- /* VFIO requires all of the guest's memory to be locked resident, plus some -- * amount for IO space. Alex Williamson suggested adding 1GiB for IO space -- * just to be safe (some finer tuning might be nice, though). */ -+ /* For device passthrough using VFIO the guest memory and MMIO memory -+ * regions need to be locked persistent in order to allow DMA. -+ * -+ * Currently the below limit is based on assumptions about the x86 platform. -+ * -+ * The chosen value of 1GiB below originates from x86 systems where it was -+ * used as space reserved for the MMIO region for the whole system. -+ * -+ * On x86_64 systems the MMIO regions of the IOMMU mapped devices don't -+ * count towards the locked memory limit since the memory is owned by the -+ * device. Emulated devices though do count, but the regions are usually -+ * small. Although it's not guaranteed that the limit will be enough for all -+ * configurations it didn't pose a problem for now. -+ * -+ * http://www.redhat.com/archives/libvir-list/2015-November/msg00329.html -+ * -+ * Note that this may not be valid for all platforms. -+ */ - memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; - - done: --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Extract-logic-to-determine-the-mlock-limit-size-for-VFIO.patch b/SOURCES/libvirt-qemu-Extract-logic-to-determine-the-mlock-limit-size-for-VFIO.patch deleted file mode 100644 index cd3daf3..0000000 --- a/SOURCES/libvirt-qemu-Extract-logic-to-determine-the-mlock-limit-size-for-VFIO.patch +++ /dev/null @@ -1,136 +0,0 @@ -From ed413584e982b24442ab860874e307f50d7fdb10 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Thu, 12 Nov 2015 08:40:42 +0100 -Subject: [PATCH] qemu: Extract logic to determine the mlock limit size for - VFIO - -https://bugzilla.redhat.com/show_bug.cgi?id=1280420 - -New function qemuDomainGetMlockLimitBytes will now handle the -calculation so that it unifies the logic to one place and allows later -reuse. - -(cherry picked from commit fbc58cfcaeffdd4a350cf6abd67da6006f01b148) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 18 ++---------------- - src/qemu/qemu_domain.c | 27 +++++++++++++++++++++++++++ - src/qemu/qemu_domain.h | 2 ++ - src/qemu/qemu_hotplug.c | 17 ++--------------- - 4 files changed, 33 insertions(+), 31 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 9c80e0c..7f8a31b 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -11146,22 +11146,8 @@ qemuBuildCommandLine(virConnectPtr conn, - goto error; - } - -- if (mlock) { -- unsigned long long memKB; -- -- /* VFIO requires all of the guest's memory to be -- * locked resident, plus some amount for IO -- * space. Alex Williamson suggested adding 1GiB for IO -- * space just to be safe (some finer tuning might be -- * nice, though). -- */ -- if (virMemoryLimitIsSet(def->mem.hard_limit)) -- memKB = def->mem.hard_limit; -- else -- memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; -- -- virCommandSetMaxMemLock(cmd, memKB * 1024); -- } -+ if (mlock) -+ virCommandSetMaxMemLock(cmd, qemuDomainGetMlockLimitBytes(def)); - - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSG_TIMESTAMP) && - cfg->logTimestamp) -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 1528cfd..944817d 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3422,3 +3422,30 @@ qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, - - return 0; - } -+ -+ -+/** -+ * qemuDomainGetMlockLimitBytes: -+ * -+ * @def: domain definition -+ * -+ * Returns the size of the memory in bytes that needs to be set as -+ * RLIMIT_MEMLOCK for purpose of VFIO device passthrough. -+ * If a mem.hard_limit is set, then that value is preferred; otherwise, the -+ * value returned may depend upon the architecture or devices present. -+ */ -+unsigned long long -+qemuDomainGetMlockLimitBytes(virDomainDefPtr def) -+{ -+ unsigned long long memKB; -+ -+ /* VFIO requires all of the guest's memory to be locked resident, plus some -+ * amount for IO space. Alex Williamson suggested adding 1GiB for IO space -+ * just to be safe (some finer tuning might be nice, though). */ -+ if (virMemoryLimitIsSet(def->mem.hard_limit)) -+ memKB = def->mem.hard_limit; -+ else -+ memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; -+ -+ return memKB << 10; -+} -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index e283b58..54e7cd9 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -475,4 +475,6 @@ bool qemuDomainMachineIsS390CCW(const virDomainDef *def); - int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, - virDomainObjPtr vm); - -+unsigned long long qemuDomainGetMlockLimitBytes(virDomainDefPtr def); -+ - #endif /* __QEMU_DOMAIN_H__ */ -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index bd96abf..d96f572 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -1254,7 +1254,6 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, - bool teardowncgroup = false; - bool teardownlabel = false; - int backend; -- unsigned long long memKB; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - unsigned int flags = 0; - -@@ -1279,20 +1278,8 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, - goto error; - } - -- /* VFIO requires all of the guest's memory to be locked -- * resident (plus an additional 1GiB to cover IO space). During -- * hotplug, the guest's memory may already be locked, but it -- * doesn't hurt to "change" the limit to the same value. -- * NB: the domain's memory tuning parameters are stored as -- * Kibibytes, but virProcessSetMaxMemLock expects the value in -- * bytes. -- */ -- if (virMemoryLimitIsSet(vm->def->mem.hard_limit)) -- memKB = vm->def->mem.hard_limit; -- else -- memKB = virDomainDefGetMemoryActual(vm->def) + (1024 * 1024); -- -- virProcessSetMaxMemLock(vm->pid, memKB * 1024); -+ /* setup memory locking limits, that are necessary for VFIO */ -+ virProcessSetMaxMemLock(vm->pid, qemuDomainGetMlockLimitBytes(vm->def)); - break; - - default: --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Extract-mem-path-building-into-its-own-function.patch b/SOURCES/libvirt-qemu-Extract-mem-path-building-into-its-own-function.patch deleted file mode 100644 index 7c2cc9c..0000000 --- a/SOURCES/libvirt-qemu-Extract-mem-path-building-into-its-own-function.patch +++ /dev/null @@ -1,173 +0,0 @@ -From 75f3f4ed1356eba49f472206bb9bb0eeae728ba6 Mon Sep 17 00:00:00 2001 -Message-Id: <75f3f4ed1356eba49f472206bb9bb0eeae728ba6@dist-git> -From: Martin Kletzander -Date: Tue, 6 Oct 2015 15:20:33 +0200 -Subject: [PATCH] qemu: Extract -mem-path building into its own function - -https://bugzilla.redhat.com/show_bug.cgi?id=1266856 - -That function is called qemuBuildMemPathStr() and will be used in -other places in the future. The change in the test suite is proper due -to the fact that -mem-prealloc makes only sense with -mem-path (from -qemu documentation -- html/qemu-doc.html). - -Signed-off-by: Martin Kletzander -(cherry picked from commit ad8ab88c9141afb9b7541c67f3d0966d5a1b31cd) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 120 ++++++++++++--------- - .../qemuxml2argv-hugepages-pages6.args | 2 +- - 2 files changed, 73 insertions(+), 49 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 53c9d01..0822ee4 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -7705,6 +7705,71 @@ qemuBuildSmpArgStr(const virDomainDef *def, - } - - static int -+qemuBuildMemPathStr(virQEMUDriverConfigPtr cfg, -+ virDomainDefPtr def, -+ virQEMUCapsPtr qemuCaps, -+ virCommandPtr cmd) -+{ -+ const long system_page_size = virGetSystemPageSizeKB(); -+ char *mem_path = NULL; -+ size_t i = 0; -+ -+ /* -+ * No-op if hugepages were not requested. -+ */ -+ if (!def->mem.nhugepages) -+ return 0; -+ -+ /* There is one special case: if user specified "huge" -+ * pages of regular system pages size. -+ * And there is nothing to do in this case. -+ */ -+ if (def->mem.hugepages[0].size == system_page_size) -+ return 0; -+ -+ if (!cfg->nhugetlbfs) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ "%s", _("hugetlbfs filesystem is not mounted " -+ "or disabled by administrator config")); -+ return -1; -+ } -+ -+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MEM_PATH)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("hugepage backing not supported by '%s'"), -+ def->emulator); -+ return -1; -+ } -+ -+ if (!def->mem.hugepages[0].size) { -+ if (!(mem_path = qemuGetDefaultHugepath(cfg->hugetlbfs, -+ cfg->nhugetlbfs))) -+ return -1; -+ } else { -+ for (i = 0; i < cfg->nhugetlbfs; i++) { -+ if (cfg->hugetlbfs[i].size == def->mem.hugepages[0].size) -+ break; -+ } -+ -+ if (i == cfg->nhugetlbfs) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unable to find any usable hugetlbfs " -+ "mount for %llu KiB"), -+ def->mem.hugepages[0].size); -+ return -1; -+ } -+ -+ if (!(mem_path = qemuGetHugepagePath(&cfg->hugetlbfs[i]))) -+ return -1; -+ } -+ -+ virCommandAddArgList(cmd, "-mem-prealloc", "-mem-path", mem_path, NULL); -+ VIR_FREE(mem_path); -+ -+ return 0; -+} -+ -+static int - qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, - virDomainDefPtr def, - virCommandPtr cmd, -@@ -9074,54 +9139,13 @@ qemuBuildCommandLine(virConnectPtr conn, - virCommandAddArgFormat(cmd, "%llu", virDomainDefGetMemoryInitial(def) / 1024); - } - -- if (def->mem.nhugepages && !virDomainNumaGetNodeCount(def->numa)) { -- const long system_page_size = virGetSystemPageSizeKB(); -- char *mem_path = NULL; -- -- if (def->mem.hugepages[0].size == system_page_size) { -- /* There is one special case: if user specified "huge" -- * pages of regular system pages size. */ -- } else { -- if (!cfg->nhugetlbfs) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- "%s", _("hugetlbfs filesystem is not mounted " -- "or disabled by administrator config")); -- goto error; -- } -- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MEM_PATH)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("hugepage backing not supported by '%s'"), -- def->emulator); -- goto error; -- } -- -- if (def->mem.hugepages[0].size) { -- for (j = 0; j < cfg->nhugetlbfs; j++) { -- if (cfg->hugetlbfs[j].size == def->mem.hugepages[0].size) -- break; -- } -- -- if (j == cfg->nhugetlbfs) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Unable to find any usable hugetlbfs mount for %llu KiB"), -- def->mem.hugepages[0].size); -- goto error; -- } -- -- if (!(mem_path = qemuGetHugepagePath(&cfg->hugetlbfs[j]))) -- goto error; -- } else { -- if (!(mem_path = qemuGetDefaultHugepath(cfg->hugetlbfs, -- cfg->nhugetlbfs))) -- goto error; -- } -- } -- -- virCommandAddArg(cmd, "-mem-prealloc"); -- if (mem_path) -- virCommandAddArgList(cmd, "-mem-path", mem_path, NULL); -- VIR_FREE(mem_path); -- } -+ /* -+ * Add '-mem-path' (and '-mem-prealloc') parameter here only if -+ * there is no numa node specified. -+ */ -+ if (!virDomainNumaGetNodeCount(def->numa) && -+ qemuBuildMemPathStr(cfg, def, qemuCaps, cmd) < 0) -+ goto error; - - if (def->mem.locked && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_MLOCK)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args -index 4eccb86..a3a4e57 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ --/usr/bin/qemu -S -M pc -m 1024 -mem-prealloc -smp 2 -nographic \ -+/usr/bin/qemu -S -M pc -m 1024 -smp 2 -nographic \ - -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \ - -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Fix-access-to-auto-generated-socket-paths.patch b/SOURCES/libvirt-qemu-Fix-access-to-auto-generated-socket-paths.patch deleted file mode 100644 index 460f184..0000000 --- a/SOURCES/libvirt-qemu-Fix-access-to-auto-generated-socket-paths.patch +++ /dev/null @@ -1,199 +0,0 @@ -From cbd26cc9303bc0b00da7d63756c016c4f056ab4c Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:51 +0200 -Subject: [PATCH] qemu: Fix access to auto-generated socket paths - -We are automatically generating some socket paths for domains, but all -those paths end up in a directory that's the same for multiple domains. -The problem is that multiple domains can each run with different -seclabels (users, selinux contexts, etc.). The idea here is to create a -per-domain directory labelled in a way that each domain can access its -own unix sockets. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit f1f68ca33433825ce0deed2d96f1990200bc6618) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 2 +- - src/qemu/qemu_domain.c | 16 +++--- - src/qemu/qemu_process.c | 57 +++++++++++++++++++++- - .../qemuxml2argv-channel-virtio-unix.args | 7 +-- - 4 files changed, 67 insertions(+), 15 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index d28063c..aebaf35 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -7807,7 +7807,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, - if (graphics->data.vnc.socket || cfg->vncAutoUnixSocket) { - if (!graphics->data.vnc.socket && - virAsprintf(&graphics->data.vnc.socket, -- "%s/%s.vnc", cfg->libDir, def->name) == -1) -+ "%s/domain-%s/vnc.sock", cfg->libDir, def->name) == -1) - goto error; - - virBufferAsprintf(&opt, "unix:%s", graphics->data.vnc.socket); -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 3b542f5..943d727 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -1288,16 +1288,12 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, - goto cleanup; - } - -- if (dev->data.chr->target.name) { -- if (virAsprintf(&dev->data.chr->source.data.nix.path, "%s/%s.%s", -- cfg->channelTargetDir, -- def->name, dev->data.chr->target.name) < 0) -- goto cleanup; -- } else { -- if (virAsprintf(&dev->data.chr->source.data.nix.path, "%s/%s", -- cfg->channelTargetDir, def->name) < 0) -- goto cleanup; -- } -+ if (virAsprintf(&dev->data.chr->source.data.nix.path, -+ "%s/domain-%s/%s", -+ cfg->channelTargetDir, def->name, -+ dev->data.chr->target.name ? dev->data.chr->target.name -+ : "unknown.sock") < 0) -+ goto cleanup; - - dev->data.chr->source.data.nix.listen = true; - } -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index e1c7f0b..8cda456 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -46,6 +46,7 @@ - - #include "cpu/cpu.h" - #include "datatypes.h" -+#include "dirname.h" - #include "virlog.h" - #include "virerror.h" - #include "viralloc.h" -@@ -3269,7 +3270,7 @@ qemuProcessPrepareMonitorChr(virQEMUDriverConfigPtr cfg, - monConfig->type = VIR_DOMAIN_CHR_TYPE_UNIX; - monConfig->data.nix.listen = true; - -- if (virAsprintf(&monConfig->data.nix.path, "%s/%s.monitor", -+ if (virAsprintf(&monConfig->data.nix.path, "%s/domain-%s/monitor.sock", - cfg->libDir, vm) < 0) - return -1; - return 0; -@@ -4393,6 +4394,7 @@ int qemuProcessStart(virConnectPtr conn, - unsigned int hostdev_flags = 0; - size_t nnicindexes = 0; - int *nicindexes = NULL; -+ char *tmppath = NULL, *tmpdirpath = NULL; - - VIR_DEBUG("vm=%p name=%s id=%d pid=%llu", - vm, vm->def->name, vm->def->id, -@@ -4728,6 +4730,44 @@ int qemuProcessStart(virConnectPtr conn, - &nnicindexes, &nicindexes))) - goto cleanup; - -+ -+ /* -+ * Create all per-domain directories in order to make sure domain -+ * with any possible seclabels can access it. -+ */ -+ if (virAsprintf(&tmppath, "%s/domain-%s", cfg->libDir, vm->def->name) < 0) -+ goto cleanup; -+ -+ if (virFileMakePath(tmppath) < 0) -+ goto cleanup; -+ -+ if (!(tmpdirpath = mdir_name(tmppath))) -+ goto cleanup; -+ -+ if (virSecurityManagerDomainSetDirLabel(driver->securityManager, -+ vm->def, tmpdirpath) < 0) -+ goto cleanup; -+ -+ VIR_FREE(tmppath); -+ VIR_FREE(tmpdirpath); -+ -+ if (virAsprintf(&tmppath, "%s/domain-%s", -+ cfg->channelTargetDir, vm->def->name) < 0) -+ goto cleanup; -+ -+ if (virFileMakePath(tmppath) < 0) -+ goto cleanup; -+ -+ if (!(tmpdirpath = mdir_name(tmppath))) -+ goto cleanup; -+ -+ if (virSecurityManagerDomainSetDirLabel(driver->securityManager, -+ vm->def, tmpdirpath) < 0) -+ goto cleanup; -+ -+ VIR_FREE(tmpdirpath); -+ VIR_FREE(tmppath); -+ - /* now that we know it is about to start call the hook if present */ - if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = qemuDomainDefFormatXML(driver, vm->def, 0); -@@ -5081,6 +5121,8 @@ int qemuProcessStart(virConnectPtr conn, - /* We jump here if we failed to start the VM for any reason, or - * if we failed to initialize the now running VM. kill it off and - * pretend we never started it */ -+ VIR_FREE(tmppath); -+ VIR_FREE(tmpdirpath); - VIR_FREE(nodeset); - virCommandFree(cmd); - VIR_FORCE_CLOSE(logfile); -@@ -5143,6 +5185,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, - size_t i; - int logfile = -1; - char *timestamp; -+ char *tmppath = NULL; - char ebuf[1024]; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - -@@ -5233,6 +5276,18 @@ void qemuProcessStop(virQEMUDriverPtr driver, - priv->monConfig = NULL; - } - -+ ignore_value(virAsprintf(&tmppath, "%s/domain-%s", -+ cfg->libDir, vm->def->name)); -+ if (tmppath) -+ virFileDeleteTree(tmppath); -+ VIR_FREE(tmppath); -+ -+ ignore_value(virAsprintf(&tmppath, "%s/domain-%s", -+ cfg->channelTargetDir, vm->def->name)); -+ if (tmppath) -+ virFileDeleteTree(tmppath); -+ VIR_FREE(tmppath); -+ - ignore_value(virDomainChrDefForeach(vm->def, - false, - qemuProcessCleanupChardevDevice, -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args -index 43a34ce..289b9d7 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args -@@ -9,11 +9,12 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - -usb \ - -hda /dev/HostVG/QEMUGuest1 \ - -chardev socket,id=charchannel0,path=\ --/tmp/QEMUGuest1.org.qemu.guest_agent.0,server,nowait \ -+/tmp/domain-QEMUGuest1/org.qemu.guest_agent.0,server,nowait \ - -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,\ - name=org.qemu.guest_agent.0 \ ---chardev socket,id=charchannel1,path=/tmp/QEMUGuest1,server,nowait \ -+-chardev \ -+socket,id=charchannel1,path=/tmp/domain-QEMUGuest1/unknown.sock,server,nowait \ - -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel1,id=channel1 \ ---chardev socket,id=charchannel2,path=/tmp/QEMUGuest1.ble,server,nowait \ -+-chardev socket,id=charchannel2,path=/tmp/domain-QEMUGuest1/ble,server,nowait \ - -device virtserialport,bus=virtio-serial0.0,nr=3,chardev=charchannel2,id=channel2,\ - name=ble --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Fix-crash-hot-plugging-luks-volume.patch b/SOURCES/libvirt-qemu-Fix-crash-hot-plugging-luks-volume.patch new file mode 100644 index 0000000..ee589f6 --- /dev/null +++ b/SOURCES/libvirt-qemu-Fix-crash-hot-plugging-luks-volume.patch @@ -0,0 +1,80 @@ +From 7f7caec5c5a02df88ee941c1120aa4b0c8b2c1ab Mon Sep 17 00:00:00 2001 +Message-Id: <7f7caec5c5a02df88ee941c1120aa4b0c8b2c1ab@dist-git> +From: John Ferlan +Date: Sat, 20 Aug 2016 09:11:45 -0400 +Subject: [PATCH] qemu: Fix crash hot plugging luks volume + +https://bugzilla.redhat.com/show_bug.cgi?id=1367259 + +Crash occurs because 'secrets' is being dereferenced in call: + + if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias, + VIR_SECRET_USAGE_TYPE_VOLUME, NULL, + &src->encryption->secrets[0]->seclookupdef, + true) < 0) + +(gdb) p *src->encryption +$1 = {format = 2, nsecrets = 0, secrets = 0x0, encinfo = {cipher_size = 0, + cipher_name = 0x0, cipher_mode = 0x0, cipher_hash = 0x0, ivgen_name = 0x0, + ivgen_hash = 0x0}} +(gdb) bt + priv=priv@entry=0x7fffc03be160, disk=disk@entry=0x7fffb4002ae0) + at qemu/qemu_domain.c:1087 + disk=0x7fffb4002ae0, vm=0x7fffc03a2580, driver=0x7fffc02ca390, + conn=0x7fffb00009a0) at qemu/qemu_hotplug.c:355 + +Upon entry to qemuDomainAttachVirtioDiskDevice, src->encryption points +at a valid 'secret' buffer w/ nsecrets == 1; however, the call to +qemuDomainDetermineDiskChain will call virStorageFileGetMetadata +and eventually virStorageFileGetMetadataInternal where the src->encryption +was overwritten when probing the volume. + +Commit id 'a48c7141' added code to virStorageFileGetMetadataInternal +to determine if the disk/volume would use/need encryption and allocated +a meta->encryption. This overwrote an existing encryption buffer +already provided by the XML + +This patch adds a check for meta->encryption already present before +just allocating and overwriting an existing buffer. It then checks the +existing encryption data to ensure the XML provided format for the +disk matches the expected format read from the disk and errors if there +is a mismatch. + +(cherry picked from commit b4478c16c02f28d88673709947124c6ea2fb4c7b) +Signed-off-by: John Ferlan +--- + src/util/virstoragefile.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 471aa1f..feeb061 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -950,10 +950,21 @@ virStorageFileGetMetadataInternal(virStorageSourcePtr meta, + for (i = 0; fileTypeInfo[meta->format].cryptInfo[i].format != 0; i++) { + if (virStorageFileHasEncryptionFormat(&fileTypeInfo[meta->format].cryptInfo[i], + buf, len)) { +- if (VIR_ALLOC(meta->encryption) < 0) +- goto cleanup; ++ int expt_fmt = fileTypeInfo[meta->format].cryptInfo[i].format; ++ if (!meta->encryption) { ++ if (VIR_ALLOC(meta->encryption) < 0) ++ goto cleanup; + +- meta->encryption->format = fileTypeInfo[meta->format].cryptInfo[i].format; ++ meta->encryption->format = expt_fmt; ++ } else { ++ if (meta->encryption->format != expt_fmt) { ++ virReportError(VIR_ERR_XML_ERROR, ++ _("encryption format %d doesn't match " ++ "expected format %d"), ++ meta->encryption->format, expt_fmt); ++ goto cleanup; ++ } ++ } + } + } + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Fix-domain-state-after-reset.patch b/SOURCES/libvirt-qemu-Fix-domain-state-after-reset.patch new file mode 100644 index 0000000..f3ee7bf --- /dev/null +++ b/SOURCES/libvirt-qemu-Fix-domain-state-after-reset.patch @@ -0,0 +1,44 @@ +From 75d5905470fc64bff87e0e76d8a958a9f2f94f5e Mon Sep 17 00:00:00 2001 +Message-Id: <75d5905470fc64bff87e0e76d8a958a9f2f94f5e@dist-git> +From: Martin Kletzander +Date: Tue, 2 Aug 2016 13:38:58 +0200 +Subject: [PATCH] qemu: Fix domain state after reset + +When reset was called from a domain that crashed we didn't change the +crashed state into a paused one which could confuse users. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1269575 + +Signed-off-by: Martin Kletzander +(cherry picked from commit daf01a61254cc21d90e15dae8080f13e9a34b489) +Signed-off-by: Martin Kletzander +--- + src/qemu/qemu_driver.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index aed5e80..2fe217d 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -2139,6 +2139,7 @@ qemuDomainReset(virDomainPtr dom, unsigned int flags) + virDomainObjPtr vm; + int ret = -1; + qemuDomainObjPrivatePtr priv; ++ virDomainState state; + + virCheckFlags(0, -1); + +@@ -2165,6 +2166,10 @@ qemuDomainReset(virDomainPtr dom, unsigned int flags) + + priv->fakeReboot = false; + ++ state = virDomainObjGetState(vm, NULL); ++ if (state == VIR_DOMAIN_CRASHED) ++ virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_CRASHED); ++ + endjob: + qemuDomainObjEndJob(driver, vm); + +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Fix-dynamic_ownership-qemu.conf-setting.patch b/SOURCES/libvirt-qemu-Fix-dynamic_ownership-qemu.conf-setting.patch deleted file mode 100644 index 3c9528f..0000000 --- a/SOURCES/libvirt-qemu-Fix-dynamic_ownership-qemu.conf-setting.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 76d622dec775b332594c46fa55d1fd33785d1d62 Mon Sep 17 00:00:00 2001 -Message-Id: <76d622dec775b332594c46fa55d1fd33785d1d62@dist-git> -From: Cole Robinson -Date: Tue, 29 Sep 2015 15:57:34 +0200 -Subject: [PATCH] qemu: Fix dynamic_ownership qemu.conf setting - -https://bugzilla.redhat.com/show_bug.cgi?id=1266628 - -Commit 307fb904 (Sep 10) added a 'privileged' variable when creating -the DAC driver: - -@@ -153,6 +157,7 @@ virSecurityManagerNewDAC(const char *virtDriver, - bool defaultConfined, - bool requireConfined, - bool dynamicOwnership, -+ bool privileged, - virSecurityManagerDACChownCallback chownCallback) - -But argument order is mixed up at the caller, swapping dynamicOwnership -and privileged values. This corrects the argument order - -(cherry picked from commit 68572de8228e3971174a83c227fcb018d6f684c7) - -https://bugzilla.redhat.com/show_bug.cgi?id=1267154 - -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index e77e548..bdebf13 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -431,8 +431,8 @@ qemuSecurityInit(virQEMUDriverPtr driver) - cfg->allowDiskFormatProbing, - cfg->securityDefaultConfined, - cfg->securityRequireConfined, -- virQEMUDriverIsPrivileged(driver), - cfg->dynamicOwnership, -+ virQEMUDriverIsPrivileged(driver), - qemuSecurityChownCallback))) - goto error; - if (!stack) { --- -2.6.0 - diff --git a/SOURCES/libvirt-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch b/SOURCES/libvirt-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch deleted file mode 100644 index 3fcfd40..0000000 --- a/SOURCES/libvirt-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 8c46231056f7c633a9f8576018d764e3a0b7251f Mon Sep 17 00:00:00 2001 -Message-Id: <8c46231056f7c633a9f8576018d764e3a0b7251f@dist-git> -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:56 -0400 -Subject: [PATCH] qemu: Fix integer/boolean logic in qemuSetUnprivSGIO - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Setting of 'val' is a boolean expression, so handle it that way and -adjust the check/return logic to be clearer - -Signed-off-by: John Ferlan -(cherry picked from commit 69b850fe2a19d0c32ae2f209e8d8463df6ead665) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index d41f166..7d317d7 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1433,7 +1433,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - virDomainHostdevDefPtr hostdev = NULL; - char *sysfs_path = NULL; - const char *path = NULL; -- int val = -1; -+ bool val; - int ret = -1; - - /* "sgio" is only valid for block disk; cdrom -@@ -1475,8 +1475,12 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - * whitelist is enabled. But if requesting unfiltered access, always call - * virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio. - */ -- if ((virFileExists(sysfs_path) || val == 1) && -- virSetDeviceUnprivSGIO(path, NULL, val) < 0) -+ if (!val || !virFileExists(sysfs_path)) { -+ ret = 0; -+ goto cleanup; -+ } -+ -+ if (virSetDeviceUnprivSGIO(path, NULL, 1) < 0) - goto cleanup; - - ret = 0; --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Fix-migration-from-old-libvirt.patch b/SOURCES/libvirt-qemu-Fix-migration-from-old-libvirt.patch new file mode 100644 index 0000000..ee9a3af --- /dev/null +++ b/SOURCES/libvirt-qemu-Fix-migration-from-old-libvirt.patch @@ -0,0 +1,43 @@ +From e32c0091dd23e91cdaa64929e417fa86770849b8 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Jiri Denemark +Date: Mon, 18 Jul 2016 13:17:28 +0200 +Subject: [PATCH] qemu: Fix migration from old libvirt + +Older libvirt versions send persistent XML in a migration cookie even +when VIR_MIGRATE_PERSIST_DEST flag is not used, but current libvirt +properly fails if the cookie contains unexpected flags. Thus migration +from old libvirt fails with + + internal error: Unsupported migration cookie feature persistent + +unless VIR_MIGRATE_PERSIST_DEST flag is set. + +https://bugzilla.redhat.com/show_bug.cgi?id=1320500 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 338f772e923ce07148abe6dcaf3d62b744e7baf5) +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_migration.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c +index 0b1770b..463e624 100644 +--- a/src/qemu/qemu_migration.c ++++ b/src/qemu/qemu_migration.c +@@ -6183,8 +6183,9 @@ qemuMigrationFinish(virQEMUDriverPtr driver, + cookie_flags = QEMU_MIGRATION_COOKIE_NETWORK | + QEMU_MIGRATION_COOKIE_STATS | + QEMU_MIGRATION_COOKIE_NBD; +- if (flags & VIR_MIGRATE_PERSIST_DEST) +- cookie_flags |= QEMU_MIGRATION_COOKIE_PERSISTENT; ++ /* Some older versions of libvirt always send persistent XML in the cookie ++ * even though VIR_MIGRATE_PERSIST_DEST was not used. */ ++ cookie_flags |= QEMU_MIGRATION_COOKIE_PERSISTENT; + + if (!(mig = qemuMigrationEatCookie(driver, vm, cookiein, + cookieinlen, cookie_flags))) +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Fix-reporting-of-physical-capacity-for-block-devices.patch b/SOURCES/libvirt-qemu-Fix-reporting-of-physical-capacity-for-block-devices.patch deleted file mode 100644 index e24b31f..0000000 --- a/SOURCES/libvirt-qemu-Fix-reporting-of-physical-capacity-for-block-devices.patch +++ /dev/null @@ -1,144 +0,0 @@ -From f218da31d36f599ecec401773fd675a1ab5e915d Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Fri, 7 Aug 2015 13:39:30 +0200 -Subject: [PATCH] qemu: Fix reporting of physical capacity for block devices - -Qemu reports physical size 0 for block devices. As 15fa84acbb55ebfee6a4 -changed the behavior of qemuDomainGetBlockInfo to just query the monitor -this created a regression since we didn't report the size correctly any -more. - -This patch adds code to refresh the physical size of a block device by -opening it and seeking to the end and uses it both in -qemuDomainGetBlockInfo and also in qemuDomainGetStatsOneBlock that was -broken since it was introduced in this respect. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1250982 -(cherry picked from commit 8dc27259255b79758367789ed272e909bdb56735) - -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/qemu/qemu_driver.c | 18 ++++++++++++++++-- - src/util/virstoragefile.c | 39 +++++++++++++++++++++++++++++++++++++++ - src/util/virstoragefile.h | 2 ++ - 4 files changed, 58 insertions(+), 2 deletions(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index ad9ebb1..e5d8437 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -2157,6 +2157,7 @@ virStorageSourceParseRBDColonString; - virStorageSourcePoolDefFree; - virStorageSourcePoolModeTypeFromString; - virStorageSourcePoolModeTypeToString; -+virStorageSourceUpdateBlockPhysicalSize; - virStorageTypeFromString; - virStorageTypeToString; - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 8d569fe..48857ce 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -11908,8 +11908,16 @@ qemuDomainGetBlockInfo(virDomainPtr dom, - info->allocation = entry->wr_highest_offset; - } - -+ if (entry->physical) { -+ info->physical = entry->physical; -+ } else { -+ if (virStorageSourceUpdateBlockPhysicalSize(disk->src, true) < 0) -+ goto endjob; -+ -+ info->physical = disk->src->physical; -+ } -+ - info->capacity = entry->capacity; -- info->physical = entry->physical; - - ret = 0; - -@@ -19355,9 +19363,15 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, - if (entry->capacity) - QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, - "capacity", entry->capacity); -- if (entry->physical) -+ if (entry->physical) { - QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, - "physical", entry->physical); -+ } else { -+ if (virStorageSourceUpdateBlockPhysicalSize(src, false) == 0) { -+ QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -+ "physical", src->physical); -+ } -+ } - - ret = 0; - cleanup: -diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c -index 6c3017c..2aa1d90 100644 ---- a/src/util/virstoragefile.c -+++ b/src/util/virstoragefile.c -@@ -2587,6 +2587,45 @@ virStorageSourceNewFromBacking(virStorageSourcePtr parent) - } - - -+/** -+ * @src: disk source definiton structure -+ * @report: report libvirt errors if set to true -+ * -+ * Updates src->physical for block devices since qemu doesn't report the current -+ * size correctly for them. Returns 0 on success, -1 on error. -+ */ -+int -+virStorageSourceUpdateBlockPhysicalSize(virStorageSourcePtr src, -+ bool report) -+{ -+ int fd = -1; -+ off_t end; -+ int ret = -1; -+ -+ if (virStorageSourceGetActualType(src) != VIR_STORAGE_TYPE_BLOCK) -+ return 0; -+ -+ if ((fd = open(src->path, O_RDONLY)) < 0) { -+ if (report) -+ virReportSystemError(errno, _("failed to open block device '%s'"), -+ src->path); -+ return -1; -+ } -+ -+ if ((end = lseek(fd, 0, SEEK_END)) == (off_t) -1) { -+ if (report) -+ virReportSystemError(errno, -+ _("failed to seek to end of '%s'"), src->path); -+ } else { -+ src->physical = end; -+ ret = 0; -+ } -+ -+ VIR_FORCE_CLOSE(fd); -+ return ret; -+} -+ -+ - static char * - virStorageFileCanonicalizeFormatPath(char **components, - size_t ncomponents, -diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h -index aa17a00..b98fe25 100644 ---- a/src/util/virstoragefile.h -+++ b/src/util/virstoragefile.h -@@ -362,6 +362,8 @@ bool virStorageSourceIsLocalStorage(virStorageSourcePtr src); - bool virStorageSourceIsEmpty(virStorageSourcePtr src); - void virStorageSourceFree(virStorageSourcePtr def); - void virStorageSourceBackingStoreClear(virStorageSourcePtr def); -+int virStorageSourceUpdateBlockPhysicalSize(virStorageSourcePtr src, -+ bool report); - virStorageSourcePtr virStorageSourceNewFromBacking(virStorageSourcePtr parent); - virStorageSourcePtr virStorageSourceCopy(const virStorageSource *src, - bool backingChain) --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Fix-segfault-when-parsing-private-domain-data.patch b/SOURCES/libvirt-qemu-Fix-segfault-when-parsing-private-domain-data.patch deleted file mode 100644 index 492ebe0..0000000 --- a/SOURCES/libvirt-qemu-Fix-segfault-when-parsing-private-domain-data.patch +++ /dev/null @@ -1,52 +0,0 @@ -From e8ffa273684efa5de18fad0913d6da4a93a9682d Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Thu, 13 Aug 2015 15:11:45 +0200 -Subject: [PATCH] qemu: Fix segfault when parsing private domain data - -https://bugzilla.redhat.com/show_bug.cgi?id=1162947 - -When parsing private domain data, there are two paths that are flawed. -They are both error paths, just from different parts of the function. -One of them can call free() on an uninitialized pointer. Initialization -to NULL is enough here. The other one is a bit trickier to explain, but -as easy as the first one to fix. We create capabilities, parse them and -then assign them into the private data pointer inside the domain object. -If, however, we get to fail from now on, the error path calls unrefs the -capabilities and then, when the domain object is being cleaned, -qemuDomainObjPrivateFree() tries to unref them as well. That causes a -segfault. Settin the pointer to NULL upon successful addition to the -private data is enough. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 92ddffdbd3c91d99f8f7ed9b661388a2c5d36cc2) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index c247737..d95f24f 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -627,7 +627,7 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, - { - qemuDomainObjPrivatePtr priv = vm->privateData; - char *monitorpath; -- char *tmp; -+ char *tmp = NULL; - int n; - size_t i; - xmlNodePtr *nodes = NULL; -@@ -715,6 +715,7 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, - } - - priv->qemuCaps = qemuCaps; -+ qemuCaps = NULL; - } - VIR_FREE(nodes); - --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Fix-support-for-startupPolicy-with-volume-pool-disks.patch b/SOURCES/libvirt-qemu-Fix-support-for-startupPolicy-with-volume-pool-disks.patch new file mode 100644 index 0000000..7bf3aff --- /dev/null +++ b/SOURCES/libvirt-qemu-Fix-support-for-startupPolicy-with-volume-pool-disks.patch @@ -0,0 +1,118 @@ +From 5f706cf9ca50573f42c44d154d18e6c813712610 Mon Sep 17 00:00:00 2001 +Message-Id: <5f706cf9ca50573f42c44d154d18e6c813712610@dist-git> +From: Martin Kletzander +Date: Tue, 2 Aug 2016 13:32:35 +0200 +Subject: [PATCH] qemu: Fix support for startupPolicy with volume/pool disks + +Until now we simply errored out when the translation from pool+volume +failed. However, we should instead check whether that disk is needed or +not since there is an option for that. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1168453 + +Signed-off-by: Martin Kletzander +(cherry picked from commit a2b97a8d912a37ba1935bf98be4c332f42332236) +Signed-off-by: Martin Kletzander +--- + src/qemu/qemu_domain.c | 18 ++++++++++++++++-- + src/qemu/qemu_domain.h | 5 +++-- + src/qemu/qemu_process.c | 20 +++++--------------- + 3 files changed, 24 insertions(+), 19 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index c74033b..8ab09c7 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -27,6 +27,7 @@ + #include "qemu_alias.h" + #include "qemu_cgroup.h" + #include "qemu_command.h" ++#include "qemu_process.h" + #include "qemu_parse_command.h" + #include "qemu_capabilities.h" + #include "qemu_migration.h" +@@ -4110,11 +4111,14 @@ qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver, + + + int +-qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, ++qemuDomainCheckDiskPresence(virConnectPtr conn, ++ virQEMUDriverPtr driver, + virDomainObjPtr vm, +- bool cold_boot) ++ unsigned int flags) + { + size_t i; ++ bool pretend = flags & VIR_QEMU_PROCESS_START_PRETEND; ++ bool cold_boot = flags & VIR_QEMU_PROCESS_START_COLD; + + VIR_DEBUG("Checking for disk presence"); + for (i = vm->def->ndisks; i > 0; i--) { +@@ -4122,6 +4126,16 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, + virDomainDiskDefPtr disk = vm->def->disks[idx]; + virStorageFileFormat format = virDomainDiskGetFormat(disk); + ++ if (virStorageTranslateDiskSourcePool(conn, vm->def->disks[idx]) < 0) { ++ if (pretend || ++ qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0) ++ return -1; ++ continue; ++ } ++ ++ if (pretend) ++ continue; ++ + if (virStorageSourceIsEmpty(disk->src)) + continue; + +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index bbec0d4..888732a 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -537,9 +537,10 @@ void qemuDomainSetFakeReboot(virQEMUDriverPtr driver, + bool qemuDomainJobAllowed(qemuDomainObjPrivatePtr priv, + qemuDomainJob job); + +-int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, ++int qemuDomainCheckDiskPresence(virConnectPtr conn, ++ virQEMUDriverPtr driver, + virDomainObjPtr vm, +- bool start_with_state); ++ unsigned int flags); + + int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, + virDomainObjPtr vm, +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 129c070..2f0ef2b 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -4893,21 +4893,11 @@ qemuProcessPrepareDomain(virConnectPtr conn, + if (qemuProcessSetupGraphics(driver, vm, flags) < 0) + goto cleanup; + +- /* "volume" type disk's source must be translated before +- * cgroup and security setting. +- */ +- for (i = 0; i < vm->def->ndisks; i++) { +- if (virStorageTranslateDiskSourcePool(conn, vm->def->disks[i]) < 0) +- goto cleanup; +- } +- +- /* drop possibly missing disks from the definition. This needs to happen +- * after the def is copied, aliases are set and disk sources are translated */ +- if (!(flags & VIR_QEMU_PROCESS_START_PRETEND)) { +- if (qemuDomainCheckDiskPresence(driver, vm, +- flags & VIR_QEMU_PROCESS_START_COLD) < 0) +- goto cleanup; +- } ++ /* Drop possibly missing disks from the definition. This function ++ * also resolves source pool/volume into a path and it needs to ++ * happen after the def is copied and aliases are set. */ ++ if (qemuDomainCheckDiskPresence(conn, driver, vm, flags) < 0) ++ goto cleanup; + + VIR_DEBUG("Create domain masterKey"); + if (qemuDomainMasterKeyCreate(vm) < 0) +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Fix-the-command-line-generation-for-rbd-auth-using-aes-secrets.patch b/SOURCES/libvirt-qemu-Fix-the-command-line-generation-for-rbd-auth-using-aes-secrets.patch new file mode 100644 index 0000000..348a096 --- /dev/null +++ b/SOURCES/libvirt-qemu-Fix-the-command-line-generation-for-rbd-auth-using-aes-secrets.patch @@ -0,0 +1,66 @@ +From d15d6fce9e34e3b7241ca1f61328fc301678a3c0 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Wed, 17 Aug 2016 08:18:10 -0400 +Subject: [PATCH] qemu: Fix the command line generation for rbd auth using aes + secrets + +https://bugzilla.redhat.com/show_bug.cgi?id=1182074 + +Since libvirt still uses a legacy qemu arg format to add a disk, the +manner in which the 'password-secret' argument is passed to qemu needs +to change to prepend a 'file.' If in the future, usage of the more +modern disk format, then the prepended 'file.' can be removed. + +Fix based on Jim Fehlig posting and subsequent +upstream list followups, see: + +http://www.redhat.com/archives/libvir-list/2016-August/msg00777.html + +for details. Introduced by commit id 'a1344f70'. + +(cherry picked from commit d53d465083edeb64cc7b78249c030734c0d91c6b) + +Resolved "conflict" in the .args file since upstream commit id '4808ebde' +to alter the max length of .args output line length isn't present. + +Signed-off-by: John Ferlan +--- + src/qemu/qemu_command.c | 7 ++++++- + .../qemuxml2argv-disk-drive-network-rbd-auth-AES.args | 3 ++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 4ce86bb..a001d2c 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1296,7 +1296,12 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, + virBufferAddLit(buf, ","); + + if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { +- virBufferAsprintf(buf, "password-secret=%s,", ++ /* NB: If libvirt starts using the more modern option based ++ * syntax to build the command line (e.g., "-drive driver=rbd, ++ * filename=%s,...") instead of the legacy model (e.g."-drive ++ * file=%s,..."), then the "file." prefix can be removed ++ */ ++ virBufferAsprintf(buf, "file.password-secret=%s,", + secinfo->s.aes.alias); + } + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args +index 7100d2d..8312d3d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args +@@ -26,6 +26,7 @@ data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\ + keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \ + -drive 'file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\ + mon_host=mon1.example.org\:6321\;mon2.example.org\:6322\;mon3.example.org\:6322,\ +-password-secret=virtio-disk0-secret0,format=raw,if=none,id=drive-virtio-disk0' \ ++file.password-secret=virtio-disk0-secret0,format=raw,if=none,\ ++id=drive-virtio-disk0' \ + -device virtio-blk-pci,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,\ + id=virtio-disk0 +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Fix-using-guest-architecture-as-lookup-key.patch b/SOURCES/libvirt-qemu-Fix-using-guest-architecture-as-lookup-key.patch deleted file mode 100644 index f10c6f6..0000000 --- a/SOURCES/libvirt-qemu-Fix-using-guest-architecture-as-lookup-key.patch +++ /dev/null @@ -1,175 +0,0 @@ -From d890a1ebfea47603a67def4658166f061a801313 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 16 Sep 2015 11:07:42 +0200 -Subject: [PATCH] qemu: Fix using guest architecture as lookup key - -When looking for a QEMU binary suitable for running ppc64le guests -we have to take into account the fact that we use the QEMU target -as key for the hash, so direct comparison is not good enough. - -Factor out the logic from virQEMUCapsFindBinaryForArch() to a new -virQEMUCapsFindTarget() function and use that both when looking -for QEMU binaries available on the system and when looking up -QEMU capabilities later. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1260753 -(cherry picked from commit eb36666d22d52ecf0a1755dd0a8a45de982e00fb) -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 107 +++++++++++++++++++++++++++++-------------- - 1 file changed, 72 insertions(+), 35 deletions(-) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index faebeac..5b21307 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -381,6 +381,28 @@ static const char *virQEMUCapsArchToString(virArch arch) - return virArchToString(arch); - } - -+/* Given a host and guest architectures, find a suitable QEMU target. -+ * -+ * This is meant to be used as a second attempt if qemu-system-$guestarch -+ * can't be found, eg. on a x86_64 host you want to use qemu-system-i386, -+ * if available, instead of qemu-system-x86_64 to run i686 guests */ -+static virArch -+virQEMUCapsFindTarget(virArch hostarch, -+ virArch guestarch) -+{ -+ /* Both ppc64 and ppc64le guests can use the ppc64 target */ -+ if (ARCH_IS_PPC64(guestarch)) -+ guestarch = VIR_ARCH_PPC64; -+ -+ /* armv7l guests on aarch64 hosts can use the aarch64 target -+ * i686 guests on x86_64 hosts can use the x86_64 target */ -+ if ((guestarch == VIR_ARCH_ARMV7L && hostarch == VIR_ARCH_AARCH64) || -+ (guestarch == VIR_ARCH_I686 && hostarch == VIR_ARCH_X86_64)) { -+ return hostarch; -+ } -+ -+ return guestarch; -+} - - static virCommandPtr - virQEMUCapsProbeCommand(const char *qemu, -@@ -685,51 +707,55 @@ virQEMUCapsProbeCPUModels(virQEMUCapsPtr qemuCaps, uid_t runUid, gid_t runGid) - return ret; - } - -+static char * -+virQEMUCapsFindBinary(const char *format, -+ const char *archstr) -+{ -+ char *ret = NULL; -+ char *binary = NULL; -+ -+ if (virAsprintf(&binary, format, archstr) < 0) -+ goto out; -+ -+ ret = virFindFileInPath(binary); -+ VIR_FREE(binary); -+ if (ret && virFileIsExecutable(ret)) -+ goto out; -+ -+ VIR_FREE(ret); -+ -+ out: -+ return ret; -+} - - static char * - virQEMUCapsFindBinaryForArch(virArch hostarch, - virArch guestarch) - { -- char *ret; -+ char *ret = NULL; - const char *archstr; -- char *binary; -+ virArch target; - -- if (ARCH_IS_PPC64(guestarch)) -- archstr = virQEMUCapsArchToString(VIR_ARCH_PPC64); -- else -- archstr = virQEMUCapsArchToString(guestarch); -+ /* First attempt: try the guest architecture as it is */ -+ archstr = virQEMUCapsArchToString(guestarch); -+ if ((ret = virQEMUCapsFindBinary("qemu-system-%s", archstr)) != NULL) -+ goto out; - -- if (virAsprintf(&binary, "qemu-system-%s", archstr) < 0) -- return NULL; -- -- ret = virFindFileInPath(binary); -- VIR_FREE(binary); -- if (ret && !virFileIsExecutable(ret)) -- VIR_FREE(ret); -- -- if (guestarch == VIR_ARCH_ARMV7L && -- !ret && -- hostarch == VIR_ARCH_AARCH64) { -- ret = virFindFileInPath("qemu-system-aarch64"); -- if (ret && !virFileIsExecutable(ret)) -- VIR_FREE(ret); -- } -- -- if (guestarch == VIR_ARCH_I686 && -- !ret && -- hostarch == VIR_ARCH_X86_64) { -- ret = virFindFileInPath("qemu-system-x86_64"); -- if (ret && !virFileIsExecutable(ret)) -- VIR_FREE(ret); -+ /* Second attempt: try looking up by target instead */ -+ target = virQEMUCapsFindTarget(hostarch, guestarch); -+ if (target != guestarch) { -+ archstr = virQEMUCapsArchToString(target); -+ if ((ret = virQEMUCapsFindBinary("qemu-system-%s", archstr)) != NULL) -+ goto out; - } - -- if (guestarch == VIR_ARCH_I686 && -- !ret) { -- ret = virFindFileInPath("qemu"); -- if (ret && !virFileIsExecutable(ret)) -- VIR_FREE(ret); -+ /* Third attempt, i686 only: try 'qemu' */ -+ if (guestarch == VIR_ARCH_I686) { -+ if ((ret = virQEMUCapsFindBinary("%s", "qemu")) != NULL) -+ goto out; - } - -+ out: - return ret; - } - -@@ -3773,13 +3799,24 @@ virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache, - virArch arch) - { - virQEMUCapsPtr ret = NULL; -+ virArch target; - struct virQEMUCapsSearchData data = { .arch = arch }; - - virMutexLock(&cache->lock); - ret = virHashSearch(cache->binaries, virQEMUCapsCompareArch, &data); -+ if (!ret) { -+ /* If the first attempt at finding capabilities has failed, try -+ * again using the QEMU target as lookup key instead */ -+ target = virQEMUCapsFindTarget(virArchFromHost(), data.arch); -+ if (target != data.arch) { -+ data.arch = target; -+ ret = virHashSearch(cache->binaries, virQEMUCapsCompareArch, &data); -+ } -+ } -+ virObjectRef(ret); -+ virMutexUnlock(&cache->lock); -+ - VIR_DEBUG("Returning caps %p for arch %s", ret, virArchToString(arch)); -- virObjectRef(ret); -- virMutexUnlock(&cache->lock); - - return ret; - } --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-Forbid-config-when-topology-based-cpu-count-doesn-t-match-the-config.patch b/SOURCES/libvirt-qemu-Forbid-config-when-topology-based-cpu-count-doesn-t-match-the-config.patch new file mode 100644 index 0000000..cd8faf2 --- /dev/null +++ b/SOURCES/libvirt-qemu-Forbid-config-when-topology-based-cpu-count-doesn-t-match-the-config.patch @@ -0,0 +1,109 @@ +From c2cacc36d72728ed214e92928535611f79515695 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:20 -0400 +Subject: [PATCH] qemu: Forbid config when topology based cpu count doesn't + match the config + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +As of qemu commit: +commit a32ef3bfc12c8d0588f43f74dcc5280885bbdb30 +Author: Thomas Huth +Date: Wed Jul 22 15:59:50 2015 +0200 + + vl: Add another sanity check to smp_parse() function + +v2.4.0-952-ga32ef3b + +configuration where the maximum CPU count doesn't match the topology is +rejected. Prior to that only configurations where the topology would +contain more cpus than the maximum count would be rejected. + +Use QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS as a relevant recent enough +witness to avoid breaking old configs. + +(cherry picked from commit ffa536e0f885783b1577cf1378629980104ea946) +--- + src/qemu/qemu_domain.c | 38 ++++++++++++++++++++++++++++++++------ + 1 file changed, 32 insertions(+), 6 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 52e9c1e..be602ef 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -2308,12 +2308,21 @@ qemuDomainDefPostParse(virDomainDefPtr def, + static int + qemuDomainDefValidate(const virDomainDef *def, + virCapsPtr caps ATTRIBUTE_UNUSED, +- void *opaque ATTRIBUTE_UNUSED) ++ void *opaque) + { ++ virQEMUDriverPtr driver = opaque; ++ virQEMUCapsPtr qemuCaps = NULL; ++ size_t topologycpus; ++ int ret = -1; ++ ++ if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, ++ def->emulator))) ++ goto cleanup; ++ + if (def->mem.min_guarantee) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Parameter 'min_guarantee' not supported by QEMU.")); +- return -1; ++ goto cleanup; + } + + if (def->os.loader && +@@ -2324,7 +2333,7 @@ qemuDomainDefValidate(const virDomainDef *def, + if (!qemuDomainMachineIsQ35(def)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Secure boot is supported with q35 machine types only")); +- return -1; ++ goto cleanup; + } + + /* Now, technically it is possible to have secure boot on +@@ -2333,17 +2342,34 @@ qemuDomainDefValidate(const virDomainDef *def, + if (def->os.arch != VIR_ARCH_X86_64) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Secure boot is supported for x86_64 architecture only")); +- return -1; ++ goto cleanup; + } + + if (def->features[VIR_DOMAIN_FEATURE_SMM] != VIR_TRISTATE_SWITCH_ON) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Secure boot requires SMM feature enabled")); +- return -1; ++ goto cleanup; + } + } + +- return 0; ++ /* qemu as of 2.5.0 rejects SMP topologies that don't match the cpu count */ ++ if (def->cpu && def->cpu->sockets) { ++ topologycpus = def->cpu->sockets * def->cpu->cores * def->cpu->threads; ++ if (topologycpus != virDomainDefGetVcpusMax(def)) { ++ /* presence of query-hotpluggable-cpus should be a good enough witness */ ++ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("CPU topology doesn't match maximum vcpu count")); ++ goto cleanup; ++ } ++ } ++ } ++ ++ ret = 0; ++ ++ cleanup: ++ virObjectUnref(qemuCaps); ++ return ret; + } + + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Forbid-image-pre-creation-for-non-shared-storage-migration.patch b/SOURCES/libvirt-qemu-Forbid-image-pre-creation-for-non-shared-storage-migration.patch deleted file mode 100644 index 7f98859..0000000 --- a/SOURCES/libvirt-qemu-Forbid-image-pre-creation-for-non-shared-storage-migration.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 831d540170a2be5dcf89fd406b95f0449a5bcfce Mon Sep 17 00:00:00 2001 -Message-Id: <831d540170a2be5dcf89fd406b95f0449a5bcfce@dist-git> -From: Peter Krempa -Date: Wed, 5 Aug 2015 17:31:38 +0200 -Subject: [PATCH] qemu: Forbid image pre-creation for non-shared storage - migration - -Libvirt doesn't reliably know the location of the backing chain when -pre-creating images for non-shared migration. This isn't a problem for -full copy, but incremental copy requires the information. - -Forbid pre-creating the image in cases where incremental migration is -required. This limitation can perhaps be lifted once libvirt will fully -support loading of backing chain information from the XML. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1249587 -(cherry picked from commit 6da3b694cca436fcc38247aff9d1ce8e955292a8) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 16bb1af..cee82fa 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -1613,7 +1613,8 @@ qemuMigrationPrecreateStorage(virConnectPtr conn, - virDomainObjPtr vm, - qemuMigrationCookieNBDPtr nbd, - size_t nmigrate_disks, -- const char **migrate_disks) -+ const char **migrate_disks, -+ bool incremental) - { - int ret = -1; - size_t i = 0; -@@ -1644,6 +1645,13 @@ qemuMigrationPrecreateStorage(virConnectPtr conn, - continue; - } - -+ if (incremental) { -+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", -+ _("pre-creation of storage targets for incremental " -+ "storage migration is not supported")); -+ goto cleanup; -+ } -+ - VIR_DEBUG("Proceeding with disk source %s", NULLSTR(diskSrcPath)); - - if (qemuMigrationPrecreateDisk(conn, disk, nbd->disks[i].capacity) < 0) -@@ -3339,7 +3347,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, - } - - if (qemuMigrationPrecreateStorage(dconn, driver, vm, mig->nbd, -- nmigrate_disks, migrate_disks) < 0) -+ nmigrate_disks, migrate_disks, -+ !!(flags & VIR_MIGRATE_NON_SHARED_INC)) < 0) - goto cleanup; - - if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Implement-virtio-net-rx_queue_size.patch b/SOURCES/libvirt-qemu-Implement-virtio-net-rx_queue_size.patch new file mode 100644 index 0000000..d7e9b4f --- /dev/null +++ b/SOURCES/libvirt-qemu-Implement-virtio-net-rx_queue_size.patch @@ -0,0 +1,84 @@ +From 63481085bfecb5463c2a2de5cb7267d9baa51d52 Mon Sep 17 00:00:00 2001 +Message-Id: <63481085bfecb5463c2a2de5cb7267d9baa51d52@dist-git> +From: Michal Privoznik +Date: Sat, 10 Sep 2016 08:25:12 +0200 +Subject: [PATCH] qemu: Implement virtio-net rx_queue_size + +https://bugzilla.redhat.com/show_bug.cgi?id=1366989 + +Signed-off-by: Michal Privoznik +(cherry picked from commit 2692304c94e631720e8e9444e34a3e445e8da61a) +Signed-off-by: Michal Privoznik +--- + src/qemu/qemu_command.c | 8 +++++++ + .../qemuxml2argv-net-virtio-rxqueuesize.args | 25 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 2 ++ + 3 files changed, 35 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.args + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index de121c5..7abe213 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -3556,6 +3556,14 @@ qemuBuildNicDevStr(virDomainDefPtr def, + virBufferAsprintf(&buf, ",mq=on,vectors=%zu", 2 * vhostfdSize + 2); + } + } ++ if (usingVirtio && net->driver.virtio.rx_queue_size) { ++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("virtio rx_queue_size option is not supported with this QEMU binary")); ++ goto error; ++ } ++ virBufferAsprintf(&buf, ",rx_queue_size=%u", net->driver.virtio.rx_queue_size); ++ } + if (vlan == -1) + virBufferAsprintf(&buf, ",netdev=host%s", net->info.alias); + else +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.args +new file mode 100644 +index 0000000..7d275a7 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.args +@@ -0,0 +1,25 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1,sockets=1,cores=1,threads=1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot c \ ++-usb \ ++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ ++-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ ++-device virtio-net-pci,rx_queue_size=512,vlan=0,id=net0,mac=00:11:22:33:44:55,\ ++bus=pci.0,addr=0x3 \ ++-net user,vlan=0,name=hostnet0 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index f4054e7..df9c832 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1040,6 +1040,8 @@ mymain(void) + QEMU_CAPS_VIRTIO_S390); + DO_TEST("net-virtio-ccw", + QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); ++ DO_TEST("net-virtio-rxqueuesize", ++ QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE); + DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE); + DO_TEST("net-eth", NONE); + DO_TEST("net-eth-ifname", NONE); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Improve-error-message-in-virDomainGetVcpus.patch b/SOURCES/libvirt-qemu-Improve-error-message-in-virDomainGetVcpus.patch new file mode 100644 index 0000000..0cdd11b --- /dev/null +++ b/SOURCES/libvirt-qemu-Improve-error-message-in-virDomainGetVcpus.patch @@ -0,0 +1,37 @@ +From 940c4182a5132ec055f8516318353c5a3409e058 Mon Sep 17 00:00:00 2001 +Message-Id: <940c4182a5132ec055f8516318353c5a3409e058@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:05 -0400 +Subject: [PATCH] qemu: Improve error message in virDomainGetVcpus + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +If the VM is offline we can't retrieve the runtime statistical +information. Pinning could be retrieved but there are separate APIs for +that. + +(cherry picked from commit dd976f786cc241be8b62ee44a08ce27158fa386c) +--- + src/qemu/qemu_driver.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index d3cf267..57ca522 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -5290,9 +5290,8 @@ qemuDomainGetVcpus(virDomainPtr dom, + goto cleanup; + + if (!virDomainObjIsActive(vm)) { +- virReportError(VIR_ERR_OPERATION_INVALID, +- "%s", +- _("cannot list vcpu pinning for an inactive domain")); ++ virReportError(VIR_ERR_OPERATION_INVALID, "%s", ++ _("cannot retrieve vcpu information for inactive domain")); + goto cleanup; + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Inline-qemuGetHostdevPath.patch b/SOURCES/libvirt-qemu-Inline-qemuGetHostdevPath.patch deleted file mode 100644 index 9294657..0000000 --- a/SOURCES/libvirt-qemu-Inline-qemuGetHostdevPath.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 8cd3af12f97b099168cd76e57648924e91c02dc7 Mon Sep 17 00:00:00 2001 -Message-Id: <8cd3af12f97b099168cd76e57648924e91c02dc7@dist-git> -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:54 -0400 -Subject: [PATCH] qemu: Inline qemuGetHostdevPath - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Since a future patch will need the device path generated when adding a -shared host device, remove the qemuAddSharedHostdev and inline the two -calls into qemuAddSharedHostdev and qemuRemoveSharedHostdev - -Signed-off-by: John Ferlan -(cherry picked from commit 3830795318d972dcce615748ef8558011c8b11bf) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 39 ++++++++++++++++----------------------- - 1 file changed, 16 insertions(+), 23 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index bf2ec1e..cc40dcb 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1267,43 +1267,30 @@ qemuGetHostdevPath(virDomainHostdevDefPtr hostdev) - } - - --static char * --qemuGetSharedHostdevKey(virDomainHostdevDefPtr hostdev) --{ -- char *key = NULL; -- char *dev_path = NULL; -- -- if (!(dev_path = qemuGetHostdevPath(hostdev))) -- goto cleanup; -- -- if (!(key = qemuGetSharedDeviceKey(dev_path))) -- goto cleanup; -- -- cleanup: -- VIR_FREE(dev_path); -- -- return key; --} -- -- - static int - qemuAddSharedHostdev(virQEMUDriverPtr driver, - virDomainHostdevDefPtr hostdev, - const char *name) - { -+ char *dev_path = NULL; - char *key = NULL; - int ret = -1; - - if (!qemuIsSharedHostdev(hostdev)) - return 0; - -- if (!(key = qemuGetSharedHostdevKey(hostdev))) -- return -1; -+ if (!(dev_path = qemuGetHostdevPath(hostdev))) -+ goto cleanup; -+ -+ if (!(key = qemuGetSharedDeviceKey(dev_path))) -+ goto cleanup; - - qemuDriverLock(driver); - ret = qemuSharedDeviceEntryInsert(driver, key, name); - qemuDriverUnlock(driver); - -+ cleanup: -+ VIR_FREE(dev_path); - VIR_FREE(key); - return ret; - } -@@ -1392,19 +1379,25 @@ qemuRemoveSharedHostdev(virQEMUDriverPtr driver, - virDomainHostdevDefPtr hostdev, - const char *name) - { -+ char *dev_path = NULL; - char *key = NULL; - int ret; - - if (!qemuIsSharedHostdev(hostdev)) - return 0; - -- if (!(key = qemuGetSharedHostdevKey(hostdev))) -- return -1; -+ if (!(dev_path = qemuGetHostdevPath(hostdev))) -+ goto cleanup; -+ -+ if (!(key = qemuGetSharedDeviceKey(dev_path))) -+ goto cleanup; - - qemuDriverLock(driver); - ret = qemuSharedDeviceEntryRemove(driver, key, name); - qemuDriverUnlock(driver); - -+ cleanup: -+ VIR_FREE(dev_path); - VIR_FREE(key); - return ret; - } --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_E1000.patch b/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_E1000.patch deleted file mode 100644 index 57646a4..0000000 --- a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_E1000.patch +++ /dev/null @@ -1,211 +0,0 @@ -From e3f9eca39518a48a31bb3d62c468df34b9448452 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Fri, 11 Sep 2015 17:00:18 +0200 -Subject: [PATCH] qemu: Introduce QEMU_CAPS_DEVICE_E1000 - -This capability can be used to detect whether or not the QEMU -binary supports the e1000 network device. - -(cherry picked from commit fb58318d7f2c05df4d1fc497d96e5718951e9e89) - -Conflicts: - src/qemu/qemu_capabilities.h - tests/qemuhelptest.c - -Conflicts are caused by the fact that some members are missing from -the virQEMUCaps enumeration because the relevant commits have not -been backported. - -The value of QEMU_CAPS_DEVICE_E1000 has been changed from 197 to 193 -to avoid making the enumeration sparse. - -The test program has been updated accordingly as well, removing any -reference to capabilities that have not been backported. - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1254044 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 2 ++ - src/qemu/qemu_capabilities.h | 1 + - tests/qemucapabilitiesdata/caps_1.2.2-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.3.1-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.4.2-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.5.3-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.6.0-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 + - tests/qemucapabilitiesdata/caps_2.1.1-1.caps | 1 + - tests/qemuhelptest.c | 18 ++++++++++++------ - 10 files changed, 22 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 69259f5..927b3f9 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -289,6 +289,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, - "vhost-user-multiqueue", /* 190 */ - "migration-event", - "rtl8139", -+ "e1000", - ); - - -@@ -1571,6 +1572,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { - { "pc-dimm", QEMU_CAPS_DEVICE_PC_DIMM }, - { "pci-serial", QEMU_CAPS_DEVICE_PCI_SERIAL }, - { "rtl8139", QEMU_CAPS_DEVICE_RTL8139 }, -+ { "e1000", QEMU_CAPS_DEVICE_E1000 }, - }; - - static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = { -diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h -index 2762cec..a876eb4 100644 ---- a/src/qemu/qemu_capabilities.h -+++ b/src/qemu/qemu_capabilities.h -@@ -232,6 +232,7 @@ typedef enum { - QEMU_CAPS_VHOSTUSER_MULTIQUEUE = 190, /* vhost-user with -netdev queues= */ - QEMU_CAPS_MIGRATION_EVENT = 191, /* MIGRATION event */ - QEMU_CAPS_DEVICE_RTL8139 = 192, /* -device rtl8139 */ -+ QEMU_CAPS_DEVICE_E1000 = 193, /* -device e1000 */ - - QEMU_CAPS_LAST, /* this must always be the last item */ - } virQEMUCapsFlags; -diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -index fd44748..f2fefab 100644 ---- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -@@ -121,4 +121,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -index 0730eab..5e3bdeb 100644 ---- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -@@ -136,4 +136,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -index 66bd901..e8979a2 100644 ---- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -@@ -137,4 +137,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -index fb7a8b0..7a108a1 100644 ---- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -@@ -146,4 +146,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -index 250ef4e..2084f80 100644 ---- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -@@ -152,4 +152,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -index a8850b8..5b2087d 100644 ---- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -@@ -152,4 +152,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -index 705ee65..4b637d4 100644 ---- a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -+++ b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -@@ -168,4 +168,5 @@ - - - -+ - -diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c -index a481693..9b1515e 100644 ---- a/tests/qemuhelptest.c -+++ b/tests/qemuhelptest.c -@@ -410,7 +410,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_NET, - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_PCI_BRIDGE, -- QEMU_CAPS_DEVICE_RTL8139); -+ QEMU_CAPS_DEVICE_RTL8139, -+ QEMU_CAPS_DEVICE_E1000); - DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -526,7 +527,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_STORAGE, - QEMU_CAPS_HOST_PCI_MULTIDOMAIN, - QEMU_CAPS_DEVICE_IVSHMEM, -- QEMU_CAPS_DEVICE_RTL8139); -+ QEMU_CAPS_DEVICE_RTL8139, -+ QEMU_CAPS_DEVICE_E1000); - DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -594,7 +596,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_NET, - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_PCI_BRIDGE, -- QEMU_CAPS_DEVICE_RTL8139); -+ QEMU_CAPS_DEVICE_RTL8139, -+ QEMU_CAPS_DEVICE_E1000); - DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -670,7 +673,8 @@ mymain(void) - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_USB_STORAGE, -- QEMU_CAPS_DEVICE_RTL8139); -+ QEMU_CAPS_DEVICE_RTL8139, -+ QEMU_CAPS_DEVICE_E1000); - DO_TEST("qemu-1.0", 1000000, 0, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -758,7 +762,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_STORAGE, - QEMU_CAPS_SPLASH_TIMEOUT, - QEMU_CAPS_DEVICE_IVSHMEM, -- QEMU_CAPS_DEVICE_RTL8139); -+ QEMU_CAPS_DEVICE_RTL8139, -+ QEMU_CAPS_DEVICE_E1000); - DO_TEST("qemu-1.1.0", 1001000, 0, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -859,7 +864,8 @@ mymain(void) - QEMU_CAPS_OBJECT_USB_AUDIO, - QEMU_CAPS_SPLASH_TIMEOUT, - QEMU_CAPS_DEVICE_IVSHMEM, -- QEMU_CAPS_DEVICE_RTL8139); -+ QEMU_CAPS_DEVICE_RTL8139, -+ QEMU_CAPS_DEVICE_E1000); - DO_TEST_FULL("qemu-1.2.0", 1002000, 0, 0, VIR_ERR_CONFIG_UNSUPPORTED, - QEMU_CAPS_LAST); - DO_TEST_FULL("qemu-kvm-1.2.0", 1002000, 1, 0, VIR_ERR_CONFIG_UNSUPPORTED, --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_RTL8139.patch b/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_RTL8139.patch deleted file mode 100644 index cf16885..0000000 --- a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_RTL8139.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 4a5223042084155fafe5b54bd07fd0be106d123b Mon Sep 17 00:00:00 2001 -Message-Id: <4a5223042084155fafe5b54bd07fd0be106d123b@dist-git> -From: Andrea Bolognani -Date: Fri, 11 Sep 2015 17:00:17 +0200 -Subject: [PATCH] qemu: Introduce QEMU_CAPS_DEVICE_RTL8139 - -This capability can be used to detect whether or not the QEMU -binary supports the rtl8139 network device. - -(cherry picked from commit b8d545a8b88f03b1a4c30d272a4561d6adbfcd60) - -Conflicts: - src/qemu/qemu_capabilities.c - src/qemu/qemu_capabilities.h - tests/qemucapabilitiesdata/caps_1.2.2-1.caps - tests/qemucapabilitiesdata/caps_1.3.1-1.caps - tests/qemucapabilitiesdata/caps_1.4.2-1.caps - tests/qemucapabilitiesdata/caps_1.5.3-1.caps - tests/qemucapabilitiesdata/caps_1.6.0-1.caps - tests/qemucapabilitiesdata/caps_1.6.50-1.caps - tests/qemucapabilitiesdata/caps_2.1.1-1.caps - tests/qemuhelptest.c - -Conflicts are caused by the fact that some members are missing from -the virQEMUCaps enumeration because the relevant commits have not -been backported. - -The value of QEMU_CAPS_DEVICE_RTL8139 has been changed from 196 to -192 to avoid making the enumeration sparse. - -The test program and data have been updated accordingly as well, -removing any reference to capabilities that have not been backported. - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1254044 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 2 ++ - src/qemu/qemu_capabilities.h | 1 + - tests/qemucapabilitiesdata/caps_1.2.2-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.3.1-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.4.2-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.5.3-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.6.0-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 + - tests/qemucapabilitiesdata/caps_2.1.1-1.caps | 1 + - tests/qemuhelptest.c | 18 ++++++++++++------ - 10 files changed, 22 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index be5384f..69259f5 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -288,6 +288,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, - - "vhost-user-multiqueue", /* 190 */ - "migration-event", -+ "rtl8139", - ); - - -@@ -1569,6 +1570,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { - { "ivshmem", QEMU_CAPS_DEVICE_IVSHMEM }, - { "pc-dimm", QEMU_CAPS_DEVICE_PC_DIMM }, - { "pci-serial", QEMU_CAPS_DEVICE_PCI_SERIAL }, -+ { "rtl8139", QEMU_CAPS_DEVICE_RTL8139 }, - }; - - static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = { -diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h -index f77bd06..2762cec 100644 ---- a/src/qemu/qemu_capabilities.h -+++ b/src/qemu/qemu_capabilities.h -@@ -231,6 +231,7 @@ typedef enum { - QEMU_CAPS_CPU_AARCH64_OFF = 189, /* -cpu ...,aarch64=off */ - QEMU_CAPS_VHOSTUSER_MULTIQUEUE = 190, /* vhost-user with -netdev queues= */ - QEMU_CAPS_MIGRATION_EVENT = 191, /* MIGRATION event */ -+ QEMU_CAPS_DEVICE_RTL8139 = 192, /* -device rtl8139 */ - - QEMU_CAPS_LAST, /* this must always be the last item */ - } virQEMUCapsFlags; -diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -index 30239df..fd44748 100644 ---- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -@@ -120,4 +120,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -index ea3d850..0730eab 100644 ---- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -@@ -135,4 +135,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -index 2c19ddc..66bd901 100644 ---- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -@@ -136,4 +136,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -index aadccd5..fb7a8b0 100644 ---- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -@@ -145,4 +145,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -index 3e81cbf..250ef4e 100644 ---- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -@@ -151,4 +151,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -index 84c357f..a8850b8 100644 ---- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -@@ -151,4 +151,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -index b1ee8df..705ee65 100644 ---- a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -+++ b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -@@ -167,4 +167,5 @@ - - - -+ - -diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c -index 507831c..a481693 100644 ---- a/tests/qemuhelptest.c -+++ b/tests/qemuhelptest.c -@@ -409,7 +409,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_SERIAL, - QEMU_CAPS_DEVICE_USB_NET, - QEMU_CAPS_DEVICE_USB_KBD, -- QEMU_CAPS_DEVICE_PCI_BRIDGE); -+ QEMU_CAPS_DEVICE_PCI_BRIDGE, -+ QEMU_CAPS_DEVICE_RTL8139); - DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -524,7 +525,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_USB_STORAGE, - QEMU_CAPS_HOST_PCI_MULTIDOMAIN, -- QEMU_CAPS_DEVICE_IVSHMEM); -+ QEMU_CAPS_DEVICE_IVSHMEM, -+ QEMU_CAPS_DEVICE_RTL8139); - DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -591,7 +593,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_SERIAL, - QEMU_CAPS_DEVICE_USB_NET, - QEMU_CAPS_DEVICE_USB_KBD, -- QEMU_CAPS_DEVICE_PCI_BRIDGE); -+ QEMU_CAPS_DEVICE_PCI_BRIDGE, -+ QEMU_CAPS_DEVICE_RTL8139); - DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -666,7 +669,8 @@ mymain(void) - QEMU_CAPS_DEVICE_CIRRUS_VGA, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_USB_KBD, -- QEMU_CAPS_DEVICE_USB_STORAGE); -+ QEMU_CAPS_DEVICE_USB_STORAGE, -+ QEMU_CAPS_DEVICE_RTL8139); - DO_TEST("qemu-1.0", 1000000, 0, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -753,7 +757,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_USB_STORAGE, - QEMU_CAPS_SPLASH_TIMEOUT, -- QEMU_CAPS_DEVICE_IVSHMEM); -+ QEMU_CAPS_DEVICE_IVSHMEM, -+ QEMU_CAPS_DEVICE_RTL8139); - DO_TEST("qemu-1.1.0", 1001000, 0, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -853,7 +858,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_STORAGE, - QEMU_CAPS_OBJECT_USB_AUDIO, - QEMU_CAPS_SPLASH_TIMEOUT, -- QEMU_CAPS_DEVICE_IVSHMEM); -+ QEMU_CAPS_DEVICE_IVSHMEM, -+ QEMU_CAPS_DEVICE_RTL8139); - DO_TEST_FULL("qemu-1.2.0", 1002000, 0, 0, VIR_ERR_CONFIG_UNSUPPORTED, - QEMU_CAPS_LAST); - DO_TEST_FULL("qemu-kvm-1.2.0", 1002000, 1, 0, VIR_ERR_CONFIG_UNSUPPORTED, --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_VIRTIO_NET.patch b/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_VIRTIO_NET.patch deleted file mode 100644 index 7a623b8..0000000 --- a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_VIRTIO_NET.patch +++ /dev/null @@ -1,210 +0,0 @@ -From a682106b5bda7c88f14b7505d1e10ed457728e68 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Fri, 11 Sep 2015 17:00:19 +0200 -Subject: [PATCH] qemu: Introduce QEMU_CAPS_DEVICE_VIRTIO_NET - -This capability can be used to detect whether or not the QEMU -binary supports the virtio-net-* network device. - -(cherry picked from commit fedbb015a9084aa4dfa674cdfd813865cd3542ad) - -Conflicts: - src/qemu/qemu_capabilities.h - -Conflicts are caused by the fact that some members are missing from -the virQEMUCaps enumeration because the relevant commits have not -been backported. - -The value of QEMU_CAPS_DEVICE_VIRTIO_NET has been changed from 198 -to 194 to avoid making the enumeration sparse. - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1254044 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 5 +++++ - src/qemu/qemu_capabilities.h | 1 + - tests/qemucapabilitiesdata/caps_1.2.2-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.3.1-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.4.2-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.5.3-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.6.0-1.caps | 1 + - tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 + - tests/qemucapabilitiesdata/caps_2.1.1-1.caps | 1 + - tests/qemuhelptest.c | 18 ++++++++++++------ - 10 files changed, 25 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 927b3f9..faebeac 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -290,6 +290,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, - "migration-event", - "rtl8139", - "e1000", -+ "virtio-net", - ); - - -@@ -1573,6 +1574,10 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { - { "pci-serial", QEMU_CAPS_DEVICE_PCI_SERIAL }, - { "rtl8139", QEMU_CAPS_DEVICE_RTL8139 }, - { "e1000", QEMU_CAPS_DEVICE_E1000 }, -+ { "virtio-net-pci", QEMU_CAPS_DEVICE_VIRTIO_NET }, -+ { "virtio-net-ccw", QEMU_CAPS_DEVICE_VIRTIO_NET }, -+ { "virtio-net-s390", QEMU_CAPS_DEVICE_VIRTIO_NET }, -+ { "virtio-net-device", QEMU_CAPS_DEVICE_VIRTIO_NET }, - }; - - static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = { -diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h -index a876eb4..8ba202e 100644 ---- a/src/qemu/qemu_capabilities.h -+++ b/src/qemu/qemu_capabilities.h -@@ -233,6 +233,7 @@ typedef enum { - QEMU_CAPS_MIGRATION_EVENT = 191, /* MIGRATION event */ - QEMU_CAPS_DEVICE_RTL8139 = 192, /* -device rtl8139 */ - QEMU_CAPS_DEVICE_E1000 = 193, /* -device e1000 */ -+ QEMU_CAPS_DEVICE_VIRTIO_NET = 194, /* -device virtio-net-* */ - - QEMU_CAPS_LAST, /* this must always be the last item */ - } virQEMUCapsFlags; -diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -index f2fefab..6fd45d5 100644 ---- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps -@@ -122,4 +122,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -index 5e3bdeb..1d25452 100644 ---- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps -@@ -137,4 +137,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -index e8979a2..96879fd 100644 ---- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps -@@ -138,4 +138,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -index 7a108a1..3fda753 100644 ---- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps -@@ -147,4 +147,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -index 2084f80..9203cc8 100644 ---- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps -@@ -153,4 +153,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -index 5b2087d..636daae 100644 ---- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps -@@ -153,4 +153,5 @@ - - - -+ - -diff --git a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -index 4b637d4..3fae0d0 100644 ---- a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -+++ b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps -@@ -169,4 +169,5 @@ - - - -+ - -diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c -index 9b1515e..f7f322e 100644 ---- a/tests/qemuhelptest.c -+++ b/tests/qemuhelptest.c -@@ -411,7 +411,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_RTL8139, -- QEMU_CAPS_DEVICE_E1000); -+ QEMU_CAPS_DEVICE_E1000, -+ QEMU_CAPS_DEVICE_VIRTIO_NET); - DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -528,7 +529,8 @@ mymain(void) - QEMU_CAPS_HOST_PCI_MULTIDOMAIN, - QEMU_CAPS_DEVICE_IVSHMEM, - QEMU_CAPS_DEVICE_RTL8139, -- QEMU_CAPS_DEVICE_E1000); -+ QEMU_CAPS_DEVICE_E1000, -+ QEMU_CAPS_DEVICE_VIRTIO_NET); - DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -597,7 +599,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_RTL8139, -- QEMU_CAPS_DEVICE_E1000); -+ QEMU_CAPS_DEVICE_E1000, -+ QEMU_CAPS_DEVICE_VIRTIO_NET); - DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -674,7 +677,8 @@ mymain(void) - QEMU_CAPS_DEVICE_USB_KBD, - QEMU_CAPS_DEVICE_USB_STORAGE, - QEMU_CAPS_DEVICE_RTL8139, -- QEMU_CAPS_DEVICE_E1000); -+ QEMU_CAPS_DEVICE_E1000, -+ QEMU_CAPS_DEVICE_VIRTIO_NET); - DO_TEST("qemu-1.0", 1000000, 0, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -763,7 +767,8 @@ mymain(void) - QEMU_CAPS_SPLASH_TIMEOUT, - QEMU_CAPS_DEVICE_IVSHMEM, - QEMU_CAPS_DEVICE_RTL8139, -- QEMU_CAPS_DEVICE_E1000); -+ QEMU_CAPS_DEVICE_E1000, -+ QEMU_CAPS_DEVICE_VIRTIO_NET); - DO_TEST("qemu-1.1.0", 1001000, 0, 0, - QEMU_CAPS_VNC_COLON, - QEMU_CAPS_NO_REBOOT, -@@ -865,7 +870,8 @@ mymain(void) - QEMU_CAPS_SPLASH_TIMEOUT, - QEMU_CAPS_DEVICE_IVSHMEM, - QEMU_CAPS_DEVICE_RTL8139, -- QEMU_CAPS_DEVICE_E1000); -+ QEMU_CAPS_DEVICE_E1000, -+ QEMU_CAPS_DEVICE_VIRTIO_NET); - DO_TEST_FULL("qemu-1.2.0", 1002000, 0, 0, VIR_ERR_CONFIG_UNSUPPORTED, - QEMU_CAPS_LAST); - DO_TEST_FULL("qemu-kvm-1.2.0", 1002000, 1, 0, VIR_ERR_CONFIG_UNSUPPORTED, --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Introduce-flags-in-qemuMigrationCompleted.patch b/SOURCES/libvirt-qemu-Introduce-flags-in-qemuMigrationCompleted.patch deleted file mode 100644 index 5a2a00d..0000000 --- a/SOURCES/libvirt-qemu-Introduce-flags-in-qemuMigrationCompleted.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 767c91832fa9f2497a10603153b980932fc472ec Mon Sep 17 00:00:00 2001 -Message-Id: <767c91832fa9f2497a10603153b980932fc472ec@dist-git> -From: Jiri Denemark -Date: Mon, 5 Oct 2015 14:36:15 +0200 -Subject: [PATCH] qemu: Introduce flags in qemuMigrationCompleted - -The function already has two bool parameters and we will need to add a -new one. Let's switch to flags to make the callers readable. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 2af983f4c42e8f0af95fe1eb464e14ba52bb1145) - -https://bugzilla.redhat.com/show_bug.cgi?id=1265902 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 23 +++++++++++++++++------ - 1 file changed, 17 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index e04459d..17c1276 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -2606,6 +2606,11 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, - } - - -+enum qemuMigrationCompletedFlags { -+ QEMU_MIGRATION_COMPLETED_ABORT_ON_ERROR = (1 << 0), -+ QEMU_MIGRATION_COMPLETED_CHECK_STORAGE = (1 << 1), -+}; -+ - /** - * Returns 1 if migration completed successfully, - * 0 if the domain is still being migrated, -@@ -2617,8 +2622,7 @@ qemuMigrationCompleted(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - virConnectPtr dconn, -- bool abort_on_error, -- bool storage) -+ unsigned int flags) - { - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; -@@ -2627,10 +2631,11 @@ qemuMigrationCompleted(virQEMUDriverPtr driver, - if (qemuMigrationCheckJobStatus(driver, vm, asyncJob) < 0) - goto error; - -- if (storage && qemuMigrationDriveMirrorReady(driver, vm) < 0) -+ if (flags & QEMU_MIGRATION_COMPLETED_CHECK_STORAGE && -+ qemuMigrationDriveMirrorReady(driver, vm) < 0) - goto error; - -- if (abort_on_error && -+ if (flags & QEMU_MIGRATION_COMPLETED_ABORT_ON_ERROR && - virDomainObjGetState(vm, &pauseReason) == VIR_DOMAIN_PAUSED && - pauseReason == VIR_DOMAIN_PAUSED_IOERROR) { - virReportError(VIR_ERR_OPERATION_FAILED, _("%s: %s"), -@@ -2677,11 +2682,17 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver, - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; - bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); -+ unsigned int flags = 0; - int rv; - -+ if (abort_on_error) -+ flags |= QEMU_MIGRATION_COMPLETED_ABORT_ON_ERROR; -+ if (storage) -+ flags |= QEMU_MIGRATION_COMPLETED_CHECK_STORAGE; -+ - jobInfo->type = VIR_DOMAIN_JOB_UNBOUNDED; -- while ((rv = qemuMigrationCompleted(driver, vm, asyncJob, dconn, -- abort_on_error, storage)) != 1) { -+ while ((rv = qemuMigrationCompleted(driver, vm, asyncJob, -+ dconn, flags)) != 1) { - if (rv < 0) - return rv; - --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Introduce-helper-qemuDomainSecretDiskCapable.patch b/SOURCES/libvirt-qemu-Introduce-helper-qemuDomainSecretDiskCapable.patch new file mode 100644 index 0000000..9695095 --- /dev/null +++ b/SOURCES/libvirt-qemu-Introduce-helper-qemuDomainSecretDiskCapable.patch @@ -0,0 +1,73 @@ +From 48aa8017cfcb6ebdb18cc455deae9a76fb035e11 Mon Sep 17 00:00:00 2001 +Message-Id: <48aa8017cfcb6ebdb18cc455deae9a76fb035e11@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:50 -0400 +Subject: [PATCH] qemu: Introduce helper qemuDomainSecretDiskCapable + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Introduce a helper to help determine if a disk src could be possibly used +for a disk secret... Going to need this for hot unplug. + +Signed-off-by: John Ferlan +(cherry picked from commit 60c40ce3be0c123a26ef83dbf4022706579da7a3) +--- + src/qemu/qemu_domain.c | 20 +++++++++++++++----- + src/qemu/qemu_domain.h | 3 +++ + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 8b0f847..f298366 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -973,6 +973,20 @@ qemuDomainSecretDiskDestroy(virDomainDiskDefPtr disk) + } + + ++bool ++qemuDomainSecretDiskCapable(virStorageSourcePtr src) ++{ ++ if (!virStorageSourceIsEmpty(src) && ++ virStorageSourceGetActualType(src) == VIR_STORAGE_TYPE_NETWORK && ++ src->auth && ++ (src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI || ++ src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)) ++ return true; ++ ++ return false; ++} ++ ++ + /* qemuDomainSecretDiskPrepare: + * @conn: Pointer to connection + * @priv: pointer to domain private object +@@ -990,11 +1004,7 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + virStorageSourcePtr src = disk->src; + qemuDomainSecretInfoPtr secinfo = NULL; + +- if (conn && !virStorageSourceIsEmpty(src) && +- virStorageSourceGetActualType(src) == VIR_STORAGE_TYPE_NETWORK && +- src->auth && +- (src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI || +- src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)) { ++ if (conn && qemuDomainSecretDiskCapable(src)) { + + virSecretUsageType secretUsageType = VIR_SECRET_USAGE_TYPE_ISCSI; + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index b71a28d..bbec0d4 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -671,6 +671,9 @@ void qemuDomainMasterKeyRemove(qemuDomainObjPrivatePtr priv); + void qemuDomainSecretDiskDestroy(virDomainDiskDefPtr disk) + ATTRIBUTE_NONNULL(1); + ++bool qemuDomainSecretDiskCapable(virStorageSourcePtr src) ++ ATTRIBUTE_NONNULL(1); ++ + int qemuDomainSecretDiskPrepare(virConnectPtr conn, + qemuDomainObjPrivatePtr priv, + virDomainDiskDefPtr disk) +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Introduce-qemuAliasFromHostdev.patch b/SOURCES/libvirt-qemu-Introduce-qemuAliasFromHostdev.patch new file mode 100644 index 0000000..297a714 --- /dev/null +++ b/SOURCES/libvirt-qemu-Introduce-qemuAliasFromHostdev.patch @@ -0,0 +1,71 @@ +From 7b5a14e1402fe13052f1d632d3f95307ea829a75 Mon Sep 17 00:00:00 2001 +Message-Id: <7b5a14e1402fe13052f1d632d3f95307ea829a75@dist-git> +From: John Ferlan +Date: Tue, 2 Aug 2016 12:04:38 -0400 +Subject: [PATCH] qemu: Introduce qemuAliasFromHostdev + +https://bugzilla.redhat.com/show_bug.cgi?id=1289391 + +Introduce a common API to generate the alias for a host device + +(cherry picked from commit 647bc753d453dcf9ffafe95a3233cb4fbbffca5a) + +Resolved conflicts since upstream commit 'dd0dbe1d' is not present +(e.g. qemuAliasDiskDriveSkipPrefix) + +Signed-off-by: John Ferlan +--- + src/qemu/qemu_alias.c | 23 +++++++++++++++++++++++ + src/qemu/qemu_alias.h | 2 ++ + 2 files changed, 25 insertions(+) + +diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c +index 51a654a..a85d3d1 100644 +--- a/src/qemu/qemu_alias.c ++++ b/src/qemu/qemu_alias.c +@@ -467,6 +467,29 @@ qemuAliasFromDisk(const virDomainDiskDef *disk) + } + + ++/* qemuAliasFromHostdev ++ * @hostdev: Pointer to host device ++ * ++ * Generate and return a string containing a drive alias ++ */ ++char * ++qemuAliasFromHostdev(const virDomainHostdevDef *hostdev) ++{ ++ char *ret; ++ ++ if (!hostdev->info->alias) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("hostdev does not have an alias")); ++ return NULL; ++ } ++ ++ ignore_value(virAsprintf(&ret, "%s-%s", ++ virDomainDeviceAddressTypeToString(hostdev->info->type), ++ hostdev->info->alias)); ++ return ret; ++} ++ ++ + /* qemuDomainGetMasterKeyAlias: + * + * Generate and return the masterKey alias +diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h +index d1c6ba8..bb19710 100644 +--- a/src/qemu/qemu_alias.h ++++ b/src/qemu/qemu_alias.h +@@ -67,6 +67,8 @@ int qemuDomainDeviceAliasIndex(const virDomainDeviceInfo *info, + + char *qemuAliasFromDisk(const virDomainDiskDef *disk); + ++char *qemuAliasFromHostdev(const virDomainHostdevDef *hostdev); ++ + char *qemuDomainGetMasterKeyAlias(void); + + char *qemuDomainGetSecretAESAlias(const char *srcalias, +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Introduce-qemuDomainMachineIsS390CCW.patch b/SOURCES/libvirt-qemu-Introduce-qemuDomainMachineIsS390CCW.patch deleted file mode 100644 index ecb2c6d..0000000 --- a/SOURCES/libvirt-qemu-Introduce-qemuDomainMachineIsS390CCW.patch +++ /dev/null @@ -1,134 +0,0 @@ -From f7b5000e807b3907165edd784fcf59a682d1d5ad Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Fri, 4 Sep 2015 08:55:45 -0400 -Subject: [PATCH] qemu: Introduce qemuDomainMachineIsS390CCW - -https://bugzilla.redhat.com/show_bug.cgi?id=1258361 - -Rather than have different usages of STR function in order to determine -whether the domain is s390-ccw or s390-ccw-virtio, make a single API -which will check the machine.os prefix. Then use the function. - -(cherry picked from commit d334c91751c8eea33abe8e92761433a145e38112) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 4 ++-- - src/qemu/qemu_domain.c | 6 ++++++ - src/qemu/qemu_domain.h | 1 + - src/qemu/qemu_hotplug.c | 12 ++++++------ - 4 files changed, 15 insertions(+), 8 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index f3e45a5..f8fb71e 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -1327,7 +1327,7 @@ qemuDomainAssignS390Addresses(virDomainDefPtr def, - virDomainCCWAddressSetPtr addrs = NULL; - qemuDomainObjPrivatePtr priv = NULL; - -- if (STREQLEN(def->os.machine, "s390-ccw", 8) && -+ if (qemuDomainMachineIsS390CCW(def) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { - qemuDomainPrimeVirtioDeviceAddresses( - def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW); -@@ -1826,7 +1826,7 @@ qemuDomainReleaseDeviceAddress(virDomainObjPtr vm, - devstr = info->alias; - - if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && -- STREQLEN(vm->def->os.machine, "s390-ccw", 8) && -+ qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW) && - virDomainCCWAddressReleaseAddr(priv->ccwaddrs, info) < 0) - VIR_WARN("Unable to release CCW address on %s", -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 943d727..66d8e3a 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3294,6 +3294,12 @@ qemuDomainMachineNeedsFDC(const virDomainDef *def) - } - - -+bool -+qemuDomainMachineIsS390CCW(const virDomainDef *def) -+{ -+ return STRPREFIX(def->os.machine, "s390-ccw"); -+} -+ - - /** - * qemuDomainUpdateCurrentMemorySize: -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index 2af7c59..91eaea1 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -469,6 +469,7 @@ virDomainChrSourceDefPtr qemuFindAgentConfig(virDomainDefPtr def); - bool qemuDomainMachineIsQ35(const virDomainDef *def); - bool qemuDomainMachineIsI440FX(const virDomainDef *def); - bool qemuDomainMachineNeedsFDC(const virDomainDef *def); -+bool qemuDomainMachineIsS390CCW(const virDomainDef *def); - - int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, - virDomainObjPtr vm); -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index aabdb78..b79fc56 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -326,7 +326,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - const char *src = virDomainDiskGetSource(disk); - - if (!disk->info.type) { -- if (STREQLEN(vm->def->os.machine, "s390-ccw", 8) && -+ if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) - disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) -@@ -443,7 +443,7 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, - - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { - if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { -- if (STRPREFIX(vm->def->os.machine, "s390-ccw") && -+ if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) - controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) -@@ -991,7 +991,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, - goto cleanup; - } - -- if (STREQLEN(vm->def->os.machine, "s390-ccw", 8) && -+ if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { - net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - if (virDomainCCWAddressAssign(&net->info, priv->ccwaddrs, -@@ -1657,7 +1657,7 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, - return -1; - - if (rng->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { -- if (STRPREFIX(vm->def->os.machine, "s390-ccw") && -+ if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { - rng->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) { -@@ -3415,7 +3415,7 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver, - goto cleanup; - } - -- if (STREQLEN(vm->def->os.machine, "s390-ccw", 8) && -+ if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { - if (!virDomainDeviceAddressIsValid(&detach->info, - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)) { -@@ -3945,7 +3945,7 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, - virDomainNetGetActualHostdev(detach)); - goto cleanup; - } -- if (STREQLEN(vm->def->os.machine, "s390-ccw", 8) && -+ if (qemuDomainMachineIsS390CCW(vm->def) && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { - if (!virDomainDeviceAddressIsValid(&detach->info, - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)) { --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Introduce-qemuGetHostdevPath.patch b/SOURCES/libvirt-qemu-Introduce-qemuGetHostdevPath.patch deleted file mode 100644 index fd4ca44..0000000 --- a/SOURCES/libvirt-qemu-Introduce-qemuGetHostdevPath.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 352a07737fdc9a3c090eee92018f62865889c0ea Mon Sep 17 00:00:00 2001 -Message-Id: <352a07737fdc9a3c090eee92018f62865889c0ea@dist-git> -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:52 -0400 -Subject: [PATCH] qemu: Introduce qemuGetHostdevPath - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Introduce a convenience function to handle formulating the hostdev path - -Signed-off-by: John Ferlan -(cherry picked from commit 083cbe506b5134c36ecd544a2f9ac3d262951799) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 27 ++++++++++++++++++++------- - 1 file changed, 20 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index 1467427..a761ec5 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1213,13 +1213,12 @@ qemuIsSharedHostdev(virDomainHostdevDefPtr hostdev) - - - static char * --qemuGetSharedHostdevKey(virDomainHostdevDefPtr hostdev) -+qemuGetHostdevPath(virDomainHostdevDefPtr hostdev) - { - virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; - virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; - char *dev_name = NULL; - char *dev_path = NULL; -- char *key = NULL; - - if (!(dev_name = virSCSIDeviceGetDevName(NULL, - scsihostsrc->adapter, -@@ -1228,19 +1227,33 @@ qemuGetSharedHostdevKey(virDomainHostdevDefPtr hostdev) - scsihostsrc->unit))) - goto cleanup; - -- if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0) -- goto cleanup; -- -- if (!(key = qemuGetSharedDeviceKey(dev_path))) -- goto cleanup; -+ ignore_value(virAsprintf(&dev_path, "/dev/%s", dev_name)); - - cleanup: - VIR_FREE(dev_name); -+ return dev_path; -+} -+ -+ -+static char * -+qemuGetSharedHostdevKey(virDomainHostdevDefPtr hostdev) -+{ -+ char *key = NULL; -+ char *dev_path = NULL; -+ -+ if (!(dev_path = qemuGetHostdevPath(hostdev))) -+ goto cleanup; -+ -+ if (!(key = qemuGetSharedDeviceKey(dev_path))) -+ goto cleanup; -+ -+ cleanup: - VIR_FREE(dev_path); - - return key; - } - -+ - static int - qemuAddSharedHostdev(virQEMUDriverPtr driver, - virDomainHostdevDefPtr hostdev, --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Introduce-qemuIsSharedHostdev.patch b/SOURCES/libvirt-qemu-Introduce-qemuIsSharedHostdev.patch deleted file mode 100644 index c2edbe9..0000000 --- a/SOURCES/libvirt-qemu-Introduce-qemuIsSharedHostdev.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 8dc583373f79d4b8226eb510c6466759421cf8c7 Mon Sep 17 00:00:00 2001 -Message-Id: <8dc583373f79d4b8226eb510c6466759421cf8c7@dist-git> -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:51 -0400 -Subject: [PATCH] qemu: Introduce qemuIsSharedHostdev - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Add a single boolean function to handle whether the hostdev is shared or not. - -Use the new function for the qemu{Add|Remove}SharedHostdev calls as well -as qemuSetUnprivSGIO. NB: This third usage fixes a possible bug where -if this feature is enabled at some time in the future and the shareable flag -wasn't set, the sgio would have been erroneously set. - -Signed-off-by: John Ferlan -(cherry picked from commit 8c43258ed5fca8b285400135948300fa6f58f402) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 28 ++++++++++++++++------------ - 1 file changed, 16 insertions(+), 12 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index 7c2947c..1467427 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1201,6 +1201,17 @@ qemuAddSharedDisk(virQEMUDriverPtr driver, - } - - -+static bool -+qemuIsSharedHostdev(virDomainHostdevDefPtr hostdev) -+{ -+ return (hostdev->shareable && -+ (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && -+ hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && -+ hostdev->source.subsys.u.scsi.protocol != -+ VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)); -+} -+ -+ - static char * - qemuGetSharedHostdevKey(virDomainHostdevDefPtr hostdev) - { -@@ -1238,10 +1249,7 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver, - char *key = NULL; - int ret = -1; - -- if (!hostdev->shareable || -- !(hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && -- hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && -- hostdev->source.subsys.u.scsi.protocol != VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)) -+ if (!qemuIsSharedHostdev(hostdev)) - return 0; - - if (!(key = qemuGetSharedHostdevKey(hostdev))) -@@ -1342,10 +1350,7 @@ qemuRemoveSharedHostdev(virQEMUDriverPtr driver, - char *key = NULL; - int ret; - -- if (!hostdev->shareable || -- !(hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && -- hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && -- hostdev->source.subsys.u.scsi.protocol != VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)) -+ if (!qemuIsSharedHostdev(hostdev)) - return 0; - - if (!(key = qemuGetSharedHostdevKey(hostdev))) -@@ -1407,11 +1412,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) { - hostdev = dev->data.hostdev; - -+ if (!qemuIsSharedHostdev(hostdev)) -+ return 0; - -- if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && -- hostdev->source.subsys.type == -- VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && -- hostdev->source.subsys.u.scsi.sgio) { -+ if (hostdev->source.subsys.u.scsi.sgio) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("'sgio' is not supported for SCSI " - "generic device yet ")); --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Keep-numad-hint-after-daemon-restart.patch b/SOURCES/libvirt-qemu-Keep-numad-hint-after-daemon-restart.patch deleted file mode 100644 index a348b93..0000000 --- a/SOURCES/libvirt-qemu-Keep-numad-hint-after-daemon-restart.patch +++ /dev/null @@ -1,130 +0,0 @@ -From c2e77e9c6e246a254083ac0e30c9b0da209daac2 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Thu, 13 Aug 2015 15:11:47 +0200 -Subject: [PATCH] qemu: Keep numad hint after daemon restart - -https://bugzilla.redhat.com/show_bug.cgi?id=1162947 - -The numad hint stored in priv->autoNodeset is information that gets lost -during daemon restart. And because we would like to use that -information in the future, we also need to save it in the status XML. -For the sake of tests, we need to initialize nnumaCell_max to some -value, so that the restoration doesn't fail in our test suite. There is -no need to fill in the actual numa cell data since the recalculating -function virCapabilitiesGetCpusForNodemask() will not fail, it will just -skip filling the data in the bitmap which we don't use in tests anyway. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 8ce86722d78d8b2a1e7d9cb29571beb791c9f3d7) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 32 +++++++++++++++++++++++++++++++- - tests/qemuxml2xmltest.c | 3 ++- - tests/testutilsqemu.c | 2 ++ - 3 files changed, 35 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index ca41ca4..3b542f5 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -618,21 +618,33 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, - virBufferAddLit(buf, "\n"); - } - -+ if (priv->autoNodeset) { -+ char *nodeset = virBitmapFormat(priv->autoNodeset); -+ -+ if (!nodeset) -+ return -1; -+ -+ virBufferAsprintf(buf, "\n", nodeset); -+ VIR_FREE(nodeset); -+ } -+ - return 0; - } - - static int - qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, - virDomainObjPtr vm, -- virDomainDefParserConfigPtr config ATTRIBUTE_UNUSED) -+ virDomainDefParserConfigPtr config) - { - qemuDomainObjPrivatePtr priv = vm->privateData; -+ virQEMUDriverPtr driver = config->priv; - char *monitorpath; - char *tmp = NULL; - int n; - size_t i; - xmlNodePtr *nodes = NULL; - virQEMUCapsPtr qemuCaps = NULL; -+ virCapsPtr caps = NULL; - - if (VIR_ALLOC(priv->monConfig) < 0) - goto error; -@@ -805,15 +817,33 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, - } - VIR_FREE(nodes); - -+ if (!(caps = virQEMUDriverGetCapabilities(driver, false))) -+ goto error; -+ -+ if ((tmp = virXPathString("string(./numad/@nodeset)", ctxt))) { -+ if (virBitmapParse(tmp, 0, &priv->autoNodeset, -+ caps->host.nnumaCell_max) < 0) -+ goto error; -+ -+ if (!(priv->autoCpuset = virCapabilitiesGetCpusForNodemask(caps, -+ priv->autoNodeset))) -+ goto error; -+ } -+ virObjectUnref(caps); -+ caps = NULL; -+ VIR_FREE(tmp); -+ - return 0; - - error: - virDomainChrSourceDefFree(priv->monConfig); - priv->monConfig = NULL; - VIR_FREE(nodes); -+ VIR_FREE(tmp); - virStringFreeList(priv->qemuDevices); - priv->qemuDevices = NULL; - virObjectUnref(qemuCaps); -+ virObjectUnref(caps); - return -1; - } - -diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c -index 7a41a18..09806b2 100644 ---- a/tests/qemuxml2xmltest.c -+++ b/tests/qemuxml2xmltest.c -@@ -130,7 +130,8 @@ static const char testStatusXMLPrefix[] = - " \n" - " \n" - " \n" --" \n"; -+" \n" -+" \n"; - - static const char testStatusXMLSuffix[] = - "\n"; -diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c -index ceaabb6..a2f4299 100644 ---- a/tests/testutilsqemu.c -+++ b/tests/testutilsqemu.c -@@ -336,6 +336,8 @@ virCapsPtr testQemuCapsInit(void) - - caps->host.cpu = cpuDefault; - -+ caps->host.nnumaCell_max = 4; -+ - if ((machines = testQemuAllocMachines(&nmachines)) == NULL) - goto cleanup; - --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Label-correct-per-VM-path-when-starting.patch b/SOURCES/libvirt-qemu-Label-correct-per-VM-path-when-starting.patch deleted file mode 100644 index cc3c10c..0000000 --- a/SOURCES/libvirt-qemu-Label-correct-per-VM-path-when-starting.patch +++ /dev/null @@ -1,91 +0,0 @@ -From ebf1ada37c3566d07c6eb81a2dfe0135394b657a Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Wed, 26 Aug 2015 11:27:38 +0200 -Subject: [PATCH] qemu: Label correct per-VM path when starting - -Commit f1f68ca33433825ce0deed2d96f1990200bc6618 overused mdir_name() -event though it was not needed in the latest version, hence labelling -directory one level up in the tree and not the one it should. - -If anyone with SElinux managed to try run a domain with guest agent set -up, it's highly possible that they will need to run 'restorecon -F -/var/lib/libvirt/qemu/channel/target' to fix what was done. - -Reported-by: Luyao Huang -Signed-off-by: Martin Kletzander -(cherry picked from commit f674dc6794e0946f89313f477aa7886a4a28188e) - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 16 +++------------- - 1 file changed, 3 insertions(+), 13 deletions(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 8cda456..317ef78 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -46,7 +46,6 @@ - - #include "cpu/cpu.h" - #include "datatypes.h" --#include "dirname.h" - #include "virlog.h" - #include "virerror.h" - #include "viralloc.h" -@@ -4394,7 +4393,7 @@ int qemuProcessStart(virConnectPtr conn, - unsigned int hostdev_flags = 0; - size_t nnicindexes = 0; - int *nicindexes = NULL; -- char *tmppath = NULL, *tmpdirpath = NULL; -+ char *tmppath = NULL; - - VIR_DEBUG("vm=%p name=%s id=%d pid=%llu", - vm, vm->def->name, vm->def->id, -@@ -4741,15 +4740,11 @@ int qemuProcessStart(virConnectPtr conn, - if (virFileMakePath(tmppath) < 0) - goto cleanup; - -- if (!(tmpdirpath = mdir_name(tmppath))) -- goto cleanup; -- - if (virSecurityManagerDomainSetDirLabel(driver->securityManager, -- vm->def, tmpdirpath) < 0) -+ vm->def, tmppath) < 0) - goto cleanup; - - VIR_FREE(tmppath); -- VIR_FREE(tmpdirpath); - - if (virAsprintf(&tmppath, "%s/domain-%s", - cfg->channelTargetDir, vm->def->name) < 0) -@@ -4758,14 +4753,10 @@ int qemuProcessStart(virConnectPtr conn, - if (virFileMakePath(tmppath) < 0) - goto cleanup; - -- if (!(tmpdirpath = mdir_name(tmppath))) -- goto cleanup; -- - if (virSecurityManagerDomainSetDirLabel(driver->securityManager, -- vm->def, tmpdirpath) < 0) -+ vm->def, tmppath) < 0) - goto cleanup; - -- VIR_FREE(tmpdirpath); - VIR_FREE(tmppath); - - /* now that we know it is about to start call the hook if present */ -@@ -5122,7 +5113,6 @@ int qemuProcessStart(virConnectPtr conn, - * if we failed to initialize the now running VM. kill it off and - * pretend we never started it */ - VIR_FREE(tmppath); -- VIR_FREE(tmpdirpath); - VIR_FREE(nodeset); - virCommandFree(cmd); - VIR_FORCE_CLOSE(logfile); --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Make-memory-alignment-helper-more-universal.patch b/SOURCES/libvirt-qemu-Make-memory-alignment-helper-more-universal.patch deleted file mode 100644 index 0047973..0000000 --- a/SOURCES/libvirt-qemu-Make-memory-alignment-helper-more-universal.patch +++ /dev/null @@ -1,124 +0,0 @@ -From a8f30a71dbe0327b945e9a85e561cace913d17a4 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:38 +0200 -Subject: [PATCH] qemu: Make memory alignment helper more universal - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -Extract the size determination into a separate function and reuse it -across the memory device alignment functions. Since later we will need -to decide the alignment size according to architecture let's pass def to -the functions. - -(cherry picked from commit 3fb0819830cef3b269fbcdea217d7f1de4b62e87) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 26 ++++++++++++++++++-------- - src/qemu/qemu_domain.h | 3 ++- - src/qemu/qemu_hotplug.c | 4 ++-- - 3 files changed, 22 insertions(+), 11 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 9d9fb06..15cdf7b 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3158,30 +3158,39 @@ qemuDomainAgentAvailable(virDomainObjPtr vm, - } - - -+static unsigned long long -+qemuDomainGetMemorySizeAlignment(virDomainDefPtr def ATTRIBUTE_UNUSED) -+{ -+ /* Align memory size. QEMU requires rounding to next 4KiB block. -+ * We'll take the "traditional" path and round it to 1MiB*/ -+ -+ return 1024; -+} -+ -+ - int - qemuDomainAlignMemorySizes(virDomainDefPtr def) - { - unsigned long long mem; -+ unsigned long long align = qemuDomainGetMemorySizeAlignment(def); - size_t ncells = virDomainNumaGetNodeCount(def->numa); - size_t i; - - /* align NUMA cell sizes if relevant */ - for (i = 0; i < ncells; i++) { - mem = virDomainNumaGetNodeMemorySize(def->numa, i); -- virDomainNumaSetNodeMemorySize(def->numa, i, VIR_ROUND_UP(mem, 1024)); -+ virDomainNumaSetNodeMemorySize(def->numa, i, VIR_ROUND_UP(mem, align)); - } - - /* align initial memory size */ - mem = virDomainDefGetMemoryInitial(def); -- virDomainDefSetMemoryInitial(def, VIR_ROUND_UP(mem, 1024)); -+ virDomainDefSetMemoryInitial(def, VIR_ROUND_UP(mem, align)); - -- /* Align maximum memory size. QEMU requires rounding to next 4KiB block. -- * We'll take the "traditional" path and round it to 1MiB*/ -- def->mem.max_memory = VIR_ROUND_UP(def->mem.max_memory, 1024); -+ def->mem.max_memory = VIR_ROUND_UP(def->mem.max_memory, align); - - /* Align memory module sizes */ - for (i = 0; i < def->nmems; i++) -- qemuDomainMemoryDeviceAlignSize(def->mems[i]); -+ def->mems[i]->size = VIR_ROUND_UP(def->mems[i]->size, align); - - return 0; - } -@@ -3196,9 +3205,10 @@ qemuDomainAlignMemorySizes(virDomainDefPtr def) - * size so this should be safe). - */ - void --qemuDomainMemoryDeviceAlignSize(virDomainMemoryDefPtr mem) -+qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def, -+ virDomainMemoryDefPtr mem) - { -- mem->size = VIR_ROUND_UP(mem->size, 1024); -+ mem->size = VIR_ROUND_UP(mem->size, qemuDomainGetMemorySizeAlignment(def)); - } - - -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index 91eaea1..e283b58 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -462,7 +462,8 @@ bool qemuDomainHasBlockjob(virDomainObjPtr vm, bool copy_only) - ATTRIBUTE_NONNULL(1); - - int qemuDomainAlignMemorySizes(virDomainDefPtr def); --void qemuDomainMemoryDeviceAlignSize(virDomainMemoryDefPtr mem); -+void qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def, -+ virDomainMemoryDefPtr mem); - - virDomainChrSourceDefPtr qemuFindAgentConfig(virDomainDefPtr def); - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index 31c56ae..f702c9f 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -1801,7 +1801,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - if (!(devstr = qemuBuildMemoryDeviceStr(mem, vm->def, priv->qemuCaps))) - goto cleanup; - -- qemuDomainMemoryDeviceAlignSize(mem); -+ qemuDomainMemoryDeviceAlignSize(vm->def, mem); - - if (qemuBuildMemoryBackendStr(mem->size, mem->pagesize, - mem->targetNode, mem->sourceNodes, NULL, -@@ -4282,7 +4282,7 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver, - return -1; - } - -- qemuDomainMemoryDeviceAlignSize(memdef); -+ qemuDomainMemoryDeviceAlignSize(vm->def, memdef); - - if ((idx = virDomainMemoryFindByDef(vm->def, memdef)) < 0) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-Make-qemuDomainCheckDiskStartupPolicy-self-contained.patch b/SOURCES/libvirt-qemu-Make-qemuDomainCheckDiskStartupPolicy-self-contained.patch new file mode 100644 index 0000000..9458693 --- /dev/null +++ b/SOURCES/libvirt-qemu-Make-qemuDomainCheckDiskStartupPolicy-self-contained.patch @@ -0,0 +1,64 @@ +From 1690fc880503ccade44111950a331e5563733d93 Mon Sep 17 00:00:00 2001 +Message-Id: <1690fc880503ccade44111950a331e5563733d93@dist-git> +From: Martin Kletzander +Date: Tue, 2 Aug 2016 13:32:33 +0200 +Subject: [PATCH] qemu: Make qemuDomainCheckDiskStartupPolicy self-contained + +https://bugzilla.redhat.com/show_bug.cgi?id=1168453 + +There is an error reset following the function and check for +startupPolicy before that. Let's reflect those things inside that +function so that future code doesn't have to be that complex. + +Signed-off-by: Martin Kletzander +(cherry picked from commit e2705cfb6e50039a5f1d1c620f7ed18b37eca36d) +Signed-off-by: Martin Kletzander +--- + src/qemu/qemu_domain.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 158f3ef..383356d 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -4089,6 +4089,7 @@ qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver, + return -1; + break; + ++ case VIR_DOMAIN_STARTUP_POLICY_DEFAULT: + case VIR_DOMAIN_STARTUP_POLICY_MANDATORY: + return -1; + +@@ -4097,14 +4098,13 @@ qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver, + return -1; + break; + +- case VIR_DOMAIN_STARTUP_POLICY_DEFAULT: + case VIR_DOMAIN_STARTUP_POLICY_LAST: + /* this should never happen */ + break; + } + + qemuDomainCheckRemoveOptionalDisk(driver, vm, diskIndex); +- ++ virResetLastError(); + return 0; + } + +@@ -4138,12 +4138,8 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, + if (qemuDomainDetermineDiskChain(driver, vm, disk, true, true) >= 0) + continue; + +- if (disk->startupPolicy && +- qemuDomainCheckDiskStartupPolicy(driver, vm, idx, +- cold_boot) >= 0) { +- virResetLastError(); ++ if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) >= 0) + continue; +- } + + goto error; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Make-updating-stats-in-qemuMigrationCheckJobStatus-optional.patch b/SOURCES/libvirt-qemu-Make-updating-stats-in-qemuMigrationCheckJobStatus-optional.patch deleted file mode 100644 index 1a9938f..0000000 --- a/SOURCES/libvirt-qemu-Make-updating-stats-in-qemuMigrationCheckJobStatus-optional.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 71a02a994244ade016cadf1cc51b0cfa32482b8c Mon Sep 17 00:00:00 2001 -Message-Id: <71a02a994244ade016cadf1cc51b0cfa32482b8c@dist-git> -From: Jiri Denemark -Date: Mon, 5 Oct 2015 14:32:58 +0200 -Subject: [PATCH] qemu: Make updating stats in qemuMigrationCheckJobStatus - optional - -With new QEMU which supports migration events, -qemuMigrationCheckJobStatus needs to explicitly query QEMU for migration -statistics once migration is completed to make sure the caller sees -up-to-date statistics with both old and new QEMU. However, some callers -are not interested in the statistics at all and once we start waiting -for a completed migration on the destination host too, checking the -statistics would even fail. Let's push the decision whether to update -the statistics or not to the caller. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 829c62b7a5268a639116bc1cea51d1c6598f4bf4) - -https://bugzilla.redhat.com/show_bug.cgi?id=1265902 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 14 +++++++++----- - 1 file changed, 9 insertions(+), 5 deletions(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 17c1276..83614f5 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -2562,7 +2562,8 @@ qemuMigrationUpdateJobStatus(virQEMUDriverPtr driver, - static int - qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, - virDomainObjPtr vm, -- qemuDomainAsyncJob asyncJob) -+ qemuDomainAsyncJob asyncJob, -+ bool updateJobStats) - { - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; -@@ -2592,7 +2593,7 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, - - case VIR_DOMAIN_JOB_COMPLETED: - /* Fetch statistics of a completed migration */ -- if (events && -+ if (events && updateJobStats && - qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0) - return -1; - break; -@@ -2609,6 +2610,7 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, - enum qemuMigrationCompletedFlags { - QEMU_MIGRATION_COMPLETED_ABORT_ON_ERROR = (1 << 0), - QEMU_MIGRATION_COMPLETED_CHECK_STORAGE = (1 << 1), -+ QEMU_MIGRATION_COMPLETED_UPDATE_STATS = (1 << 2), - }; - - /** -@@ -2627,8 +2629,9 @@ qemuMigrationCompleted(virQEMUDriverPtr driver, - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; - int pauseReason; -+ bool updateStats = !!(flags & QEMU_MIGRATION_COMPLETED_UPDATE_STATS); - -- if (qemuMigrationCheckJobStatus(driver, vm, asyncJob) < 0) -+ if (qemuMigrationCheckJobStatus(driver, vm, asyncJob, updateStats) < 0) - goto error; - - if (flags & QEMU_MIGRATION_COMPLETED_CHECK_STORAGE && -@@ -2682,7 +2685,7 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver, - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; - bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); -- unsigned int flags = 0; -+ unsigned int flags = QEMU_MIGRATION_COMPLETED_UPDATE_STATS; - int rv; - - if (abort_on_error) -@@ -4352,7 +4355,8 @@ qemuMigrationRun(virQEMUDriverPtr driver, - * connection from qemu which may never be initiated. - */ - if (qemuMigrationCheckJobStatus(driver, vm, -- QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) -+ QEMU_ASYNC_JOB_MIGRATION_OUT, -+ false) < 0) - goto cancel; - - while ((fd = accept(spec->dest.unix_socket.sock, NULL, NULL)) < 0) { --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Memory-locking-is-only-required-for-KVM-guests-on-ppc64.patch b/SOURCES/libvirt-qemu-Memory-locking-is-only-required-for-KVM-guests-on-ppc64.patch new file mode 100644 index 0000000..f5f219c --- /dev/null +++ b/SOURCES/libvirt-qemu-Memory-locking-is-only-required-for-KVM-guests-on-ppc64.patch @@ -0,0 +1,51 @@ +From 90a2a917a15c5fc06f6b390690c134dc5f06e20c Mon Sep 17 00:00:00 2001 +Message-Id: <90a2a917a15c5fc06f6b390690c134dc5f06e20c@dist-git> +From: Andrea Bolognani +Date: Thu, 7 Jul 2016 13:59:34 +0200 +Subject: [PATCH] qemu: Memory locking is only required for KVM guests on ppc64 + +Due to the way the hardware works, KVM on ppc64 always requires +memory locking; however, that is not the case for non-KVM ppc64 +guests, eg. ppc64 guests that are running on x86_64 with TCG. + +Only require memory locking for ppc64 guests if they are using +KVM or, as it's the case for all architectures, they have host +devices assigned using VFIO. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1350772 + +(cherry picked from commit cd89d3451b8efcfed05ff1f4a91d9b252dbe26bc) +Signed-off-by: Andrea Bolognani +--- + src/qemu/qemu_domain.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 4aef7ab..2a42b1b 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5349,10 +5349,6 @@ qemuDomainRequiresMemLock(virDomainDefPtr def) + if (def->mem.locked) + return true; + +- /* ppc64 domains need to lock some memory even when VFIO is not used */ +- if (ARCH_IS_PPC64(def->os.arch)) +- return true; +- + for (i = 0; i < def->nhostdevs; i++) { + virDomainHostdevDefPtr dev = def->hostdevs[i]; + +@@ -5362,6 +5358,10 @@ qemuDomainRequiresMemLock(virDomainDefPtr def) + return true; + } + ++ /* ppc64 KVM domains need to lock some memory even when VFIO is not used */ ++ if (ARCH_IS_PPC64(def->os.arch) && def->virtType == VIR_DOMAIN_VIRT_KVM) ++ return true; ++ + return false; + } + +-- +2.9.0 + diff --git a/SOURCES/libvirt-qemu-Move-and-rename-qemuBufferEscapeComma.patch b/SOURCES/libvirt-qemu-Move-and-rename-qemuBufferEscapeComma.patch new file mode 100644 index 0000000..9fb5895 --- /dev/null +++ b/SOURCES/libvirt-qemu-Move-and-rename-qemuBufferEscapeComma.patch @@ -0,0 +1,177 @@ +From f7162a7c681e0dda365f1883736979d64ae7d2a5 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:56 -0400 +Subject: [PATCH] qemu: Move and rename qemuBufferEscapeComma + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Move to virqemu and rename to virQEMUBuildBufferEscapeComma. This can then +be shared by the storage driver when it builds the command line for qemuimg + +(cherry picked from commit 8215aab0036e65da47a2646f85749e9f5ea5d252) +Signed-off-by: John Ferlan +--- + src/libvirt_private.syms | 1 + + src/qemu/qemu_command.c | 33 +++++++++------------------------ + src/util/virqemu.c | 15 +++++++++++++++ + src/util/virqemu.h | 2 ++ + 4 files changed, 27 insertions(+), 24 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 62c9dc5..c205fd8 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2192,6 +2192,7 @@ virProcessWait; + + + # util/virqemu.h ++virQEMUBuildBufferEscapeComma; + virQEMUBuildObjectCommandlineFromJSON; + + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index b87d9c3..0ee1d34 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -152,21 +152,6 @@ VIR_ENUM_IMPL(qemuNumaPolicy, VIR_DOMAIN_NUMATUNE_MEM_LAST, + + + /** +- * qemuBufferEscapeComma: +- * @buf: buffer to append the escaped string +- * @str: the string to escape +- * +- * qemu requires that any values passed on the command line which contain +- * a ',' must escape it using an extra ',' as the escape character +- */ +-static void +-qemuBufferEscapeComma(virBufferPtr buf, const char *str) +-{ +- virBufferEscape(buf, ',', ",", "%s", str); +-} +- +- +-/** + * qemuBuildHasMasterKey: + * @qemuCaps: QEMU binary capabilities + * +@@ -221,7 +206,7 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, + + virCommandAddArg(cmd, "-object"); + virBufferAsprintf(&buf, "secret,id=%s,format=raw,file=", alias); +- qemuBufferEscapeComma(&buf, path); ++ virQEMUBuildBufferEscapeComma(&buf, path); + virCommandAddArgBuffer(cmd, &buf); + + ret = 0; +@@ -1233,7 +1218,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, + break; + } + +- qemuBufferEscapeComma(&opt, source); ++ virQEMUBuildBufferEscapeComma(&opt, source); + virBufferAddLit(&opt, ","); + + if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { +@@ -3776,7 +3761,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, + goto error; + } + virBufferAsprintf(&buf, "virtio-input-host%s,id=%s,evdev=", suffix, dev->info.alias); +- qemuBufferEscapeComma(&buf, dev->source.evdev); ++ virQEMUBuildBufferEscapeComma(&buf, dev->source.evdev); + break; + case VIR_DOMAIN_INPUT_TYPE_LAST: + break; +@@ -4778,7 +4763,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, + + case VIR_DOMAIN_CHR_TYPE_UNIX: + virBufferAsprintf(&buf, "socket,id=char%s,path=", alias); +- qemuBufferEscapeComma(&buf, dev->data.nix.path); ++ virQEMUBuildBufferEscapeComma(&buf, dev->data.nix.path); + if (dev->data.nix.listen) + virBufferAddLit(&buf, ",server,nowait"); + break; +@@ -6157,7 +6142,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, + virBuffer buf = VIR_BUFFER_INITIALIZER; + virCommandAddArg(cmd, "-acpitable"); + virBufferAddLit(&buf, "sig=SLIC,file="); +- qemuBufferEscapeComma(&buf, def->os.slic_table); ++ virQEMUBuildBufferEscapeComma(&buf, def->os.slic_table); + virCommandAddArgBuffer(cmd, &buf); + } + +@@ -6764,7 +6749,7 @@ qemuBuildNameCommandLine(virCommandPtr cmd, + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NAME_GUEST)) + virBufferAddLit(&buf, "guest="); + +- qemuBufferEscapeComma(&buf, def->name); ++ virQEMUBuildBufferEscapeComma(&buf, def->name); + + if (cfg->setProcessName && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_NAME_PROCESS)) +@@ -7313,7 +7298,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + virBufferAddLit(&opt, "unix:"); +- qemuBufferEscapeComma(&opt, glisten->socket); ++ virQEMUBuildBufferEscapeComma(&opt, glisten->socket); + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: +@@ -8890,10 +8875,10 @@ qemuBuildTPMBackendStr(const virDomainDef *def, + goto error; + } + virBufferAddLit(&buf, ",path="); +- qemuBufferEscapeComma(&buf, devset ? devset : tpmdev); ++ virQEMUBuildBufferEscapeComma(&buf, devset ? devset : tpmdev); + + virBufferAddLit(&buf, ",cancel-path="); +- qemuBufferEscapeComma(&buf, cancel_path); ++ virQEMUBuildBufferEscapeComma(&buf, cancel_path); + + VIR_FREE(devset); + VIR_FREE(cancel_path); +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 895168e..79a4292 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -140,3 +140,18 @@ virQEMUBuildObjectCommandlineFromJSON(const char *type, + virBufferFreeAndReset(&buf); + return ret; + } ++ ++ ++/** ++ * virQEMUBuildBufferEscapeComma: ++ * @buf: buffer to append the escaped string ++ * @str: the string to escape ++ * ++ * qemu requires that any values passed on the command line which contain ++ * a ',' must escape it using an extra ',' as the escape character ++ */ ++void ++virQEMUBuildBufferEscapeComma(virBufferPtr buf, const char *str) ++{ ++ virBufferEscape(buf, ',', ",", "%s", str); ++} +diff --git a/src/util/virqemu.h b/src/util/virqemu.h +index af4ec1d..1033412 100644 +--- a/src/util/virqemu.h ++++ b/src/util/virqemu.h +@@ -25,10 +25,12 @@ + # define __VIR_QEMU_H_ + + # include "internal.h" ++# include "virbuffer.h" + # include "virjson.h" + + char *virQEMUBuildObjectCommandlineFromJSON(const char *type, + const char *alias, + virJSONValuePtr props); + ++void virQEMUBuildBufferEscapeComma(virBufferPtr buf, const char *str); + #endif /* __VIR_QEMU_H_ */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Move-setting-of-encobjAdded-for-qemuDomainAttachSCSIDisk.patch b/SOURCES/libvirt-qemu-Move-setting-of-encobjAdded-for-qemuDomainAttachSCSIDisk.patch new file mode 100644 index 0000000..98841a6 --- /dev/null +++ b/SOURCES/libvirt-qemu-Move-setting-of-encobjAdded-for-qemuDomainAttachSCSIDisk.patch @@ -0,0 +1,34 @@ +From 3969a0495e73417fb15af3b0271ab8986eb56389 Mon Sep 17 00:00:00 2001 +Message-Id: <3969a0495e73417fb15af3b0271ab8986eb56389@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:43:02 -0400 +Subject: [PATCH] qemu: Move setting of encobjAdded for + qemuDomainAttachSCSIDisk + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +A post push realization that the boolean should be set inside the condition + +(cherry picked from commit 4f5debbeb4bf39049f212572a249da0483d6d3bb) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_hotplug.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 1fa1010..394fdf4 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -652,8 +652,8 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, + encobjProps = NULL; /* qemuMonitorAddObject consumes */ + if (rv < 0) + goto exit_monitor; ++ encobjAdded = true; + } +- encobjAdded = true; + + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) + goto exit_monitor; +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Move-setting-of-obj-bools-for-qemuDomainAttachVirtioDiskDevice.patch b/SOURCES/libvirt-qemu-Move-setting-of-obj-bools-for-qemuDomainAttachVirtioDiskDevice.patch new file mode 100644 index 0000000..03af374 --- /dev/null +++ b/SOURCES/libvirt-qemu-Move-setting-of-obj-bools-for-qemuDomainAttachVirtioDiskDevice.patch @@ -0,0 +1,45 @@ +From a67d5e7badd536eae52b575a02e9e146e42b26a2 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:43:01 -0400 +Subject: [PATCH] qemu: Move setting of obj bools for + qemuDomainAttachVirtioDiskDevice + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +A post push realization that the setting of the boolean needed to be +inside the if condition. + +(cherry picked from commit c144f14c120a3b4fd3b7cf87bf0bbc30183464a0) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_hotplug.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 6509867..1fa1010 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -383,8 +383,8 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + secobjProps = NULL; /* qemuMonitorAddObject consumes */ + if (rv < 0) + goto exit_monitor; ++ secobjAdded = true; + } +- secobjAdded = true; + + if (encobjProps) { + rv = qemuMonitorAddObject(priv->mon, "secret", encinfo->s.aes.alias, +@@ -392,8 +392,8 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, + encobjProps = NULL; /* qemuMonitorAddObject consumes */ + if (rv < 0) + goto exit_monitor; ++ encobjAdded = true; + } +- encobjAdded = true; + + if (qemuMonitorAddDrive(priv->mon, drivestr) < 0) + goto exit_monitor; +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Move-simplification-variable-to-begining-of-the-function.patch b/SOURCES/libvirt-qemu-Move-simplification-variable-to-begining-of-the-function.patch deleted file mode 100644 index b706411..0000000 --- a/SOURCES/libvirt-qemu-Move-simplification-variable-to-begining-of-the-function.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 5693792f3f900eacdfee55902726e1052d714a91 Mon Sep 17 00:00:00 2001 -Message-Id: <5693792f3f900eacdfee55902726e1052d714a91@dist-git> -From: Martin Kletzander -Date: Tue, 6 Oct 2015 15:20:32 +0200 -Subject: [PATCH] qemu: Move simplification variable to begining of the - function - -https://bugzilla.redhat.com/show_bug.cgi?id=1266856 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 04b57b4ae19cf299ac13efdd7d84de47b8d26e0e) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 6314976..53c9d01 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -4767,6 +4767,7 @@ qemuBuildMemoryBackendStr(unsigned long long size, - virBitmapPtr nodemask = NULL; - int ret = -1; - virJSONValuePtr props = NULL; -+ bool nodeSpecified = virDomainNumatuneNodeSpecified(def->numa, guestNode); - - *backendProps = NULL; - *backendType = NULL; -@@ -4919,7 +4920,6 @@ qemuBuildMemoryBackendStr(unsigned long long size, - } - - if (!hugepage && !pagesize) { -- bool nodeSpecified = virDomainNumatuneNodeSpecified(def->numa, guestNode); - - if ((userNodeset || nodeSpecified || force) && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) { --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Need-to-check-for-machine.os-when-using-ADDRESS_TYPE_CCW.patch b/SOURCES/libvirt-qemu-Need-to-check-for-machine.os-when-using-ADDRESS_TYPE_CCW.patch deleted file mode 100644 index 8acec47..0000000 --- a/SOURCES/libvirt-qemu-Need-to-check-for-machine.os-when-using-ADDRESS_TYPE_CCW.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 4e2eecec6b3d239e846594db23cc7004f43d5371 Mon Sep 17 00:00:00 2001 -Message-Id: <4e2eecec6b3d239e846594db23cc7004f43d5371@dist-git> -From: John Ferlan -Date: Fri, 4 Sep 2015 08:55:46 -0400 -Subject: [PATCH] qemu: Need to check for machine.os when using - ADDRESS_TYPE_CCW - -https://bugzilla.redhat.com/show_bug.cgi?id=1258361 - -When attaching a disk, controller, or rng using an address type ccw -or s390, we need to ensure the support is provided by both the machine.os -and the emulator capabilities (corollary to unconditional setting when -address was not provided for the correct machine.os and emulator. - -For an inactive guest, an addition followed by a start would cause the -startup to fail after qemu_command builds the command line and attempts -to start the guest. For an active guest, libvirtd would crash. - -(cherry picked from commit a39ab909081ab126990ca705852d38ff056b8f13) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ - src/qemu/qemu_command.h | 5 +++++ - src/qemu/qemu_hotplug.c | 12 ++++++++++++ - 3 files changed, 68 insertions(+) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index f8fb71e..47d91c6 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -3485,6 +3485,46 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk) - } - - -+/* Check whether the device address is using either 'ccw' or default s390 -+ * address format and whether that's "legal" for the current qemu and/or -+ * guest os.machine type. This is the corollary to the code which doesn't -+ * find the address type set using an emulator that supports either 'ccw' -+ * or s390 and sets the address type based on the capabilities. -+ * -+ * If the address is using 'ccw' or s390 and it's not supported, generate -+ * an error and return false; otherwise, return true. -+ */ -+bool -+qemuCheckCCWS390AddressSupport(virDomainDefPtr def, -+ virDomainDeviceInfo info, -+ virQEMUCapsPtr qemuCaps, -+ const char *devicename) -+{ -+ if (info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { -+ if (!qemuDomainMachineIsS390CCW(def)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("cannot use CCW address type for device " -+ "'%s' using machine type '%s'"), -+ devicename, def->os.machine); -+ return false; -+ } else if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_CCW)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("CCW address type is not supported by " -+ "this QEMU")); -+ return false; -+ } -+ } else if (info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) { -+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_S390)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("virtio S390 address type is not supported by " -+ "this QEMU")); -+ return false; -+ } -+ } -+ return true; -+} -+ -+ - /* Qemu 1.2 and later have a binary flag -enable-fips that must be - * used for VNC auth to obey FIPS settings; but the flag only - * exists on Linux, and with no way to probe for it via QMP. Our -@@ -4038,6 +4078,9 @@ qemuBuildDriveDevStr(virDomainDefPtr def, - } - } - -+ if (!qemuCheckCCWS390AddressSupport(def, disk->info, qemuCaps, disk->dst)) -+ goto error; -+ - if (disk->iothread && !qemuCheckIOThreads(def, qemuCaps, disk)) - goto error; - -@@ -4487,6 +4530,10 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, - virBuffer buf = VIR_BUFFER_INITIALIZER; - int model = def->model; - -+ if (!qemuCheckCCWS390AddressSupport(domainDef, def->info, qemuCaps, -+ "controller")) -+ return NULL; -+ - if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { - if ((qemuSetSCSIControllerModel(domainDef, qemuCaps, &model)) < 0) - return NULL; -@@ -6616,6 +6663,10 @@ qemuBuildRNGDevStr(virDomainDefPtr def, - goto error; - } - -+ if (!qemuCheckCCWS390AddressSupport(def, dev->info, qemuCaps, -+ dev->source.file)) -+ goto error; -+ - if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) - virBufferAsprintf(&buf, "virtio-rng-ccw,rng=obj%s,id=%s", - dev->info.alias, dev->info.alias); -diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h -index 6e0c3a3..8acbb3d 100644 ---- a/src/qemu/qemu_command.h -+++ b/src/qemu/qemu_command.h -@@ -311,4 +311,9 @@ int qemuCheckDiskConfig(virDomainDiskDefPtr disk); - - bool - qemuCheckFips(void); -+ -+bool qemuCheckCCWS390AddressSupport(virDomainDefPtr def, -+ virDomainDeviceInfo info, -+ virQEMUCapsPtr qemuCaps, -+ const char *devicename); - #endif /* __QEMU_COMMAND_H__*/ -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index b79fc56..cfb071b 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -331,6 +331,10 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) - disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; -+ } else { -+ if (!qemuCheckCCWS390AddressSupport(vm->def, disk->info, priv->qemuCaps, -+ disk->dst)) -+ goto cleanup; - } - - for (i = 0; i < vm->def->ndisks; i++) { -@@ -448,6 +452,10 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, - controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; - else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) - controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; -+ } else { -+ if (!qemuCheckCCWS390AddressSupport(vm->def, controller->info, -+ priv->qemuCaps, "controller")) -+ goto cleanup; - } - - if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE || -@@ -1663,6 +1671,10 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, - } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) { - rng->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; - } -+ } else { -+ if (!qemuCheckCCWS390AddressSupport(vm->def, rng->info, priv->qemuCaps, -+ rng->source.file)) -+ return -1; - } - - if (rng->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE || --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Need-to-free-fileprops-in-error-path.patch b/SOURCES/libvirt-qemu-Need-to-free-fileprops-in-error-path.patch new file mode 100644 index 0000000..3fae569 --- /dev/null +++ b/SOURCES/libvirt-qemu-Need-to-free-fileprops-in-error-path.patch @@ -0,0 +1,35 @@ +From 7b98b60edd4358f427e13136e18e072c93602952 Mon Sep 17 00:00:00 2001 +Message-Id: <7b98b60edd4358f427e13136e18e072c93602952@dist-git> +From: John Ferlan +Date: Tue, 2 Aug 2016 13:42:05 +0200 +Subject: [PATCH] qemu: Need to free fileprops in error path + +The virJSONValueObjectCreate only consumes the object on success, so on +failure we must free - from commit id 'f4441017' (found by Coverity). + +(cherry picked from commit 8ad7eceb20b2c08b09689b2c2ab755fc7d0acf16) + +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/qemu/qemu_command.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 88b5da1..0f9e2c4 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1038,8 +1038,10 @@ qemuGetDriveSourceProps(virStorageSourcePtr src, + } + + if (fileprops && +- virJSONValueObjectCreate(props, "a:file", fileprops, NULL) < 0) ++ virJSONValueObjectCreate(props, "a:file", fileprops, NULL) < 0) { ++ virJSONValueFree(fileprops); + return -1; ++ } + + return 0; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Properly-check-for-incoming-migration-job.patch b/SOURCES/libvirt-qemu-Properly-check-for-incoming-migration-job.patch deleted file mode 100644 index ce49dbd..0000000 --- a/SOURCES/libvirt-qemu-Properly-check-for-incoming-migration-job.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 1b5fbd7f3c62217601b062d55bfec70eec8a1b07 Mon Sep 17 00:00:00 2001 -Message-Id: <1b5fbd7f3c62217601b062d55bfec70eec8a1b07@dist-git> -From: Jiri Denemark -Date: Thu, 30 Jul 2015 15:53:41 +0200 -Subject: [PATCH] qemu: Properly check for incoming migration job - -In addition to checking the current asynchronous job -qemuMigrationJobIsActive reports an error if the current job does not -match the one we asked for. Let's just check the job directly since we -are not interested in the error in qemuProcessHandleMonitorEOF. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 40a6dd9c16f4760ae01919f7710476c4c9804f4f) - -https://bugzilla.redhat.com/show_bug.cgi?id=1242904 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 35b6513..31315b1 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -310,7 +310,7 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - auditReason = "failed"; - } - -- if (qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_IN)) -+ if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) - qemuMigrationErrorSave(driver, vm->def->name, - qemuMonitorLastError(priv->mon)); - --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Properly-reset-spiceMigration-flag.patch b/SOURCES/libvirt-qemu-Properly-reset-spiceMigration-flag.patch new file mode 100644 index 0000000..04bb490 --- /dev/null +++ b/SOURCES/libvirt-qemu-Properly-reset-spiceMigration-flag.patch @@ -0,0 +1,36 @@ +From 5f25c4bb92d3fd8a8da377a156c2d49c34a2431d Mon Sep 17 00:00:00 2001 +Message-Id: <5f25c4bb92d3fd8a8da377a156c2d49c34a2431d@dist-git> +From: Jiri Denemark +Date: Tue, 5 Jul 2016 10:07:24 +0200 +Subject: [PATCH] qemu: Properly reset spiceMigration flag + +Otherwise migration during which we didn't send client_migrate_info QMP +command will get stuck waiting for SPICE migration to finish if libvirtd +sent the QMP command in a previous migration attempt. + +Broken by bd7c8a69. + +https://bugzilla.redhat.com/show_bug.cgi?id=1151723 + +Signed-off-by: Jiri Denemark +(cherry picked from commit a16ea1a0f3e6b9eb8be4be7a664af76e47bbceba) +Signed-off-by: Jiri Denemark +--- + 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 0edcc04..4aef7ab 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -217,6 +217,7 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) + job->mask = QEMU_JOB_DEFAULT_MASK; + job->dump_memory_only = false; + job->abortJob = false; ++ job->spiceMigration = false; + job->spiceMigrated = false; + job->postcopyEnabled = false; + VIR_FREE(job->current); +-- +2.9.0 + diff --git a/SOURCES/libvirt-qemu-Refactor-qemuCheckSharedDisk-to-create-qemuCheckUnprivSGIO.patch b/SOURCES/libvirt-qemu-Refactor-qemuCheckSharedDisk-to-create-qemuCheckUnprivSGIO.patch deleted file mode 100644 index f457e2a..0000000 --- a/SOURCES/libvirt-qemu-Refactor-qemuCheckSharedDisk-to-create-qemuCheckUnprivSGIO.patch +++ /dev/null @@ -1,180 +0,0 @@ -From a9dc408532244f476ace6ca0d524ca7e99324507 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:53 -0400 -Subject: [PATCH] qemu: Refactor qemuCheckSharedDisk to create - qemuCheckUnprivSGIO - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Split out the current function in order to share the code with hostdev -in a future patch. Failure to match the expected sgio value against what -is stored will cause an error which the caller would need to handle since -only the caller has the disk (or eventually hostdev) specific data in -order to uniquely identify the disk in an error message. - -Signed-off-by: John Ferlan -(cherry picked from commit f6a5cbbfdcd1cd5354de40c923968235951dc879) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 130 ++++++++++++++++++++++++++++++++------------------- - 1 file changed, 81 insertions(+), 49 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index a761ec5..bf2ec1e 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1018,6 +1018,69 @@ qemuGetSharedDeviceKey(const char *device_path) - return key; - } - -+/* -+ * Make necessary checks for the need to check and for the current setting -+ * of the 'unpriv_sgio' value for the device_path passed. -+ * -+ * Returns: -+ * 0 - Success -+ * -1 - Some failure which would already have been messaged -+ * -2 - Mismatch with the "shared" sgio setting - needs to be messaged -+ * by caller since it has context of which type of disk resource is -+ * being used and in the future the hostdev information. -+ */ -+static int -+qemuCheckUnprivSGIO(virHashTablePtr sharedDevices, -+ const char *device_path, -+ int sgio) -+{ -+ char *sysfs_path = NULL; -+ char *key = NULL; -+ int val; -+ int ret = -1; -+ -+ if (!(sysfs_path = virGetUnprivSGIOSysfsPath(device_path, NULL))) -+ goto cleanup; -+ -+ /* It can't be conflict if unpriv_sgio is not supported by kernel. */ -+ if (!virFileExists(sysfs_path)) { -+ ret = 0; -+ goto cleanup; -+ } -+ -+ if (!(key = qemuGetSharedDeviceKey(device_path))) -+ goto cleanup; -+ -+ /* It can't be conflict if no other domain is sharing it. */ -+ if (!(virHashLookup(sharedDevices, key))) { -+ ret = 0; -+ goto cleanup; -+ } -+ -+ if (virGetDeviceUnprivSGIO(device_path, NULL, &val) < 0) -+ goto cleanup; -+ -+ /* Error message on failure needs to be handled in caller -+ * since there is more specific knowledge of device -+ */ -+ if (!((val == 0 && -+ (sgio == VIR_DOMAIN_DEVICE_SGIO_FILTERED || -+ sgio == VIR_DOMAIN_DEVICE_SGIO_DEFAULT)) || -+ (val == 1 && -+ sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED))) { -+ ret = -2; -+ goto cleanup; -+ } -+ -+ ret = 0; -+ -+ cleanup: -+ VIR_FREE(sysfs_path); -+ VIR_FREE(key); -+ return ret; -+} -+ -+ - /* Check if a shared device's setting conflicts with the conf - * used by other domain(s). Currently only checks the sgio - * setting. Note that this should only be called for disk with -@@ -1029,62 +1092,31 @@ static int - qemuCheckSharedDisk(virHashTablePtr sharedDevices, - virDomainDiskDefPtr disk) - { -- char *sysfs_path = NULL; -- char *key = NULL; -- int val; -- int ret = -1; -+ int ret; - - if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN) - return 0; - -- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(disk->src->path, NULL))) -- goto cleanup; -- -- /* It can't be conflict if unpriv_sgio is not supported by kernel. */ -- if (!virFileExists(sysfs_path)) { -- ret = 0; -- goto cleanup; -- } -- -- if (!(key = qemuGetSharedDeviceKey(disk->src->path))) -- goto cleanup; -- -- /* It can't be conflict if no other domain is sharing it. */ -- if (!(virHashLookup(sharedDevices, key))) { -- ret = 0; -- goto cleanup; -- } -- -- if (virGetDeviceUnprivSGIO(disk->src->path, NULL, &val) < 0) -- goto cleanup; -- -- if (!((val == 0 && -- (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_FILTERED || -- disk->sgio == VIR_DOMAIN_DEVICE_SGIO_DEFAULT)) || -- (val == 1 && -- disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED))) { -- -- if (virDomainDiskGetType(disk) == VIR_STORAGE_TYPE_VOLUME) { -- virReportError(VIR_ERR_OPERATION_INVALID, -- _("sgio of shared disk 'pool=%s' 'volume=%s' conflicts " -- "with other active domains"), -- disk->src->srcpool->pool, -- disk->src->srcpool->volume); -- } else { -- virReportError(VIR_ERR_OPERATION_INVALID, -- _("sgio of shared disk '%s' conflicts with other " -- "active domains"), disk->src->path); -+ if ((ret = qemuCheckUnprivSGIO(sharedDevices, disk->src->path, -+ disk->sgio)) < 0) { -+ if (ret == -2) { -+ if (virDomainDiskGetType(disk) == VIR_STORAGE_TYPE_VOLUME) { -+ virReportError(VIR_ERR_OPERATION_INVALID, -+ _("sgio of shared disk 'pool=%s' 'volume=%s' " -+ "conflicts with other active domains"), -+ disk->src->srcpool->pool, -+ disk->src->srcpool->volume); -+ } else { -+ virReportError(VIR_ERR_OPERATION_INVALID, -+ _("sgio of shared disk '%s' conflicts with " -+ "other active domains"), -+ disk->src->path); -+ } - } -- -- goto cleanup; -+ return -1; - } - -- ret = 0; -- -- cleanup: -- VIR_FREE(sysfs_path); -- VIR_FREE(key); -- return ret; -+ return 0; - } - - --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Refactor-qemuSetUnprivSGIO-return-values.patch b/SOURCES/libvirt-qemu-Refactor-qemuSetUnprivSGIO-return-values.patch deleted file mode 100644 index 40f4c13..0000000 --- a/SOURCES/libvirt-qemu-Refactor-qemuSetUnprivSGIO-return-values.patch +++ /dev/null @@ -1,65 +0,0 @@ -From d89912ddf6007ce5b8c3abef835b087dd5bfe359 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Thu, 9 Jul 2015 08:28:55 -0400 -Subject: [PATCH] qemu: Refactor qemuSetUnprivSGIO return values - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Set to ret = -1 and prove otherwise, like usual - -Signed-off-by: John Ferlan -(cherry picked from commit 931ac3cdb571b01968adc87bfddead67311677c2) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 12 +++++------- - 1 file changed, 5 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index cc40dcb..d41f166 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1434,7 +1434,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - char *sysfs_path = NULL; - const char *path = NULL; - int val = -1; -- int ret = 0; -+ int ret = -1; - - /* "sgio" is only valid for block disk; cdrom - * and floopy disk can have empty source. -@@ -1457,7 +1457,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("'sgio' is not supported for SCSI " - "generic device yet ")); -- ret = -1; - goto cleanup; - } - -@@ -1466,11 +1465,8 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - return 0; - } - -- sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL); -- if (sysfs_path == NULL) { -- ret = -1; -+ if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL))) - goto cleanup; -- } - - /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */ - val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED); -@@ -1481,7 +1477,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev) - */ - if ((virFileExists(sysfs_path) || val == 1) && - virSetDeviceUnprivSGIO(path, NULL, val) < 0) -- ret = -1; -+ goto cleanup; -+ -+ ret = 0; - - cleanup: - VIR_FREE(sysfs_path); --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Refresh-memory-size-only-on-fresh-starts.patch b/SOURCES/libvirt-qemu-Refresh-memory-size-only-on-fresh-starts.patch deleted file mode 100644 index a982351..0000000 --- a/SOURCES/libvirt-qemu-Refresh-memory-size-only-on-fresh-starts.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 7211ae6c2efef89d0c708abe54ca2c402f2a91af Mon Sep 17 00:00:00 2001 -Message-Id: <7211ae6c2efef89d0c708abe54ca2c402f2a91af@dist-git> -From: Peter Krempa -Date: Wed, 23 Sep 2015 15:03:14 +0200 -Subject: [PATCH] qemu: Refresh memory size only on fresh starts - -Qemu unfortunately doesn't update internal state right after migration -and so the actual balloon size as returned by 'query-balloon' are -invalid for a while after the CPUs are started after migration. If we'd -refresh our internal state at this point we would report invalid current -memory size until the next balloon event would arrive. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1242940 -(cherry picked from commit d7a0386e229176ec67531aac1412b8a98914da8e) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 301b9bf..ed01bf4 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -5049,7 +5049,8 @@ int qemuProcessStart(virConnectPtr conn, - /* Since CPUs were not started yet, the balloon could not return the memory - * to the host and thus cur_balloon needs to be updated so that GetXMLdesc - * and friends return the correct size in case they can't grab the job */ -- if (qemuProcessRefreshBalloonState(driver, vm, asyncJob) < 0) -+ if (!migrateFrom && !snapshot && -+ qemuProcessRefreshBalloonState(driver, vm, asyncJob) < 0) - goto cleanup; - - VIR_DEBUG("Detecting actual memory size for video device"); --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-Reject-migration-with-memory-hotplug-if-destination-doesn-t-support-it.patch b/SOURCES/libvirt-qemu-Reject-migration-with-memory-hotplug-if-destination-doesn-t-support-it.patch deleted file mode 100644 index 5781908..0000000 --- a/SOURCES/libvirt-qemu-Reject-migration-with-memory-hotplug-if-destination-doesn-t-support-it.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 5f602085f03840e9cef0b53d01ab6e9eaf126382 Mon Sep 17 00:00:00 2001 -Message-Id: <5f602085f03840e9cef0b53d01ab6e9eaf126382@dist-git> -From: Peter Krempa -Date: Fri, 31 Jul 2015 15:19:26 +0200 -Subject: [PATCH] qemu: Reject migration with memory-hotplug if destination - doesn't support it - -If destination libvirt doesn't support memory hotplug since all the -support was introduced by adding new elements the destination would -attempt to start qemu with an invalid configuration. The worse part is -that qemu might hang in such situation. - -Fix this by sending a required migration feature called 'memory-hotplug' -to the destination. If the destination doesn't recognize it it will fail -the migration. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1248350 -(cherry picked from commit 136f3de4112c75af0b38fc1946f44e3658ed1890) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index d789110..6386744 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -86,6 +86,7 @@ enum qemuMigrationCookieFlags { - QEMU_MIGRATION_COOKIE_FLAG_NETWORK, - QEMU_MIGRATION_COOKIE_FLAG_NBD, - QEMU_MIGRATION_COOKIE_FLAG_STATS, -+ QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG, - - QEMU_MIGRATION_COOKIE_FLAG_LAST - }; -@@ -98,7 +99,8 @@ VIR_ENUM_IMPL(qemuMigrationCookieFlag, - "persistent", - "network", - "nbd", -- "statistics"); -+ "statistics", -+ "memory-hotplug"); - - enum qemuMigrationCookieFeatures { - QEMU_MIGRATION_COOKIE_GRAPHICS = (1 << QEMU_MIGRATION_COOKIE_FLAG_GRAPHICS), -@@ -107,6 +109,7 @@ enum qemuMigrationCookieFeatures { - QEMU_MIGRATION_COOKIE_NETWORK = (1 << QEMU_MIGRATION_COOKIE_FLAG_NETWORK), - QEMU_MIGRATION_COOKIE_NBD = (1 << QEMU_MIGRATION_COOKIE_FLAG_NBD), - QEMU_MIGRATION_COOKIE_STATS = (1 << QEMU_MIGRATION_COOKIE_FLAG_STATS), -+ QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG = (1 << QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG), - }; - - typedef struct _qemuMigrationCookieGraphics qemuMigrationCookieGraphics; -@@ -1352,6 +1355,9 @@ qemuMigrationBakeCookie(qemuMigrationCookiePtr mig, - qemuMigrationCookieAddStatistics(mig, dom) < 0) - return -1; - -+ if (flags & QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG) -+ mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG; -+ - if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, mig))) - return -1; - -@@ -2974,6 +2980,11 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver, - } - } - -+ if (vm->def->mem.max_memory || -+ (vm->newDef && -+ vm->newDef->mem.max_memory)) -+ cookieFlags |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG; -+ - if (!(mig = qemuMigrationEatCookie(driver, vm, NULL, 0, 0))) - goto cleanup; - --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Reject-updating-unsupported-disk-information.patch b/SOURCES/libvirt-qemu-Reject-updating-unsupported-disk-information.patch deleted file mode 100644 index d623206..0000000 --- a/SOURCES/libvirt-qemu-Reject-updating-unsupported-disk-information.patch +++ /dev/null @@ -1,216 +0,0 @@ -From 3216788d3cd902dd31705cac5e91589b9b467543 Mon Sep 17 00:00:00 2001 -Message-Id: <3216788d3cd902dd31705cac5e91589b9b467543@dist-git> -From: Martin Kletzander -Date: Thu, 6 Aug 2015 13:10:54 +0200 -Subject: [PATCH] qemu: Reject updating unsupported disk information - -If one calls update-device with information that is not updatable, -libvirt reports success even though no data were updated. The example -used in the bug linked below uses updating device with -which, in my opinion, is a valid thing to request from user's -perspective. Mainly since we properly error out if user wants to update -such data on a network device for example. - -And since there are many things that might happen (update-device on disk -basically knows just how to change removable media), check for what's -changing and moreover, since the function might be usable in other -drivers (updating only disk path is a valid possibility) let's abstract -it for any two disks. - -We can't possibly check for everything since for many fields our code -does not properly differentiate between default and unspecified values. -Even though this could be changed, I don't feel like it's worth the -complexity so it's not the aim of this patch. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1007228 -(cherry picked from commit 717c99f3602354136ca97edca6afc8dce69aae85) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++ - src/conf/domain_conf.h | 2 + - src/libvirt_private.syms | 1 + - src/qemu/qemu_driver.c | 3 ++ - 4 files changed, 134 insertions(+) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 72d87dd..4fe38ae 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -5690,6 +5690,134 @@ virDomainDiskFindByBusAndDst(virDomainDefPtr def, - return NULL; - } - -+ -+/* -+ * Makes sure the @disk differs from @orig_disk only by the source -+ * path and nothing else. Fields that are being checked and the -+ * information whether they are nullable (may not be specified) or is -+ * taken from the virDomainDiskDefFormat() code. -+ */ -+bool -+virDomainDiskDiffersSourceOnly(virDomainDiskDefPtr disk, -+ virDomainDiskDefPtr orig_disk) -+{ -+#define CHECK_EQ(field, field_name, nullable) \ -+ do { \ -+ if (nullable && !disk->field) \ -+ break; \ -+ if (disk->field != orig_disk->field) { \ -+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, \ -+ _("cannot modify field '%s' of the disk"), \ -+ field_name); \ -+ return false; \ -+ } \ -+ } while (0) -+ -+ CHECK_EQ(device, "device", false); -+ CHECK_EQ(cachemode, "cache", true); -+ CHECK_EQ(error_policy, "error_policy", true); -+ CHECK_EQ(rerror_policy, "rerror_policy", true); -+ CHECK_EQ(iomode, "io", true); -+ CHECK_EQ(ioeventfd, "ioeventfd", true); -+ CHECK_EQ(event_idx, "event_idx", true); -+ CHECK_EQ(copy_on_read, "copy_on_read", true); -+ CHECK_EQ(discard, "discard", true); -+ CHECK_EQ(iothread, "iothread", true); -+ -+ if (disk->geometry.cylinders && -+ disk->geometry.heads && -+ disk->geometry.sectors) { -+ CHECK_EQ(geometry.cylinders, "geometry cylinders", false); -+ CHECK_EQ(geometry.heads, "geometry heads", false); -+ CHECK_EQ(geometry.sectors, "geometry sectors", false); -+ CHECK_EQ(geometry.trans, "BIOS-translation-modus", true); -+ } -+ -+ CHECK_EQ(blockio.logical_block_size, -+ "blockio logical_block_size", false); -+ CHECK_EQ(blockio.physical_block_size, -+ "blockio physical_block_size", false); -+ -+ if (disk->bus == VIR_DOMAIN_DISK_BUS_USB) -+ CHECK_EQ(removable, "removable", true); -+ -+ CHECK_EQ(blkdeviotune.total_bytes_sec, -+ "blkdeviotune total_bytes_sec", -+ true); -+ CHECK_EQ(blkdeviotune.read_bytes_sec, -+ "blkdeviotune read_bytes_sec", -+ true); -+ CHECK_EQ(blkdeviotune.write_bytes_sec, -+ "blkdeviotune write_bytes_sec", -+ true); -+ CHECK_EQ(blkdeviotune.total_iops_sec, -+ "blkdeviotune total_iops_sec", -+ true); -+ CHECK_EQ(blkdeviotune.read_iops_sec, -+ "blkdeviotune read_iops_sec", -+ true); -+ CHECK_EQ(blkdeviotune.write_iops_sec, -+ "blkdeviotune write_iops_sec", -+ true); -+ CHECK_EQ(blkdeviotune.total_bytes_sec_max, -+ "blkdeviotune total_bytes_sec_max", -+ true); -+ CHECK_EQ(blkdeviotune.read_bytes_sec_max, -+ "blkdeviotune read_bytes_sec_max", -+ true); -+ CHECK_EQ(blkdeviotune.write_bytes_sec_max, -+ "blkdeviotune write_bytes_sec_max", -+ true); -+ CHECK_EQ(blkdeviotune.total_iops_sec_max, -+ "blkdeviotune total_iops_sec_max", -+ true); -+ CHECK_EQ(blkdeviotune.read_iops_sec_max, -+ "blkdeviotune read_iops_sec_max", -+ true); -+ CHECK_EQ(blkdeviotune.write_iops_sec_max, -+ "blkdeviotune write_iops_sec_max", -+ true); -+ CHECK_EQ(blkdeviotune.size_iops_sec, -+ "blkdeviotune size_iops_sec", -+ true); -+ -+ CHECK_EQ(transient, "transient", true); -+ -+ if (disk->serial && STRNEQ(disk->serial, orig_disk->serial)) { -+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, -+ _("cannot modify field '%s' of the disk"), -+ "serial"); -+ return false; -+ } -+ -+ if (disk->wwn && STRNEQ(disk->wwn, orig_disk->wwn)) { -+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, -+ _("cannot modify field '%s' of the disk"), -+ "wwn"); -+ return false; -+ } -+ -+ if (disk->vendor && STRNEQ(disk->vendor, orig_disk->vendor)) { -+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, -+ _("cannot modify field '%s' of the disk"), -+ "vendor"); -+ return false; -+ } -+ -+ if (disk->product && STRNEQ(disk->product, orig_disk->product)) { -+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, -+ _("cannot modify field '%s' of the disk"), -+ "product"); -+ return false; -+ } -+ -+ CHECK_EQ(info.bootIndex, "boot order", true); -+ -+#undef CHECK_EQ -+ -+ return true; -+} -+ - int - virDomainDiskDefAssignAddress(virDomainXMLOptionPtr xmlopt, - virDomainDiskDefPtr def) -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 604d0b8..1be8e63 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2474,6 +2474,8 @@ int virDomainDeviceFindControllerModel(virDomainDefPtr def, - virDomainDiskDefPtr virDomainDiskFindByBusAndDst(virDomainDefPtr def, - int bus, - char *dst); -+bool virDomainDiskDiffersSourceOnly(virDomainDiskDefPtr disk, -+ virDomainDiskDefPtr orig_disk); - void virDomainControllerDefFree(virDomainControllerDefPtr def); - void virDomainFSDefFree(virDomainFSDefPtr def); - void virDomainActualNetDefFree(virDomainActualNetDefPtr def); -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 46e535e..0517c24 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -249,6 +249,7 @@ virDomainDiskDefFree; - virDomainDiskDefNew; - virDomainDiskDefSourceParse; - virDomainDiskDeviceTypeToString; -+virDomainDiskDiffersSourceOnly; - virDomainDiskDiscardTypeToString; - virDomainDiskErrorPolicyTypeFromString; - virDomainDiskErrorPolicyTypeToString; -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index bb0dc7e..8d569fe 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -7940,6 +7940,9 @@ qemuDomainChangeDiskMediaLive(virConnectPtr conn, - goto end; - } - -+ if (!virDomainDiskDiffersSourceOnly(disk, orig_disk)) -+ goto end; -+ - /* Add the new disk src into shared disk hash table */ - if (qemuAddSharedDevice(driver, dev, vm->def->name) < 0) - goto end; --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Remember-incoming-migration-errors.patch b/SOURCES/libvirt-qemu-Remember-incoming-migration-errors.patch deleted file mode 100644 index 5d61d91..0000000 --- a/SOURCES/libvirt-qemu-Remember-incoming-migration-errors.patch +++ /dev/null @@ -1,267 +0,0 @@ -From c6f6fd0e71ca74d9e553bb059de1809a4c1789dd Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Thu, 2 Jul 2015 08:26:48 +0200 -Subject: [PATCH] qemu: Remember incoming migration errors - -If QEMU fails during incoming migration, the domain disappears including -a possibly useful error message read from QEMU log file. Let's remember -the error in virQEMUDriver so that Finish can report more than just "no -such domain". - -Signed-off-by: Jiri Denemark -(cherry picked from commit e68f395fcbae0267368f9974cc49f582cc83c752) - -https://bugzilla.redhat.com/show_bug.cgi?id=1090093 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.h | 3 +++ - src/qemu/qemu_driver.c | 31 ++++++++++++++++++------- - src/qemu/qemu_migration.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++- - src/qemu/qemu_migration.h | 7 ++++++ - src/qemu/qemu_monitor.c | 14 +++++++++++ - src/qemu/qemu_monitor.h | 2 ++ - src/qemu/qemu_process.c | 4 ++++ - 7 files changed, 111 insertions(+), 9 deletions(-) - -diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h -index b74c283..3f73929 100644 ---- a/src/qemu/qemu_conf.h -+++ b/src/qemu/qemu_conf.h -@@ -252,6 +252,9 @@ struct _virQEMUDriver { - - /* Immutable pointer, self-clocking APIs */ - virCloseCallbacksPtr closeCallbacks; -+ -+ /* Immutable pointer, self-locking APIs */ -+ virHashAtomicPtr migrationErrors; - }; - - typedef struct _qemuDomainCmdlineDef qemuDomainCmdlineDef; -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 063bedb..fb42dae 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -775,6 +775,9 @@ qemuStateInitialize(bool privileged, - if (!(qemu_driver->sharedDevices = virHashCreate(30, qemuSharedDeviceEntryFree))) - goto error; - -+ if (qemuMigrationErrorInit(qemu_driver) < 0) -+ goto error; -+ - if (privileged) { - char *channeldir; - -@@ -1091,6 +1094,7 @@ qemuStateCleanup(void) - virObjectUnref(qemu_driver->remotePorts); - virObjectUnref(qemu_driver->webSocketPorts); - virObjectUnref(qemu_driver->migrationPorts); -+ virObjectUnref(qemu_driver->migrationErrors); - - virObjectUnref(qemu_driver->xmlopt); - -@@ -12199,6 +12203,7 @@ qemuDomainMigrateFinish2(virConnectPtr dconn, - if (!vm) { - virReportError(VIR_ERR_NO_DOMAIN, - _("no domain with matching name '%s'"), dname); -+ qemuMigrationErrorReport(driver, dname); - goto cleanup; - } - -@@ -12648,11 +12653,16 @@ qemuDomainMigrateFinish3(virConnectPtr dconn, - - virCheckFlags(QEMU_MIGRATION_FLAGS, NULL); - -- if (!dname || -- !(vm = virDomainObjListFindByName(driver->domains, dname))) { -+ if (!dname) { -+ virReportError(VIR_ERR_NO_DOMAIN, "%s", _("missing domain name")); -+ return NULL; -+ } -+ -+ vm = virDomainObjListFindByName(driver->domains, dname); -+ if (!vm) { - virReportError(VIR_ERR_NO_DOMAIN, -- _("no domain with matching name '%s'"), -- NULLSTR(dname)); -+ _("no domain with matching name '%s'"), dname); -+ qemuMigrationErrorReport(driver, dname); - return NULL; - } - -@@ -12691,11 +12701,16 @@ qemuDomainMigrateFinish3Params(virConnectPtr dconn, - &dname) < 0) - return NULL; - -- if (!dname || -- !(vm = virDomainObjListFindByName(driver->domains, dname))) { -+ if (!dname) { -+ virReportError(VIR_ERR_NO_DOMAIN, "%s", _("missing domain name")); -+ return NULL; -+ } -+ -+ vm = virDomainObjListFindByName(driver->domains, dname); -+ if (!vm) { - virReportError(VIR_ERR_NO_DOMAIN, -- _("no domain with matching name '%s'"), -- NULLSTR(dname)); -+ _("no domain with matching name '%s'"), dname); -+ qemuMigrationErrorReport(driver, dname); - return NULL; - } - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 7257182..58874ee 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -5543,8 +5543,10 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - if (!(caps = virQEMUDriverGetCapabilities(driver, false))) - goto cleanup; - -- if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_IN)) -+ if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_IN)) { -+ qemuMigrationErrorReport(driver, vm->def->name); - goto cleanup; -+ } - - qemuMigrationJobStartPhase(driver, vm, - v3proto ? QEMU_MIGRATION_PHASE_FINISH3 -@@ -5570,6 +5572,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - if (!virDomainObjIsActive(vm) && !(flags & VIR_MIGRATE_OFFLINE)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("guest unexpectedly quit")); -+ qemuMigrationErrorReport(driver, vm->def->name); - goto endjob; - } - -@@ -6094,3 +6097,57 @@ qemuMigrationJobFinish(virQEMUDriverPtr driver, virDomainObjPtr vm) - { - qemuDomainObjEndAsyncJob(driver, vm); - } -+ -+ -+static void -+qemuMigrationErrorFree(void *data, -+ const void *name ATTRIBUTE_UNUSED) -+{ -+ virErrorPtr err = data; -+ virFreeError(err); -+} -+ -+int -+qemuMigrationErrorInit(virQEMUDriverPtr driver) -+{ -+ driver->migrationErrors = virHashAtomicNew(64, qemuMigrationErrorFree); -+ if (driver->migrationErrors) -+ return 0; -+ else -+ return -1; -+} -+ -+/** -+ * This function consumes @err; the caller should consider the @err pointer -+ * invalid after calling this function. -+ */ -+void -+qemuMigrationErrorSave(virQEMUDriverPtr driver, -+ const char *name, -+ virErrorPtr err) -+{ -+ if (!err) -+ return; -+ -+ VIR_DEBUG("Saving incoming migration error for domain %s: %s", -+ name, err->message); -+ if (virHashAtomicUpdate(driver->migrationErrors, name, err) < 0) { -+ VIR_WARN("Failed to save migration error for domain '%s'", name); -+ virFreeError(err); -+ } -+} -+ -+void -+qemuMigrationErrorReport(virQEMUDriverPtr driver, -+ const char *name) -+{ -+ virErrorPtr err; -+ -+ if (!(err = virHashAtomicSteal(driver->migrationErrors, name))) -+ return; -+ -+ VIR_DEBUG("Restoring saved incoming migration error for domain %s: %s", -+ name, err->message); -+ virSetError(err); -+ virFreeError(err); -+} -diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h -index 48c2e8c..fa14274 100644 ---- a/src/qemu/qemu_migration.h -+++ b/src/qemu/qemu_migration.h -@@ -193,4 +193,11 @@ int qemuMigrationFetchJobStatus(virQEMUDriverPtr driver, - qemuDomainAsyncJob asyncJob, - qemuDomainJobInfoPtr jobInfo); - -+int qemuMigrationErrorInit(virQEMUDriverPtr driver); -+void qemuMigrationErrorSave(virQEMUDriverPtr driver, -+ const char *name, -+ virErrorPtr err); -+void qemuMigrationErrorReport(virQEMUDriverPtr driver, -+ const char *name); -+ - #endif /* __QEMU_MIGRATION_H__ */ -diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c -index dabe8e2..7545dbb 100644 ---- a/src/qemu/qemu_monitor.c -+++ b/src/qemu/qemu_monitor.c -@@ -1057,6 +1057,20 @@ qemuMonitorSend(qemuMonitorPtr mon, - } - - -+/** -+ * This function returns a new virError object; the caller is responsible -+ * for freeing it. -+ */ -+virErrorPtr -+qemuMonitorLastError(qemuMonitorPtr mon) -+{ -+ if (mon->lastError.code == VIR_ERR_OK) -+ return NULL; -+ -+ return virErrorCopyNew(&mon->lastError); -+} -+ -+ - virJSONValuePtr - qemuMonitorGetOptions(qemuMonitorPtr mon) - { -diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h -index 2ceba28..8ad3b2b 100644 ---- a/src/qemu/qemu_monitor.h -+++ b/src/qemu/qemu_monitor.h -@@ -240,6 +240,8 @@ qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm, - - void qemuMonitorClose(qemuMonitorPtr mon); - -+virErrorPtr qemuMonitorLastError(qemuMonitorPtr mon); -+ - int qemuMonitorSetCapabilities(qemuMonitorPtr mon); - - int qemuMonitorSetLink(qemuMonitorPtr mon, -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index c5f467b..91ff5f8 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -310,6 +310,10 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - auditReason = "failed"; - } - -+ if (qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_IN)) -+ qemuMigrationErrorSave(driver, vm->def->name, -+ qemuMonitorLastError(priv->mon)); -+ - event = virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_STOPPED, - eventReason); --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Remove-stale-transient-def-when-migration-fails.patch b/SOURCES/libvirt-qemu-Remove-stale-transient-def-when-migration-fails.patch new file mode 100644 index 0000000..bb25a38 --- /dev/null +++ b/SOURCES/libvirt-qemu-Remove-stale-transient-def-when-migration-fails.patch @@ -0,0 +1,36 @@ +From dd980e5643963822af2eccc5548e7b53f21576b6 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Jiri Denemark +Date: Thu, 8 Sep 2016 15:22:28 +0200 +Subject: [PATCH] qemu: Remove stale transient def when migration fails + +If a migration of a domain which is already defined on the destination +host failed early (before we tried to start QEMU), we would forget to +remove the incoming transient definition. Later on when someone starts +the domain on the destination host, we will use the stale incoming +definition and the persistent definition will just be ignored. + +https://bugzilla.redhat.com/show_bug.cgi?id=1368774 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 66278d4bc38aecff6661c91ce9cd3fff26e54a91) +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_migration.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c +index ae70f2a..537bfeb 100644 +--- a/src/qemu/qemu_migration.c ++++ b/src/qemu/qemu_migration.c +@@ -3876,6 +3876,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, + if (nbdPort == 0) + virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort); + priv->nbdPort = 0; ++ virDomainObjRemoveTransientDef(vm); + qemuDomainRemoveInactive(driver, vm); + } + virDomainObjEndAPI(&vm); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Remove-unnecessary-label-and-its-only-reference.patch b/SOURCES/libvirt-qemu-Remove-unnecessary-label-and-its-only-reference.patch new file mode 100644 index 0000000..159813b --- /dev/null +++ b/SOURCES/libvirt-qemu-Remove-unnecessary-label-and-its-only-reference.patch @@ -0,0 +1,46 @@ +From 9dc18e55f33d5148c5a08510dcf3a64ce21a910e Mon Sep 17 00:00:00 2001 +Message-Id: <9dc18e55f33d5148c5a08510dcf3a64ce21a910e@dist-git> +From: Martin Kletzander +Date: Tue, 2 Aug 2016 13:32:34 +0200 +Subject: [PATCH] qemu: Remove unnecessary label and its only reference + +https://bugzilla.redhat.com/show_bug.cgi?id=1168453 + +Signed-off-by: Martin Kletzander +(cherry picked from commit 779a4ea9066560b92b0df462b5a6d5c127c15920) +Signed-off-by: Martin Kletzander +--- + src/qemu/qemu_domain.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 383356d..c74033b 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -4114,7 +4114,6 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, + virDomainObjPtr vm, + bool cold_boot) + { +- int ret = -1; + size_t i; + + VIR_DEBUG("Checking for disk presence"); +@@ -4141,13 +4140,10 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, + if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) >= 0) + continue; + +- goto error; ++ return -1; + } + +- ret = 0; +- +- error: +- return ret; ++ return 0; + } + + /* +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Report-error-if-per-VM-directory-cannot-be-created.patch b/SOURCES/libvirt-qemu-Report-error-if-per-VM-directory-cannot-be-created.patch deleted file mode 100644 index 0829311..0000000 --- a/SOURCES/libvirt-qemu-Report-error-if-per-VM-directory-cannot-be-created.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 573518f61bbdffc5ee7fb4f55a145f19e7edc65f Mon Sep 17 00:00:00 2001 -Message-Id: <573518f61bbdffc5ee7fb4f55a145f19e7edc65f@dist-git> -From: Martin Kletzander -Date: Mon, 14 Sep 2015 10:15:25 +0200 -Subject: [PATCH] qemu: Report error if per-VM directory cannot be created - -Commit f1f68ca33433 did not report an error if virFileMakePath() -returned -1. Well, who would've guessed function with name starting -with 'vir' sets an errno instead of reporting an error the libvirt way. -Anyway, let's fix it, so the output changes from: - - $ virsh start arm - error: Failed to start domain arm - error: An error occurred, but the cause is unknown - -to: - - $ virsh start arm - error: Failed to start domain arm - error: Cannot create directory '/var/lib/libvirt/qemu/domain-arm': Not - a directory - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 8370023730220fcf48f9b1fa0914b60c66452569) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 317ef78..d5b0fc0 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -4737,8 +4737,10 @@ int qemuProcessStart(virConnectPtr conn, - if (virAsprintf(&tmppath, "%s/domain-%s", cfg->libDir, vm->def->name) < 0) - goto cleanup; - -- if (virFileMakePath(tmppath) < 0) -+ if (virFileMakePath(tmppath) < 0) { -+ virReportSystemError(errno, _("Cannot create directory '%s'"), tmppath); - goto cleanup; -+ } - - if (virSecurityManagerDomainSetDirLabel(driver->securityManager, - vm->def, tmppath) < 0) -@@ -4750,8 +4752,10 @@ int qemuProcessStart(virConnectPtr conn, - cfg->channelTargetDir, vm->def->name) < 0) - goto cleanup; - -- if (virFileMakePath(tmppath) < 0) -+ if (virFileMakePath(tmppath) < 0) { -+ virReportSystemError(errno, _("Cannot create directory '%s'"), tmppath); - goto cleanup; -+ } - - if (virSecurityManagerDomainSetDirLabel(driver->securityManager, - vm->def, tmppath) < 0) --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Store-vCPU-thread-ids-in-vcpu-private-data-objects.patch b/SOURCES/libvirt-qemu-Store-vCPU-thread-ids-in-vcpu-private-data-objects.patch new file mode 100644 index 0000000..0f163b3 --- /dev/null +++ b/SOURCES/libvirt-qemu-Store-vCPU-thread-ids-in-vcpu-private-data-objects.patch @@ -0,0 +1,290 @@ +From 727b03664ca6d57caa7232398290478328d8ba3e Mon Sep 17 00:00:00 2001 +Message-Id: <727b03664ca6d57caa7232398290478328d8ba3e@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:52 -0400 +Subject: [PATCH] qemu: Store vCPU thread ids in vcpu private data objects + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Rather than storing them in an external array store them directly. + +(cherry picked from commit 5184f398b40a5e0d7d84b86182edcb2b48ab04ba) +--- + src/qemu/qemu_domain.c | 116 ++++++++++++++++++++++++++++-------------------- + src/qemu/qemu_domain.h | 7 +-- + src/qemu/qemu_process.c | 2 - + 3 files changed, 71 insertions(+), 54 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index c27129e..38225b5 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1327,7 +1327,6 @@ qemuDomainObjPrivateFree(void *data) + virDomainUSBAddressSetFree(priv->usbaddrs); + virDomainChrSourceDefFree(priv->monConfig); + qemuDomainObjFreeJob(priv); +- VIR_FREE(priv->vcpupids); + VIR_FREE(priv->lockState); + VIR_FREE(priv->origname); + +@@ -1356,19 +1355,25 @@ qemuDomainObjPrivateFree(void *data) + + static void + qemuDomainObjPrivateXMLFormatVcpus(virBufferPtr buf, +- int *vcpupids, +- int nvcpupids) ++ virDomainDefPtr def) + { + size_t i; +- +- if (!nvcpupids) +- return; ++ size_t maxvcpus = virDomainDefGetVcpusMax(def); ++ virDomainVcpuDefPtr vcpu; ++ pid_t tid; + + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); + +- for (i = 0; i < nvcpupids; i++) +- virBufferAsprintf(buf, "\n", i, vcpupids[i]); ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ tid = QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid; ++ ++ if (!vcpu->online || tid == 0) ++ continue; ++ ++ virBufferAsprintf(buf, "\n", i, tid); ++ } + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); +@@ -1402,7 +1407,7 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, + virDomainChrTypeToString(priv->monConfig->type)); + } + +- qemuDomainObjPrivateXMLFormatVcpus(buf, priv->vcpupids, priv->nvcpupids); ++ qemuDomainObjPrivateXMLFormatVcpus(buf, vm->def); + + if (priv->qemuCaps) { + size_t i; +@@ -1495,27 +1500,31 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, + static int + qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node, + unsigned int idx, +- qemuDomainObjPrivatePtr priv) ++ virDomainDefPtr def) + { ++ virDomainVcpuDefPtr vcpu; + char *idstr; + char *pidstr; ++ unsigned int tmp; + int ret = -1; + +- if ((idstr = virXMLPropString(node, "id"))) { +- if (virStrToLong_uip(idstr, NULL, 10, &idx) < 0 || +- idx >= priv->nvcpupids) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("invalid vcpu index '%s'"), idstr); +- goto cleanup; +- } ++ idstr = virXMLPropString(node, "id"); ++ ++ if ((idstr && virStrToLong_uip(idstr, NULL, 10, &idx)) < 0 || ++ !(vcpu = virDomainDefGetVcpu(def, idx))) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("invalid vcpu index '%s'"), idstr); ++ goto cleanup; + } + + if (!(pidstr = virXMLPropString(node, "pid"))) + goto cleanup; + +- if (virStrToLong_i(pidstr, NULL, 10, &(priv->vcpupids[idx])) < 0) ++ if (virStrToLong_uip(pidstr, NULL, 10, &tmp) < 0) + goto cleanup; + ++ QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = tmp; ++ + ret = 0; + + cleanup: +@@ -1578,12 +1587,8 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, + if ((n = virXPathNodeSet("./vcpus/vcpu", ctxt, &nodes)) < 0) + goto error; + +- priv->nvcpupids = n; +- if (VIR_REALLOC_N(priv->vcpupids, priv->nvcpupids) < 0) +- goto error; +- + for (i = 0; i < n; i++) { +- if (qemuDomainObjPrivateXMLParseVcpu(nodes[i], i, priv) < 0) ++ if (qemuDomainObjPrivateXMLParseVcpu(nodes[i], i, vm->def) < 0) + goto error; + } + VIR_FREE(nodes); +@@ -5587,9 +5592,18 @@ qemuDomainAdjustMaxMemLock(virDomainObjPtr vm) + bool + qemuDomainHasVcpuPids(virDomainObjPtr vm) + { +- qemuDomainObjPrivatePtr priv = vm->privateData; ++ size_t i; ++ size_t maxvcpus = virDomainDefGetVcpusMax(vm->def); ++ virDomainVcpuDefPtr vcpu; + +- return priv->nvcpupids > 0; ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(vm->def, i); ++ ++ if (QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid > 0) ++ return true; ++ } ++ ++ return false; + } + + +@@ -5602,14 +5616,10 @@ qemuDomainHasVcpuPids(virDomainObjPtr vm) + */ + pid_t + qemuDomainGetVcpuPid(virDomainObjPtr vm, +- unsigned int vcpu) ++ unsigned int vcpuid) + { +- qemuDomainObjPrivatePtr priv = vm->privateData; +- +- if (vcpu >= priv->nvcpupids) +- return 0; +- +- return priv->vcpupids[vcpu]; ++ virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, vcpuid); ++ return QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid; + } + + +@@ -5629,9 +5639,12 @@ qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob) + { ++ virDomainVcpuDefPtr vcpu; ++ size_t maxvcpus = virDomainDefGetVcpusMax(vm->def); + pid_t *cpupids = NULL; +- int ncpupids = 0; +- qemuDomainObjPrivatePtr priv = vm->privateData; ++ int ncpupids; ++ size_t i; ++ int ret = -1; + + /* + * Current QEMU *can* report info about host threads mapped +@@ -5662,22 +5675,32 @@ qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, + * to try to do this hard work. + */ + if (vm->def->virtType == VIR_DOMAIN_VIRT_QEMU) +- goto done; ++ return 0; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; +- ncpupids = qemuMonitorGetCPUInfo(priv->mon, &cpupids); ++ ncpupids = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &cpupids); + if (qemuDomainObjExitMonitor(driver, vm) < 0) { +- VIR_FREE(cpupids); +- return -2; ++ ret = -2; ++ goto cleanup; + } ++ + /* failure to get the VCPU <-> PID mapping or to execute the query + * command will not be treated fatal as some versions of qemu don't + * support this command */ + if (ncpupids <= 0) { + virResetLastError(); +- ncpupids = 0; +- goto done; ++ ret = 0; ++ goto cleanup; ++ } ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(vm->def, i); ++ ++ if (i < ncpupids) ++ QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = cpupids[i]; ++ else ++ QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = 0; + } + + if (ncpupids != virDomainDefGetVcpus(vm->def)) { +@@ -5685,15 +5708,14 @@ qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, + _("got wrong number of vCPU pids from QEMU monitor. " + "got %d, wanted %d"), + ncpupids, virDomainDefGetVcpus(vm->def)); +- VIR_FREE(cpupids); +- return -1; ++ goto cleanup; + } + +- done: +- VIR_FREE(priv->vcpupids); +- priv->nvcpupids = ncpupids; +- priv->vcpupids = cpupids; +- return ncpupids; ++ ret = ncpupids; ++ ++ cleanup: ++ VIR_FREE(cpupids); ++ return ret; + } + + +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index 32433cf..06c3fc2 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -184,9 +184,6 @@ struct _qemuDomainObjPrivate { + bool beingDestroyed; + char *pidfile; + +- int nvcpupids; +- int *vcpupids; +- + virDomainPCIAddressSetPtr pciaddrs; + virDomainCCWAddressSetPtr ccwaddrs; + virDomainVirtioSerialAddrSetPtr vioserialaddrs; +@@ -319,7 +316,7 @@ typedef qemuDomainVcpuPrivate *qemuDomainVcpuPrivatePtr; + struct _qemuDomainVcpuPrivate { + virObject parent; + +- int dummy; ++ pid_t tid; /* vcpu thread id */ + }; + + # define QEMU_DOMAIN_VCPU_PRIVATE(vcpu) \ +@@ -651,7 +648,7 @@ int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def, + const virDomainMemoryDef *mem); + + bool qemuDomainHasVcpuPids(virDomainObjPtr vm); +-pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpu); ++pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpuid); + int qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, virDomainObjPtr vm, + int asyncJob); + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 6062f2a..41e401b 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -5889,8 +5889,6 @@ void qemuProcessStop(virQEMUDriverPtr driver, + vm->taint = 0; + vm->pid = -1; + virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason); +- VIR_FREE(priv->vcpupids); +- priv->nvcpupids = 0; + for (i = 0; i < vm->def->niothreadids; i++) + vm->def->iothreadids[i]->thread_id = 0; + virObjectUnref(priv->qemuCaps); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch b/SOURCES/libvirt-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch deleted file mode 100644 index 5bb6bdb..0000000 --- a/SOURCES/libvirt-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 4d4ed9e83c4839f3cad7460bff63328e4e553e02 Mon Sep 17 00:00:00 2001 -Message-Id: <4d4ed9e83c4839f3cad7460bff63328e4e553e02@dist-git> -From: Martin Kletzander -Date: Mon, 23 Nov 2015 12:46:36 +0100 -Subject: [PATCH] qemu: Support vhost-user-multiqueue with QEMU 2.3 - -RHEL-only - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1207692 -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1284416 - -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 12af0dc..943aa5f 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -3393,8 +3393,11 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, - virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_AARCH64_OFF); - - /* vhost-user supports multi-queue from v2.4.0 onwards, -- * but there is no way to query for that capability */ -- if (qemuCaps->version >= 2004000) -+ * but there is no way to query for that capability -+ * -+ * RHEL-only: The change was back-ported to earlier QEMU version, -+ * particularly 2.3, in BZ 1276100 */ -+ if (qemuCaps->version >= 2003000) - virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOSTUSER_MULTIQUEUE); - - if (virQEMUCapsProbeQMPCommands(qemuCaps, mon) < 0) --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch b/SOURCES/libvirt-qemu-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch deleted file mode 100644 index 7d98526..0000000 --- a/SOURCES/libvirt-qemu-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch +++ /dev/null @@ -1,137 +0,0 @@ -From fa7357fcc523ba9e2f40ee80c769060f5772eacb Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Tue, 18 Aug 2015 17:28:02 -0700 -Subject: [PATCH] qemu: Sync BlkioDevice values when setting them in cgroups - -The problem here is that there are some values that kernel accepts, but -does not set them, for example 18446744073709551615 which acts the same -way as zero. Let's do the same thing we do with other tuning options -and re-read them right after they are set in order to keep our internal -structures up-to-date. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1165580 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 7b5acf9461d3917cac12688fae9fbe5f67bf788b) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_cgroup.c | 20 +++++++++++++++----- - src/qemu/qemu_driver.c | 25 ++++++++++++++++++++----- - 2 files changed, 35 insertions(+), 10 deletions(-) - -diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c -index e1a2827..0da6c02 100644 ---- a/src/qemu/qemu_cgroup.c -+++ b/src/qemu/qemu_cgroup.c -@@ -436,27 +436,37 @@ qemuSetupBlkioCgroup(virDomainObjPtr vm) - virBlkioDevicePtr dev = &vm->def->blkio.devices[i]; - if (dev->weight && - (virCgroupSetBlkioDeviceWeight(priv->cgroup, dev->path, -- dev->weight) < 0)) -+ dev->weight) < 0 || -+ virCgroupGetBlkioDeviceWeight(priv->cgroup, dev->path, -+ &dev->weight) < 0)) - return -1; - - if (dev->riops && - (virCgroupSetBlkioDeviceReadIops(priv->cgroup, dev->path, -- dev->riops) < 0)) -+ dev->riops) < 0 || -+ virCgroupGetBlkioDeviceReadIops(priv->cgroup, dev->path, -+ &dev->riops) < 0)) - return -1; - - if (dev->wiops && - (virCgroupSetBlkioDeviceWriteIops(priv->cgroup, dev->path, -- dev->wiops) < 0)) -+ dev->wiops) < 0 || -+ virCgroupGetBlkioDeviceWriteIops(priv->cgroup, dev->path, -+ &dev->wiops) < 0)) - return -1; - - if (dev->rbps && - (virCgroupSetBlkioDeviceReadBps(priv->cgroup, dev->path, -- dev->rbps) < 0)) -+ dev->rbps) < 0 || -+ virCgroupGetBlkioDeviceReadBps(priv->cgroup, dev->path, -+ &dev->rbps) < 0)) - return -1; - - if (dev->wbps && - (virCgroupSetBlkioDeviceWriteBps(priv->cgroup, dev->path, -- dev->wbps) < 0)) -+ dev->wbps) < 0 || -+ virCgroupGetBlkioDeviceWriteBps(priv->cgroup, dev->path, -+ &dev->wbps) < 0)) - return -1; - } - } -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index e1ceb98..e85506e 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -9286,7 +9286,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceWeight(priv->cgroup, - devices[j].path, -- devices[j].weight) < 0) { -+ devices[j].weight) < 0 || -+ virCgroupGetBlkioDeviceWeight(priv->cgroup, -+ devices[j].path, -+ &devices[j].weight) < 0) { - ret = -1; - break; - } -@@ -9295,7 +9298,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceReadIops(priv->cgroup, - devices[j].path, -- devices[j].riops) < 0) { -+ devices[j].riops) < 0 || -+ virCgroupGetBlkioDeviceReadIops(priv->cgroup, -+ devices[j].path, -+ &devices[j].riops) < 0) { - ret = -1; - break; - } -@@ -9304,7 +9310,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceWriteIops(priv->cgroup, - devices[j].path, -- devices[j].wiops) < 0) { -+ devices[j].wiops) < 0 || -+ virCgroupGetBlkioDeviceWriteIops(priv->cgroup, -+ devices[j].path, -+ &devices[j].wiops) < 0) { - ret = -1; - break; - } -@@ -9313,7 +9322,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceReadBps(priv->cgroup, - devices[j].path, -- devices[j].rbps) < 0) { -+ devices[j].rbps) < 0 || -+ virCgroupGetBlkioDeviceReadBps(priv->cgroup, -+ devices[j].path, -+ &devices[j].rbps) < 0) { - ret = -1; - break; - } -@@ -9322,7 +9334,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom, - for (j = 0; j < ndevices; j++) { - if (virCgroupSetBlkioDeviceWriteBps(priv->cgroup, - devices[j].path, -- devices[j].wbps) < 0) { -+ devices[j].wbps) < 0 || -+ virCgroupGetBlkioDeviceWriteBps(priv->cgroup, -+ devices[j].path, -+ &devices[j].wbps) < 0) { - ret = -1; - break; - } --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-Try-several-network-devices-when-looking-for-a-default.patch b/SOURCES/libvirt-qemu-Try-several-network-devices-when-looking-for-a-default.patch deleted file mode 100644 index 4dad1e7..0000000 --- a/SOURCES/libvirt-qemu-Try-several-network-devices-when-looking-for-a-default.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 37d9c7b752e9bda93e5f15e1ac97dcb614e6b978 Mon Sep 17 00:00:00 2001 -Message-Id: <37d9c7b752e9bda93e5f15e1ac97dcb614e6b978@dist-git> -From: Andrea Bolognani -Date: Fri, 11 Sep 2015 17:00:20 +0200 -Subject: [PATCH] qemu: Try several network devices when looking for a default - -Up until now, the default has been rtl8139, but no check was in -place to make sure that device was actually available. - -Now we try rtl8139, e1000 and virtio-net in turn, checking for -availability before using any of them: this means we have a much -better chance for the guest to be able to boot. - -(cherry picked from commit 75036c69df7a64f97f3716396f34f78de027f38b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1254044 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 26 +++++++++++++++++++++++--- - 1 file changed, 23 insertions(+), 3 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 66d8e3a..e4a9c55 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -1174,7 +1174,8 @@ qemuDomainDefPostParse(virDomainDefPtr def, - } - - static const char * --qemuDomainDefaultNetModel(const virDomainDef *def) -+qemuDomainDefaultNetModel(const virDomainDef *def, -+ virQEMUCapsPtr qemuCaps) - { - if (ARCH_IS_S390(def->os.arch)) - return "virtio"; -@@ -1192,6 +1193,18 @@ qemuDomainDefaultNetModel(const virDomainDef *def) - return "lan9118"; - } - -+ /* Try several network devices in turn; each of these devices is -+ * less likely be supported out-of-the-box by the guest operating -+ * system than the previous one */ -+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_RTL8139)) -+ return "rtl8139"; -+ else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_E1000)) -+ return "e1000"; -+ else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_NET)) -+ return "virtio"; -+ -+ /* We've had no luck detecting support for any network device, -+ * but we have to return something: might as well be rtl8139 */ - return "rtl8139"; - } - -@@ -1201,18 +1214,24 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, - virCapsPtr caps ATTRIBUTE_UNUSED, - void *opaque) - { -- int ret = -1; - virQEMUDriverPtr driver = opaque; -+ virQEMUCapsPtr qemuCaps = NULL; - virQEMUDriverConfigPtr cfg = NULL; -+ int ret = -1; - - if (driver) - cfg = virQEMUDriverGetConfig(driver); - -+ /* This condition is actually a (temporary) hack for test suite which -+ * does not create capabilities cache */ -+ if (driver && driver->qemuCapsCache) -+ qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator); -+ - if (dev->type == VIR_DOMAIN_DEVICE_NET && - dev->data.net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV && - !dev->data.net->model) { - if (VIR_STRDUP(dev->data.net->model, -- qemuDomainDefaultNetModel(def)) < 0) -+ qemuDomainDefaultNetModel(def, qemuCaps)) < 0) - goto cleanup; - } - -@@ -1338,6 +1357,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, - ret = 0; - - cleanup: -+ virObjectUnref(qemuCaps); - virObjectUnref(cfg); - return ret; - } --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-Update-migration-state-according-to-MIGRATION-event.patch b/SOURCES/libvirt-qemu-Update-migration-state-according-to-MIGRATION-event.patch deleted file mode 100644 index 8946c16..0000000 --- a/SOURCES/libvirt-qemu-Update-migration-state-according-to-MIGRATION-event.patch +++ /dev/null @@ -1,106 +0,0 @@ -From cedb46fe3e884bd23b7ba504fac78e60265a8ea3 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Fri, 29 May 2015 08:37:59 +0200 -Subject: [PATCH] qemu: Update migration state according to MIGRATION event - -We don't need to call query-migrate every 50ms when we get the current -migration state via MIGRATION event. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 6d2edb6a42d0d41971fcf53c16cdc785d36c3ecc) - -https://bugzilla.redhat.com/show_bug.cgi?id=1212077 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 14 ++++++++++++-- - src/qemu/qemu_process.c | 31 +++++++++++++++++++++++++++++++ - 2 files changed, 43 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index a57a177..9a50923 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -2552,7 +2552,11 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; - -- if (qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0) -+ bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); -+ -+ if (events) -+ qemuMigrationUpdateJobType(jobInfo); -+ else if (qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0) - return -1; - - switch (jobInfo->type) { -@@ -2571,9 +2575,15 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, - qemuMigrationJobName(vm), _("canceled by client")); - return -1; - -+ case VIR_DOMAIN_JOB_COMPLETED: -+ /* Fetch statistics of a completed migration */ -+ if (events && -+ qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0) -+ return -1; -+ break; -+ - case VIR_DOMAIN_JOB_BOUNDED: - case VIR_DOMAIN_JOB_UNBOUNDED: -- case VIR_DOMAIN_JOB_COMPLETED: - case VIR_DOMAIN_JOB_LAST: - break; - } -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 1d223d3..577f309 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -1508,6 +1508,36 @@ qemuProcessHandleSpiceMigrated(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - } - - -+static int -+qemuProcessHandleMigrationStatus(qemuMonitorPtr mon ATTRIBUTE_UNUSED, -+ virDomainObjPtr vm, -+ int status, -+ void *opaque ATTRIBUTE_UNUSED) -+{ -+ qemuDomainObjPrivatePtr priv; -+ -+ virObjectLock(vm); -+ -+ VIR_DEBUG("Migration of domain %p %s changed state to %s", -+ vm, vm->def->name, -+ qemuMonitorMigrationStatusTypeToString(status)); -+ -+ priv = vm->privateData; -+ if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT && -+ priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_IN) { -+ VIR_DEBUG("got MIGRATION event without a migration job"); -+ goto cleanup; -+ } -+ -+ priv->job.current->status.status = status; -+ virDomainObjBroadcast(vm); -+ -+ cleanup: -+ virObjectUnlock(vm); -+ return 0; -+} -+ -+ - static qemuMonitorCallbacks monitorCallbacks = { - .eofNotify = qemuProcessHandleMonitorEOF, - .errorNotify = qemuProcessHandleMonitorError, -@@ -1532,6 +1562,7 @@ static qemuMonitorCallbacks monitorCallbacks = { - .domainNicRxFilterChanged = qemuProcessHandleNicRxFilterChanged, - .domainSerialChange = qemuProcessHandleSerialChanged, - .domainSpiceMigrated = qemuProcessHandleSpiceMigrated, -+ .domainMigrationStatus = qemuProcessHandleMigrationStatus, - }; - - static int --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Update-state-of-block-job-to-READY-only-if-it-actually-is-ready.patch b/SOURCES/libvirt-qemu-Update-state-of-block-job-to-READY-only-if-it-actually-is-ready.patch deleted file mode 100644 index 2fe11f1..0000000 --- a/SOURCES/libvirt-qemu-Update-state-of-block-job-to-READY-only-if-it-actually-is-ready.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 14b6b01cce6316d9df09f473592de303dce94084 Mon Sep 17 00:00:00 2001 -Message-Id: <14b6b01cce6316d9df09f473592de303dce94084@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:32 +0200 -Subject: [PATCH] qemu: Update state of block job to READY only if it actually - is ready - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Few parts of the code looked at the current progress of and assumed that -a two phase blockjob is in the _READY state as soon as the progress -reached 100% (info.cur == info.end). In current versions of qemu this -assumption is invalid and qemu exposes a new flag 'ready' in the -query-block-jobs output that is set to true if the job is actually -finished. - -This patch adds internal data handling for reading the 'ready' flag and -acting appropriately as long as the flag is present. - -While this still doesn't fix the virsh client problem with two phase -block jobs and the --pivot option, it at least improves the error -message: - -$ virsh blockcommit --wait --verbose vm vda --base vda[1] --active --pivot -Block commit: [100 %]error: failed to pivot job for disk vda -error: internal error: unable to execute QEMU command 'block-job-complete': The active block job for device 'drive-virtio-disk0' cannot be completed - -to - -$ virsh blockcommit --wait --verbose VM vda --base vda[1] --active --pivot -Block commit: [100 %]error: failed to pivot job for disk vda -error: block copy still active: disk 'vda' not ready for pivot yet - -(cherry picked from commit eae59247c59aa02147b2b4a50177e8e877fdb218) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 10 ++++++++-- - src/qemu/qemu_monitor.h | 1 + - src/qemu/qemu_monitor_json.c | 7 +++++++ - 3 files changed, 16 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 47889d9..204ed72 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -16170,8 +16170,12 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, - goto cleanup; - if (rc < 0) - goto cleanup; -- if (rc == 1 && info.cur == info.end && -- info.type == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) -+ if (rc == 1 && -+ (info.ready == 1 || -+ (info.ready == -1 && -+ info.end == info.cur && -+ (info.type == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY || -+ info.type == VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT)))) - disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_READY; - } - -@@ -16569,6 +16573,7 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom, - * hold the vm lock, so modifying the in-memory representation is - * safe, even if we are a query rather than a modify job. */ - if (ret == 1 && disk->mirror && -+ rawInfo.ready != 0 && - info->cur == info->end && !disk->mirrorState) { - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - -@@ -17199,6 +17204,7 @@ qemuDomainBlockCommit(virDomainPtr dom, - * thing if the user specified a relative name). Be prepared for - * a ready event to occur while locks are dropped. */ - if (mirror) { -+ disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_NONE; - disk->mirror = mirror; - disk->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT; - } -diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h -index 8ad3b2b..fc58638 100644 ---- a/src/qemu/qemu_monitor.h -+++ b/src/qemu/qemu_monitor.h -@@ -798,6 +798,7 @@ struct _qemuMonitorBlockJobInfo { - unsigned long long bandwidth; /* in bytes/s */ - virDomainBlockJobCursor cur; - virDomainBlockJobCursor end; -+ int ready; /* -1 if unknown, 0 if not ready, 1 if ready */ - }; - - virHashTablePtr qemuMonitorGetAllBlockJobInfo(qemuMonitorPtr mon); -diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c -index 4040ff0..d2a5374 100644 ---- a/src/qemu/qemu_monitor_json.c -+++ b/src/qemu/qemu_monitor_json.c -@@ -4136,6 +4136,7 @@ qemuMonitorJSONParseBlockJobInfo(virHashTablePtr blockJobs, - qemuMonitorBlockJobInfoPtr info = NULL; - const char *device; - const char *type; -+ bool ready; - - if (!(device = virJSONValueObjectGetString(entry, "device"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -@@ -4151,6 +4152,9 @@ qemuMonitorJSONParseBlockJobInfo(virHashTablePtr blockJobs, - return -1; - } - -+ /* assume we don't know the state */ -+ info->ready = -1; -+ - if (!(type = virJSONValueObjectGetString(entry, "type"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("entry was missing 'type'")); -@@ -4183,6 +4187,9 @@ qemuMonitorJSONParseBlockJobInfo(virHashTablePtr blockJobs, - return -1; - } - -+ if (virJSONValueObjectGetBoolean(entry, "ready", &ready) == 0) -+ info->ready = ready; -+ - return 0; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Use-bootindex-whenever-possible.patch b/SOURCES/libvirt-qemu-Use-bootindex-whenever-possible.patch new file mode 100644 index 0000000..1ccff05 --- /dev/null +++ b/SOURCES/libvirt-qemu-Use-bootindex-whenever-possible.patch @@ -0,0 +1,138 @@ +From 3fd272db468c84a28d967b5d94b4d1479296f6b3 Mon Sep 17 00:00:00 2001 +Message-Id: <3fd272db468c84a28d967b5d94b4d1479296f6b3@dist-git> +From: Jiri Denemark +Date: Tue, 28 Jun 2016 22:15:25 +0200 +Subject: [PATCH] qemu: Use bootindex whenever possible + +I'm not sure why our code claimed "-boot menu=on" cannot be used in +combination with per-device bootindex, but it was proved wrong about +four years ago by commit 8c952908. Let's always use bootindex when QEMU +supports it. + +https://bugzilla.redhat.com/show_bug.cgi?id=1323085 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 0dd67acfa752123a297469ff873f47cefce95435) +Signed-off-by: Jiri Denemark +--- + src/qemu/qemu_command.c | 18 ++++++-------- + .../qemuxml2argv-boot-menu-enable-bootindex.args | 23 ++++++++++++++++++ + .../qemuxml2argv-boot-menu-enable-bootindex.xml | 28 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 2 +- + 4 files changed, 59 insertions(+), 12 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 5b2f041..49412c0 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -6028,22 +6028,18 @@ qemuBuildBootCommandLine(virCommandPtr cmd, + /* + * We prefer using explicit bootindex=N parameters for predictable + * results even though domain XML doesn't use per device boot elements. +- * However, we can't use bootindex if boot menu was requested. + */ +- if (!def->os.nBootDevs) { +- /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot +- * configuration is used +- */ +- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) { ++ *emitBootindex = true; ++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) { ++ if (def->os.nBootDevs == 0) { ++ /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot ++ * configuration is used ++ */ + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("hypervisor lacks deviceboot feature")); + goto error; + } +- *emitBootindex = true; +- } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX) && +- (def->os.bootmenu != VIR_TRISTATE_BOOL_YES || +- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOT_MENU))) { +- *emitBootindex = true; ++ *emitBootindex = false; + } + + if (!*emitBootindex) { +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args +new file mode 100644 +index 0000000..6580b82 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args +@@ -0,0 +1,23 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot menu=on \ ++-usb \ ++-drive file=/dev/cdrom,format=raw,if=none,media=cdrom,id=drive-ide0-1-0,\ ++readonly=on \ ++-device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=1 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml +new file mode 100644 +index 0000000..831933e +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml +@@ -0,0 +1,28 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index a4b8bf4..a73db5e 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -622,7 +622,7 @@ mymain(void) + DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU); + DO_TEST("boot-menu-enable", + QEMU_CAPS_BOOT_MENU); +- DO_TEST("boot-menu-enable", ++ DO_TEST("boot-menu-enable-bootindex", + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_BOOTINDEX); + DO_TEST("boot-menu-enable-with-timeout", +-- +2.9.0 + diff --git a/SOURCES/libvirt-qemu-Use-error-from-Finish-instead-of-unexpectedly-failed.patch b/SOURCES/libvirt-qemu-Use-error-from-Finish-instead-of-unexpectedly-failed.patch deleted file mode 100644 index dfcc0f5..0000000 --- a/SOURCES/libvirt-qemu-Use-error-from-Finish-instead-of-unexpectedly-failed.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 9ac80cb260482543d02c9d8fd79162c05d684a74 Mon Sep 17 00:00:00 2001 -Message-Id: <9ac80cb260482543d02c9d8fd79162c05d684a74@dist-git> -From: Jiri Denemark -Date: Thu, 2 Jul 2015 21:46:56 +0200 -Subject: [PATCH] qemu: Use error from Finish instead of "unexpectedly failed" - -When QEMU exits on destination during migration, the source reports -either success (if the failure happened at the very end) or unhelpful -"unexpectedly failed" error message. However, the Finish API called on -the destination may report a real error so let's use it instead of the -generic one. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 2e7cea24355328102c40dd127329ddf47d55a3e2) - -https://bugzilla.redhat.com/show_bug.cgi?id=1090093 - -Signed-off-by: Jiri Denemark ---- - src/libvirt-domain.c | 30 ++++++++++++++++++++++++++++-- - src/qemu/qemu_migration.c | 39 +++++++++++++++++++++++++++++++++++++-- - 2 files changed, 65 insertions(+), 4 deletions(-) - -diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c -index 909c264..837933f 100644 ---- a/src/libvirt-domain.c -+++ b/src/libvirt-domain.c -@@ -3175,8 +3175,34 @@ virDomainMigrateVersion3Full(virDomainPtr domain, - (dconn, dname, cookiein, cookieinlen, &cookieout, &cookieoutlen, - NULL, uri, destflags, cancelled); - } -- if (cancelled && ddomain) -- VIR_ERROR(_("finish step ignored that migration was cancelled")); -+ -+ if (cancelled) { -+ if (ddomain) { -+ VIR_ERROR(_("finish step ignored that migration was cancelled")); -+ } else { -+ /* If Finish reported a useful error, use it instead of the -+ * original "migration unexpectedly failed" error. -+ * -+ * This is ugly but we can't do better with the APIs we have. We -+ * only replace the error if Finish was called with cancelled == 1 -+ * and reported a real error (old libvirt would report an error -+ * from RPC instead of MIGRATE_FINISH_OK), which only happens when -+ * the domain died on destination. To further reduce a possibility -+ * of false positives we also check that Perform returned -+ * VIR_ERR_OPERATION_FAILED. -+ */ -+ if (orig_err && -+ orig_err->domain == VIR_FROM_QEMU && -+ orig_err->code == VIR_ERR_OPERATION_FAILED) { -+ virErrorPtr err = virGetLastError(); -+ if (err->domain == VIR_FROM_QEMU && -+ err->code != VIR_ERR_MIGRATE_FINISH_OK) { -+ virFreeError(orig_err); -+ orig_err = NULL; -+ } -+ } -+ } -+ } - - /* If ddomain is NULL, then we were unable to start - * the guest on the target, and must restart on the -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index a9cbada..d789110 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -4982,8 +4982,34 @@ doPeer2PeerMigrate3(virQEMUDriverPtr driver, - dconnuri, uri, destflags, cancelled); - qemuDomainObjExitRemote(vm); - } -- if (cancelled && ddomain) -- VIR_ERROR(_("finish step ignored that migration was cancelled")); -+ -+ if (cancelled) { -+ if (ddomain) { -+ VIR_ERROR(_("finish step ignored that migration was cancelled")); -+ } else { -+ /* If Finish reported a useful error, use it instead of the -+ * original "migration unexpectedly failed" error. -+ * -+ * This is ugly but we can't do better with the APIs we have. We -+ * only replace the error if Finish was called with cancelled == 1 -+ * and reported a real error (old libvirt would report an error -+ * from RPC instead of MIGRATE_FINISH_OK), which only happens when -+ * the domain died on destination. To further reduce a possibility -+ * of false positives we also check that Perform returned -+ * VIR_ERR_OPERATION_FAILED. -+ */ -+ if (orig_err && -+ orig_err->domain == VIR_FROM_QEMU && -+ orig_err->code == VIR_ERR_OPERATION_FAILED) { -+ virErrorPtr err = virGetLastError(); -+ if (err->domain == VIR_FROM_QEMU && -+ err->code != VIR_ERR_MIGRATE_FINISH_OK) { -+ virFreeError(orig_err); -+ orig_err = NULL; -+ } -+ } -+ } -+ } - - /* If ddomain is NULL, then we were unable to start - * the guest on the target, and must restart on the -@@ -5719,6 +5745,15 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - /* Guest is successfully running, so cancel previous auto destroy */ - qemuProcessAutoDestroyRemove(driver, vm); - } else if (!(flags & VIR_MIGRATE_OFFLINE)) { -+ qemuDomainJobInfo info; -+ -+ /* Check for a possible error on the monitor in case Finish was called -+ * earlier than monitor EOF handler got a chance to process the error -+ */ -+ qemuMigrationFetchJobStatus(driver, vm, -+ QEMU_ASYNC_JOB_MIGRATION_IN, -+ &info); -+ - qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, - VIR_QEMU_PROCESS_STOP_MIGRATED); - virDomainAuditStop(vm, "failed"); --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Use-memory-backing-file-only-when-needed.patch b/SOURCES/libvirt-qemu-Use-memory-backing-file-only-when-needed.patch deleted file mode 100644 index 7fbd329..0000000 --- a/SOURCES/libvirt-qemu-Use-memory-backing-file-only-when-needed.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 22c900d292345ae1b4a0babc75b0b30bfea6f10f Mon Sep 17 00:00:00 2001 -Message-Id: <22c900d292345ae1b4a0babc75b0b30bfea6f10f@dist-git> -From: Martin Kletzander -Date: Tue, 6 Oct 2015 15:20:35 +0200 -Subject: [PATCH] qemu: Use memory-backing-file only when needed - -We are using memory-backing-file even when it's not needed, for example -if user requests hugepages for memory backing, but does not specify any -pagesize or memory node pinning. This causes migrations to fail when -migrating from older libvirt that did not do this. So similarly to -commit 7832fac84741d65e851dbdbfaf474785cbfdcf3c which does it for -memory-backend-ram, this commit makes is more generic and -backend-agnostic, so the backend is not used if there is no specific -pagesize of hugepages requested, no nodeset the memory node should be -bound to, no memory access change required, and so on. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1266856 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 41c2aa729f0af084ede95ee9a06219a2dd5fb5df) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 35 ++++++++++------------ - .../qemuxml2argv-hugepages-numa.args | 6 ++-- - 2 files changed, 19 insertions(+), 22 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 1d020d2..9c80e0c 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -4835,12 +4835,6 @@ qemuBuildMemoryBackendStr(unsigned long long size, - } - - if (pagesize || hugepage) { -- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { -- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -- _("this qemu doesn't support hugepage memory backing")); -- goto cleanup; -- } -- - if (pagesize) { - /* Now lets see, if the huge page we want to use is even mounted - * and ready to use */ -@@ -4919,29 +4913,32 @@ qemuBuildMemoryBackendStr(unsigned long long size, - goto cleanup; - } - -- if (!hugepage && !pagesize) { -- -- if ((userNodeset || nodeSpecified || force) && -- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) { -+ /* If none of the following is requested... */ -+ if (!pagesize && !userNodeset && !memAccess && !nodeSpecified && !force) { -+ /* report back that using the new backend is not necessary -+ * to achieve the desired configuration */ -+ ret = 1; -+ } else { -+ /* otherwise check the required capability */ -+ if (STREQ(*backendType, "memory-backend-file") && -+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("this qemu doesn't support the " -+ "memory-backend-file object")); -+ goto cleanup; -+ } else if (STREQ(*backendType, "memory-backend-ram") && -+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("this qemu doesn't support the " - "memory-backend-ram object")); - goto cleanup; - } - -- /* report back that using the new backend is not necessary to achieve -- * the desired configuration */ -- if (!userNodeset && !nodeSpecified) { -- *backendProps = props; -- props = NULL; -- ret = 1; -- goto cleanup; -- } -+ ret = 0; - } - - *backendProps = props; - props = NULL; -- ret = 0; - - cleanup: - virJSONValueFree(props); -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args -index 37511b1..3496cf1 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args -@@ -4,9 +4,9 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \ - -M pc-i440fx-2.3 \ - -m size=1048576k,slots=16,maxmem=1099511627776k \ - -smp 2 \ ---object memory-backend-file,id=ram-node0,prealloc=yes,\ --mem-path=/dev/hugepages2M/libvirt/qemu,size=1073741824 \ ---numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \ -+-mem-prealloc \ -+-mem-path /dev/hugepages2M/libvirt/qemu \ -+-numa node,nodeid=0,cpus=0-1,mem=1024 \ - -object memory-backend-file,id=memdimm0,prealloc=yes,\ - mem-path=/dev/hugepages1G/libvirt/qemu,size=1073741824,host-nodes=1-3,policy=bind \ - -device pc-dimm,node=0,memdev=memdimm0,id=dimm0 \ --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-Use-modern-vcpu-hotplug-approach-if-possible.patch b/SOURCES/libvirt-qemu-Use-modern-vcpu-hotplug-approach-if-possible.patch new file mode 100644 index 0000000..07e72c6 --- /dev/null +++ b/SOURCES/libvirt-qemu-Use-modern-vcpu-hotplug-approach-if-possible.patch @@ -0,0 +1,261 @@ +From f44af1507adb8d05bd5e2992734d7f275c34fc6a Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:38 -0400 +Subject: [PATCH] qemu: Use modern vcpu hotplug approach if possible + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +To allow unplugging the vcpus, hotplugging of vcpus on platforms which +require to plug multiple logical vcpus at once or plugging them in an +arbitrary order it's necessary to use the new device_add interface for +vcpu hotplug. + +This patch adds support for the device_add interface using the old +setvcpus API by implementing an algorithm to select the appropriate +entities to plug in. + +(cherry picked from commit 6d4ee77d754df83a0d006c8b503042b437c14df8) +--- + src/qemu/qemu_driver.c | 157 +++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 140 insertions(+), 17 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 43e00ff..900aacd 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4600,46 +4600,67 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + virDomainObjPtr vm, + unsigned int vcpu) + { +- qemuDomainObjPrivatePtr priv = vm->privateData; ++ virJSONValuePtr vcpuprops = NULL; + virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); + qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); ++ unsigned int nvcpus = vcpupriv->vcpus; ++ bool newhotplug = qemuDomainSupportsNewVcpuHotplug(vm); + int ret = -1; + int rc; + int oldvcpus = virDomainDefGetVcpus(vm->def); ++ size_t i; + +- if (vcpuinfo->online) { +- virReportError(VIR_ERR_INVALID_ARG, +- _("vCPU '%u' is already online"), vcpu); +- return -1; ++ if (newhotplug) { ++ if (virAsprintf(&vcpupriv->alias, "vcpu%u", vcpu) < 0) ++ goto cleanup; ++ ++ if (!(vcpuprops = qemuBuildHotpluggableCPUProps(vcpuinfo))) ++ goto cleanup; + } + + qemuDomainObjEnterMonitor(driver, vm); + +- rc = qemuMonitorSetCPU(priv->mon, vcpu, true); ++ if (newhotplug) { ++ rc = qemuMonitorAddDeviceArgs(qemuDomainGetMonitor(vm), vcpuprops); ++ vcpuprops = NULL; ++ } else { ++ rc = qemuMonitorSetCPU(qemuDomainGetMonitor(vm), vcpu, true); ++ } + + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; + +- virDomainAuditVcpu(vm, oldvcpus, oldvcpus + 1, "update", rc == 0); ++ virDomainAuditVcpu(vm, oldvcpus, oldvcpus + nvcpus, "update", rc == 0); + + if (rc < 0) + goto cleanup; + +- vcpuinfo->online = true; ++ /* start outputting of the new XML element to allow keeping unpluggability */ ++ if (newhotplug) ++ vm->def->individualvcpus = true; + + if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0) + goto cleanup; + +- if (qemuDomainValidateVcpuInfo(vm) < 0) +- goto cleanup; ++ /* validation requires us to set the expected state prior to calling it */ ++ for (i = vcpu; i < vcpu + nvcpus; i++) { ++ vcpuinfo = virDomainDefGetVcpu(vm->def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); + +- if (vcpupriv->tid > 0 && +- qemuProcessSetupVcpu(vm, vcpu) < 0) ++ vcpuinfo->online = true; ++ ++ if (vcpupriv->tid > 0 && ++ qemuProcessSetupVcpu(vm, i) < 0) ++ goto cleanup; ++ } ++ ++ if (qemuDomainValidateVcpuInfo(vm) < 0) + goto cleanup; + + ret = 0; + + cleanup: ++ virJSONValueFree(vcpuprops); + return ret; + } + +@@ -4777,6 +4798,96 @@ qemuDomainSetVcpusMax(virQEMUDriverPtr driver, + } + + ++/** ++ * qemuDomainSelectHotplugVcpuEntities: ++ * ++ * @def: domain definition ++ * @nvcpus: target vcpu count ++ * ++ * Tries to find which vcpu entities need to be enabled or disabled to reach ++ * @nvcpus. This function works in order of the legacy hotplug but is able to ++ * skip over entries that are added out of order. ++ * ++ * Returns the bitmap of vcpus to modify on success, NULL on error. ++ */ ++static virBitmapPtr ++qemuDomainSelectHotplugVcpuEntities(virDomainDefPtr def, ++ unsigned int nvcpus) ++{ ++ virBitmapPtr ret = NULL; ++ virDomainVcpuDefPtr vcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ unsigned int maxvcpus = virDomainDefGetVcpusMax(def); ++ unsigned int curvcpus = virDomainDefGetVcpus(def); ++ ssize_t i; ++ ++ if (!(ret = virBitmapNew(maxvcpus))) ++ return NULL; ++ ++ if (nvcpus > curvcpus) { ++ for (i = 0; i < maxvcpus && curvcpus < nvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ if (vcpu->online) ++ continue; ++ ++ if (vcpupriv->vcpus == 0) ++ continue; ++ ++ curvcpus += vcpupriv->vcpus; ++ ++ if (curvcpus > nvcpus) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("target vm vcpu granularity does not allow the " ++ "desired vcpu count")); ++ goto error; ++ } ++ ++ ignore_value(virBitmapSetBit(ret, i)); ++ } ++ } else { ++ for (i = maxvcpus - 1; i >= 0 && curvcpus > nvcpus; i--) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ if (!vcpu->online) ++ continue; ++ ++ if (vcpupriv->vcpus == 0) ++ continue; ++ ++ if (!vcpupriv->alias) ++ continue; ++ ++ curvcpus -= vcpupriv->vcpus; ++ ++ if (curvcpus < nvcpus) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("target vm vcpu granularity does not allow the " ++ "desired vcpu count")); ++ goto error; ++ } ++ ++ ignore_value(virBitmapSetBit(ret, i)); ++ } ++ } ++ ++ if (curvcpus != nvcpus) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("failed to find appropriate hotpluggable vcpus to " ++ "reach the desired target vcpu count")); ++ goto error; ++ } ++ ++ return ret; ++ ++ error: ++ virBitmapFree(ret); ++ return NULL; ++} ++ ++ + static int + qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + virQEMUDriverConfigPtr cfg, +@@ -4790,8 +4901,14 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + char *all_nodes_str = NULL; + virBitmapPtr all_nodes = NULL; + virErrorPtr err = NULL; ++ virBitmapPtr vcpumap = NULL; ++ ssize_t nextvcpu = -1; ++ int rc = 0; + int ret = -1; + ++ if (!(vcpumap = qemuDomainSelectHotplugVcpuEntities(vm->def, nvcpus))) ++ goto cleanup; ++ + if (virNumaIsAvailable() && + virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { + if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, +@@ -4810,20 +4927,25 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + } + + if (nvcpus > virDomainDefGetVcpus(vm->def)) { +- for (i = virDomainDefGetVcpus(vm->def); i < nvcpus; i++) { +- if (qemuDomainHotplugAddVcpu(driver, vm, i) < 0) +- goto cleanup; ++ while ((nextvcpu = virBitmapNextSetBit(vcpumap, nextvcpu)) != -1) { ++ if ((rc = qemuDomainHotplugAddVcpu(driver, vm, nextvcpu)) < 0) ++ break; + } + } else { + for (i = virDomainDefGetVcpus(vm->def) - 1; i >= nvcpus; i--) { +- if (qemuDomainHotplugDelVcpu(driver, vm, i) < 0) +- goto cleanup; ++ if ((rc = qemuDomainHotplugDelVcpu(driver, vm, i)) < 0) ++ break; + } + } + ++ qemuDomainVcpuPersistOrder(vm->def); ++ + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) + goto cleanup; + ++ if (rc < 0) ++ goto cleanup; ++ + ret = 0; + + cleanup: +@@ -4838,6 +4960,7 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + VIR_FREE(all_nodes_str); + virBitmapFree(all_nodes); + virCgroupFree(&cgroup_temp); ++ virBitmapFree(vcpumap); + + return ret; + } +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Use-numad-information-when-getting-pin-information.patch b/SOURCES/libvirt-qemu-Use-numad-information-when-getting-pin-information.patch deleted file mode 100644 index 61028c8..0000000 --- a/SOURCES/libvirt-qemu-Use-numad-information-when-getting-pin-information.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 739c64c914deae4be776f255540187793a3dc1de Mon Sep 17 00:00:00 2001 -Message-Id: <739c64c914deae4be776f255540187793a3dc1de@dist-git> -From: Martin Kletzander -Date: Thu, 13 Aug 2015 15:11:48 +0200 -Subject: [PATCH] qemu: Use numad information when getting pin information - -Pinning information returned for emulatorpin and vcpupin calls is being -returned from our data without querying cgroups for some time. However, -not all the data were utilized. When automatic placement is used the -information is not returned for the calls mentioned above. Since the -numad hint in private data is properly saved/restored, we can safely use -it to return true information. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1162947 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 776924e37649f2d47acd805746d5fd9325212ea5) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 48857ce..748f16a 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -5244,6 +5244,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom, - int ret = -1; - int hostcpus, vcpu; - virBitmapPtr allcpumap = NULL; -+ qemuDomainObjPrivatePtr priv = NULL; - - virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | - VIR_DOMAIN_AFFECT_CONFIG, -1); -@@ -5264,6 +5265,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom, - goto cleanup; - - virBitmapSetAll(allcpumap); -+ priv = vm->privateData; - - /* Clamp to actual number of vcpus */ - if (ncpumaps > def->vcpus) -@@ -5282,6 +5284,9 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom, - - if (pininfo && pininfo->cpumask) - bitmap = pininfo->cpumask; -+ else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && -+ priv->autoCpuset) -+ bitmap = priv->autoCpuset; - else - bitmap = allcpumap; - -@@ -5432,6 +5437,7 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, - int hostcpus; - virBitmapPtr cpumask = NULL; - virBitmapPtr bitmap = NULL; -+ qemuDomainObjPrivatePtr priv = NULL; - - virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | - VIR_DOMAIN_AFFECT_CONFIG, -1); -@@ -5448,10 +5454,15 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, - if ((hostcpus = nodeGetCPUCount(NULL)) < 0) - goto cleanup; - -+ priv = vm->privateData; -+ - if (def->cputune.emulatorpin) { - cpumask = def->cputune.emulatorpin; - } else if (def->cpumask) { - cpumask = def->cpumask; -+ } else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && -+ priv->autoCpuset) { -+ cpumask = priv->autoCpuset; - } else { - if (!(bitmap = virBitmapNew(hostcpus))) - goto cleanup; --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-Use-qemuDomainRequiresMlock-in-qemuBuildCommandLine.patch b/SOURCES/libvirt-qemu-Use-qemuDomainRequiresMlock-in-qemuBuildCommandLine.patch deleted file mode 100644 index 1969379..0000000 --- a/SOURCES/libvirt-qemu-Use-qemuDomainRequiresMlock-in-qemuBuildCommandLine.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 66f6a0bad6db35e654b0625d5a3fac939899c997 Mon Sep 17 00:00:00 2001 -Message-Id: <66f6a0bad6db35e654b0625d5a3fac939899c997@dist-git> -From: Andrea Bolognani -Date: Fri, 20 Nov 2015 13:29:12 +0100 -Subject: [PATCH] qemu: Use qemuDomainRequiresMlock() in qemuBuildCommandLine() - -This removes a duplication of the logic used to decide whether -the memory locking limit should be set. - -(cherry picked from commit cf9bd256556cfa1343e4438e4807625c9e1af921) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1283924 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 9 +++------ - 1 file changed, 3 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 7f8a31b..ece6081 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -8974,7 +8974,6 @@ qemuBuildCommandLine(virConnectPtr conn, - int usbcontroller = 0; - int actualSerials = 0; - bool usblegacy = false; -- bool mlock = false; - int contOrder[] = { - /* - * List of controller types that we add commandline args for, -@@ -9158,7 +9157,6 @@ qemuBuildCommandLine(virConnectPtr conn, - virCommandAddArgFormat(cmd, "mlock=%s", - def->mem.locked ? "on" : "off"); - } -- mlock = def->mem.locked; - - virCommandAddArg(cmd, "-smp"); - if (!(smp = qemuBuildSmpArgStr(def, qemuCaps))) -@@ -10850,9 +10848,6 @@ qemuBuildCommandLine(virConnectPtr conn, - "supported by this version of qemu")); - goto error; - } -- /* VFIO requires all of the guest's memory to be locked -- * resident */ -- mlock = true; - } - - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { -@@ -11146,7 +11141,9 @@ qemuBuildCommandLine(virConnectPtr conn, - goto error; - } - -- if (mlock) -+ /* In some situations, eg. VFIO passthrough, QEMU might need to lock a -+ * significant amount of memory, so we need to set the limit accordingly */ -+ if (qemuDomainRequiresMlock(def)) - virCommandSetMaxMemLock(cmd, qemuDomainGetMlockLimitBytes(def)); - - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSG_TIMESTAMP) && --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Use-qemuDomainRequiresMlock-when-attaching-PCI-hostdev.patch b/SOURCES/libvirt-qemu-Use-qemuDomainRequiresMlock-when-attaching-PCI-hostdev.patch deleted file mode 100644 index 2504f3e..0000000 --- a/SOURCES/libvirt-qemu-Use-qemuDomainRequiresMlock-when-attaching-PCI-hostdev.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 27dbf10245342d3547a969b9b69e95fee96932e0 Mon Sep 17 00:00:00 2001 -Message-Id: <27dbf10245342d3547a969b9b69e95fee96932e0@dist-git> -From: Andrea Bolognani -Date: Fri, 20 Nov 2015 13:29:13 +0100 -Subject: [PATCH] qemu: Use qemuDomainRequiresMlock() when attaching PCI - hostdev - -The function is used everywhere else to check whether the locked -memory limit should be set / updated, and it should be used here -as well. - -Moreover, qemuDomainGetMlockLimitBytes() expects the hostdev to -have already been added to the domain definition, but we only do -that at the end of qemuDomainAttachHostPCIDevice(). Work around -the issue by adding the hostdev before adjusting the locked memory -limit and removing it immediately afterwards. - -(cherry picked from commit 79b8c97e995d2e8bc04fb9a3972e1875fad01e6d) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1283924 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_hotplug.c | 23 ++++++++++++++++------- - 1 file changed, 16 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index 785423a..003b614 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -1277,17 +1277,26 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, - "supported by this version of qemu")); - goto error; - } -+ break; - -- /* setup memory locking limits, that are necessary for VFIO */ -+ default: -+ break; -+ } -+ -+ /* Temporarily add the hostdev to the domain definition. This is needed -+ * because qemuDomainRequiresMlock() and qemuDomainGetMlockLimitBytes() -+ * require the hostdev to be already part of the domain definition, but -+ * other functions like qemuAssignDeviceHostdevAlias() used below expect -+ * it *not* to be there. A better way to handle this would be nice */ -+ vm->def->hostdevs[vm->def->nhostdevs++] = hostdev; -+ if (qemuDomainRequiresMlock(vm->def)) { - if (virProcessSetMaxMemLock(vm->pid, -- qemuDomainGetMlockLimitBytes(vm->def)) < 0) -+ qemuDomainGetMlockLimitBytes(vm->def)) < 0) { -+ vm->def->hostdevs[--(vm->def->nhostdevs)] = NULL; - goto error; -- -- break; -- -- default: -- break; -+ } - } -+ vm->def->hostdevs[--(vm->def->nhostdevs)] = NULL; - - if (qemuSetupHostdevCGroup(vm, hostdev) < 0) - goto error; --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupEmulator.patch b/SOURCES/libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupEmulator.patch new file mode 100644 index 0000000..51ff8e9 --- /dev/null +++ b/SOURCES/libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupEmulator.patch @@ -0,0 +1,98 @@ +From abf332e0e9be7f8220bda459ad100aa4f0bb9ff6 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Martin Kletzander +Date: Wed, 24 Aug 2016 16:10:55 -0400 +Subject: [PATCH] qemu: Use qemuProcessSetupPid() in qemuProcessSetupEmulator() + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Signed-off-by: Martin Kletzander +(cherry picked from commit d65534f3ecba3dc2f99940eae75fa5cb01c59efc) +--- + src/qemu/qemu_process.c | 69 ++++--------------------------------------------- + 1 file changed, 5 insertions(+), 64 deletions(-) + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 64b1ac9..de34851 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -2415,70 +2415,11 @@ qemuProcessSetupPid(virDomainObjPtr vm, + static int + qemuProcessSetupEmulator(virDomainObjPtr vm) + { +- virBitmapPtr cpumask = NULL; +- virCgroupPtr cgroup_emulator = NULL; +- qemuDomainObjPrivatePtr priv = vm->privateData; +- unsigned long long period = vm->def->cputune.emulator_period; +- long long quota = vm->def->cputune.emulator_quota; +- int ret = -1; +- +- if ((period || quota) && +- !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("cgroup cpu is required for scheduler tuning")); +- return -1; +- } +- +- if (vm->def->cputune.emulatorpin) +- cpumask = vm->def->cputune.emulatorpin; +- else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && +- priv->autoCpuset) +- cpumask = priv->autoCpuset; +- else +- cpumask = vm->def->cpumask; +- +- /* If CPU cgroup controller is not initialized here, then we need +- * neither period nor quota settings. And if CPUSET controller is +- * not initialized either, then there's nothing to do anyway. */ +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) || +- virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- +- if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, +- true, &cgroup_emulator) < 0) +- goto cleanup; +- +- if (virCgroupAddTask(cgroup_emulator, vm->pid) < 0) +- goto cleanup; +- +- +- if (cpumask) { +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET) && +- qemuSetupCgroupCpusetCpus(cgroup_emulator, cpumask) < 0) +- goto cleanup; +- } +- +- if (period || quota) { +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) && +- qemuSetupCgroupVcpuBW(cgroup_emulator, period, +- quota) < 0) +- goto cleanup; +- } +- } +- +- if (cpumask && +- virProcessSetAffinity(vm->pid, cpumask) < 0) +- goto cleanup; +- +- ret = 0; +- +- cleanup: +- if (cgroup_emulator) { +- if (ret < 0) +- virCgroupRemove(cgroup_emulator); +- virCgroupFree(&cgroup_emulator); +- } +- +- return ret; ++ return qemuProcessSetupPid(vm, vm->pid, VIR_CGROUP_THREAD_EMULATOR, ++ 0, vm->def->cputune.emulatorpin, ++ vm->def->cputune.emulator_period, ++ vm->def->cputune.emulator_quota, ++ NULL); + } + + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupVcpu.patch b/SOURCES/libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupVcpu.patch new file mode 100644 index 0000000..84a509a --- /dev/null +++ b/SOURCES/libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupVcpu.patch @@ -0,0 +1,108 @@ +From c8ef2c52d8ce4adf880dd577c04fc6ab7463753a Mon Sep 17 00:00:00 2001 +Message-Id: +From: Martin Kletzander +Date: Wed, 24 Aug 2016 16:10:56 -0400 +Subject: [PATCH] qemu: Use qemuProcessSetupPid() in qemuProcessSetupVcpu() + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Signed-off-by: Martin Kletzander +(cherry picked from commit 949c43370e4b639a15ef81f6ae4fd439c68f1d07) +--- + src/qemu/qemu_process.c | 78 ++++--------------------------------------------- + 1 file changed, 5 insertions(+), 73 deletions(-) + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index de34851..4cfa81a 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -4627,80 +4627,12 @@ qemuProcessSetupVcpu(virDomainObjPtr vm, + { + pid_t vcpupid = qemuDomainGetVcpuPid(vm, vcpuid); + virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, vcpuid); +- qemuDomainObjPrivatePtr priv = vm->privateData; +- char *mem_mask = NULL; +- virDomainNumatuneMemMode mem_mode; +- unsigned long long period = vm->def->cputune.period; +- long long quota = vm->def->cputune.quota; +- virCgroupPtr cgroup_vcpu = NULL; +- virBitmapPtr cpumask; +- int ret = -1; + +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) || +- virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- +- if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 && +- mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT && +- virDomainNumatuneMaybeFormatNodeset(vm->def->numa, +- priv->autoNodeset, +- &mem_mask, -1) < 0) +- goto cleanup; +- +- if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_VCPU, vcpuid, +- true, &cgroup_vcpu) < 0) +- goto cleanup; +- +- if (period || quota) { +- if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0) +- goto cleanup; +- } +- } +- +- /* infer which cpumask shall be used */ +- if (vcpu->cpumask) +- cpumask = vcpu->cpumask; +- else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) +- cpumask = priv->autoCpuset; +- else +- cpumask = vm->def->cpumask; +- +- /* setup cgroups */ +- if (cgroup_vcpu) { +- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- if (mem_mask && virCgroupSetCpusetMems(cgroup_vcpu, mem_mask) < 0) +- goto cleanup; +- +- if (cpumask && qemuSetupCgroupCpusetCpus(cgroup_vcpu, cpumask) < 0) +- goto cleanup; +- } +- +- /* move the thread for vcpu to sub dir */ +- if (virCgroupAddTask(cgroup_vcpu, vcpupid) < 0) +- goto cleanup; +- } +- +- /* setup legacy affinty */ +- if (cpumask && virProcessSetAffinity(vcpupid, cpumask) < 0) +- goto cleanup; +- +- /* set scheduler type and priority */ +- if (vcpu->sched.policy != VIR_PROC_POLICY_NONE) { +- if (virProcessSetScheduler(vcpupid, vcpu->sched.policy, +- vcpu->sched.priority) < 0) +- goto cleanup; +- } +- +- ret = 0; +- +- cleanup: +- VIR_FREE(mem_mask); +- if (cgroup_vcpu) { +- if (ret < 0) +- virCgroupRemove(cgroup_vcpu); +- virCgroupFree(&cgroup_vcpu); +- } +- +- return ret; ++ return qemuProcessSetupPid(vm, vcpupid, VIR_CGROUP_THREAD_VCPU, ++ vcpuid, vcpu->cpumask, ++ vm->def->cputune.period, ++ vm->def->cputune.quota, ++ &vcpu->sched); + } + + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-Use-the-hostdev-alias-in-qemuDomainAttachHostSCSIDevice-error-path.patch b/SOURCES/libvirt-qemu-Use-the-hostdev-alias-in-qemuDomainAttachHostSCSIDevice-error-path.patch new file mode 100644 index 0000000..10bcd08 --- /dev/null +++ b/SOURCES/libvirt-qemu-Use-the-hostdev-alias-in-qemuDomainAttachHostSCSIDevice-error-path.patch @@ -0,0 +1,60 @@ +From 3c9f94b784cfffdb2419ccef90cd1c8d22150e8f Mon Sep 17 00:00:00 2001 +Message-Id: <3c9f94b784cfffdb2419ccef90cd1c8d22150e8f@dist-git> +From: John Ferlan +Date: Tue, 2 Aug 2016 12:04:40 -0400 +Subject: [PATCH] qemu: Use the hostdev alias in qemuDomainAttachHostSCSIDevice + error path + +https://bugzilla.redhat.com/show_bug.cgi?id=1289391 + +Rather than pass the whole drive string (which contained the alias), +pass only the alias for the qemuMonitorDriveDel call in the error +path when adding a host device in the monitor fails. + +(cherry picked from commit 1149fe4c15feba1a2970bd69c3d3d2884cd72938) +Signed-off-by: John Ferlan +--- + src/qemu/qemu_hotplug.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index f9ded35..51ab7c9 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -1968,6 +1968,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, + virErrorPtr orig_err; + char *devstr = NULL; + char *drvstr = NULL; ++ char *drivealias = NULL; + bool teardowncgroup = false; + bool teardownlabel = false; + bool driveAdded = false; +@@ -2026,6 +2027,9 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, + if (!(drvstr = qemuBuildSCSIHostdevDrvStr(hostdev))) + goto cleanup; + ++ if (!(drivealias = qemuAliasFromHostdev(hostdev))) ++ goto cleanup; ++ + if (!(devstr = qemuBuildSCSIHostdevDevStr(vm->def, hostdev, priv->qemuCaps))) + goto cleanup; + +@@ -2061,13 +2065,14 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, + vm->def, hostdev, NULL) < 0) + VIR_WARN("Unable to restore host device labelling on hotplug fail"); + } ++ VIR_FREE(drivealias); + VIR_FREE(drvstr); + VIR_FREE(devstr); + return ret; + + exit_monitor: + orig_err = virSaveLastError(); +- if (driveAdded && qemuMonitorDriveDel(priv->mon, drvstr) < 0) { ++ if (driveAdded && qemuMonitorDriveDel(priv->mon, drivealias) < 0) { + VIR_WARN("Unable to remove drive %s (%s) after failed " + "qemuMonitorAddDevice", + drvstr, devstr); +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-Wait-for-migration-events-on-domain-condition.patch b/SOURCES/libvirt-qemu-Wait-for-migration-events-on-domain-condition.patch deleted file mode 100644 index 7d57f2f..0000000 --- a/SOURCES/libvirt-qemu-Wait-for-migration-events-on-domain-condition.patch +++ /dev/null @@ -1,160 +0,0 @@ -From c08ee284b60c8c52faba6b0b4586fc9fdf018ddb Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Fri, 29 May 2015 08:38:44 +0200 -Subject: [PATCH] qemu: Wait for migration events on domain condition - -Since we already support the MIGRATION event, we just need to make sure -the domain condition is signalled whenever a p2p connection drops or the -domain is paused due to IO error and we can avoid waking up every 50 ms -to check whether something happened. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 3409f5bc4e0ea870982f4eee3bb6f97fe9f9f883) - -https://bugzilla.redhat.com/show_bug.cgi?id=1212077 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.h | 3 +++ - src/qemu/qemu_migration.c | 45 +++++++++++++++++++++++++++++++++++++++------ - src/qemu/qemu_process.c | 3 +++ - 3 files changed, 45 insertions(+), 6 deletions(-) - -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index 66dbcf5..2af7c59 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -199,6 +199,9 @@ struct _qemuDomainObjPrivate { - /* Bitmaps below hold data from the auto NUMA feature */ - virBitmapPtr autoNodeset; - virBitmapPtr autoCpuset; -+ -+ bool signalIOError; /* true if the domain condition should be signalled on -+ I/O error */ - }; - - # define QEMU_DOMAIN_DISK_PRIVATE(disk) \ -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 9a50923..7257182 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -2661,20 +2661,28 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver, - { - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr jobInfo = priv->job.current; -+ bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); - int rv; - - jobInfo->type = VIR_DOMAIN_JOB_UNBOUNDED; - while ((rv = qemuMigrationCompleted(driver, vm, asyncJob, dconn, - abort_on_error, storage)) != 1) { -- /* Poll every 50ms for progress & to allow cancellation */ -- struct timespec ts = { .tv_sec = 0, .tv_nsec = 50 * 1000 * 1000ull }; -- - if (rv < 0) - return rv; - -- virObjectUnlock(vm); -- nanosleep(&ts, NULL); -- virObjectLock(vm); -+ if (events) { -+ if (virDomainObjWait(vm) < 0) { -+ jobInfo->type = VIR_DOMAIN_JOB_FAILED; -+ return -2; -+ } -+ } else { -+ /* Poll every 50ms for progress & to allow cancellation */ -+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50 * 1000 * 1000ull }; -+ -+ virObjectUnlock(vm); -+ nanosleep(&ts, NULL); -+ virObjectLock(vm); -+ } - } - - qemuDomainJobInfoUpdateDowntime(jobInfo); -@@ -4148,6 +4156,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, - virErrorPtr orig_err = NULL; - unsigned int cookieFlags = 0; - bool abort_on_error = !!(flags & VIR_MIGRATE_ABORT_ON_ERROR); -+ bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); - int rc; - - VIR_DEBUG("driver=%p, vm=%p, cookiein=%s, cookieinlen=%d, " -@@ -4178,6 +4187,9 @@ qemuMigrationRun(virQEMUDriverPtr driver, - return -1; - } - -+ if (events) -+ priv->signalIOError = abort_on_error; -+ - mig = qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen, - cookieFlags | QEMU_MIGRATION_COOKIE_GRAPHICS); - if (!mig) -@@ -4387,6 +4399,9 @@ qemuMigrationRun(virQEMUDriverPtr driver, - - qemuMigrationCookieFree(mig); - -+ if (events) -+ priv->signalIOError = false; -+ - if (orig_err) { - virSetError(orig_err); - virFreeError(orig_err); -@@ -5029,6 +5044,18 @@ doPeer2PeerMigrate3(virQEMUDriverPtr driver, - } - - -+static void -+qemuMigrationConnectionClosed(virConnectPtr conn, -+ int reason, -+ void *opaque) -+{ -+ virDomainObjPtr vm = opaque; -+ -+ VIR_DEBUG("conn=%p, reason=%d, vm=%s", conn, reason, vm->def->name); -+ virDomainObjBroadcast(vm); -+} -+ -+ - static int virConnectCredType[] = { - VIR_CRED_AUTHNAME, - VIR_CRED_PASSPHRASE, -@@ -5104,6 +5131,11 @@ static int doPeer2PeerMigrate(virQEMUDriverPtr driver, - cfg->keepAliveCount) < 0) - goto cleanup; - -+ if (virConnectRegisterCloseCallback(dconn, qemuMigrationConnectionClosed, -+ vm, NULL) < 0) { -+ goto cleanup; -+ } -+ - qemuDomainObjEnterRemote(vm); - p2p = VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn, - VIR_DRV_FEATURE_MIGRATION_P2P); -@@ -5169,6 +5201,7 @@ static int doPeer2PeerMigrate(virQEMUDriverPtr driver, - cleanup: - orig_err = virSaveLastError(); - qemuDomainObjEnterRemote(vm); -+ virConnectUnregisterCloseCallback(dconn, qemuMigrationConnectionClosed); - virObjectUnref(dconn); - qemuDomainObjExitRemote(vm); - if (orig_err) { -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 577f309..7abeaae 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -952,6 +952,9 @@ qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - qemuDomainObjPrivatePtr priv = vm->privateData; - VIR_DEBUG("Transitioned guest %s to paused state due to IO error", vm->def->name); - -+ if (priv->signalIOError) -+ virDomainObjBroadcast(vm); -+ - virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_IOERROR); - lifecycleEvent = virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_SUSPENDED, --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-Wait-until-destination-QEMU-consumes-all-migration-data.patch b/SOURCES/libvirt-qemu-Wait-until-destination-QEMU-consumes-all-migration-data.patch deleted file mode 100644 index bc05891..0000000 --- a/SOURCES/libvirt-qemu-Wait-until-destination-QEMU-consumes-all-migration-data.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 1bf327f3bea0116dabef57a58fb9127d7e3b0de5 Mon Sep 17 00:00:00 2001 -Message-Id: <1bf327f3bea0116dabef57a58fb9127d7e3b0de5@dist-git> -From: Jiri Denemark -Date: Fri, 2 Oct 2015 12:08:26 +0200 -Subject: [PATCH] qemu: Wait until destination QEMU consumes all migration data - -Even though QEMU on the source host reports completed migration and thus -we move to the Finish phase, QEMU on the destination host may still be -processing migration data. Thus before we can start guest CPUs on the -destination, we have to wait for a completed migration event. - -https://bugzilla.redhat.com/show_bug.cgi?id=1265902 - -Signed-off-by: Jiri Denemark -(cherry picked from commit be5347bb7223cab0a9f0713ed9c4bf5738a7e0ea) -Signed-off-by: Jiri Denemark - -Conflicts: - src/qemu/qemu_migration.c - missing qemuMigrationFinish - refactoring ---- - src/qemu/qemu_migration.c | 26 ++++++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index 83614f5..d3e024e 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -5710,6 +5710,32 @@ qemuMigrationFinish(virQEMUDriverPtr driver, - event = NULL; - } - -+ /* We need to wait for QEMU to process all data sent by the source -+ * before starting guest CPUs. -+ */ -+ if (!(flags & VIR_MIGRATE_OFFLINE) && -+ virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { -+ int rv; -+ VIR_DEBUG("Waiting for migration to complete"); -+ while ((rv = qemuMigrationCompleted(driver, vm, -+ QEMU_ASYNC_JOB_MIGRATION_IN, -+ NULL, 0)) != 1) { -+ if (rv < 0 || virDomainObjWait(vm) < 0) { -+ /* There's not much we can do for v2 protocol since the -+ * original domain on the source host is already gone. -+ */ -+ if (v3proto) { -+ qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, -+ VIR_QEMU_PROCESS_STOP_MIGRATED); -+ virDomainAuditStop(vm, "failed"); -+ goto endjob; -+ } else { -+ break; -+ } -+ } -+ } -+ } -+ - if (!(flags & VIR_MIGRATE_PAUSED) && !(flags & VIR_MIGRATE_OFFLINE)) { - /* run 'cont' on the destination, which allows migration on qemu - * >= 0.10.6 to work properly. This isn't strictly necessary on --- -2.6.1 - diff --git a/SOURCES/libvirt-qemu-bulk-stats-Don-t-access-possibly-blocked-storage.patch b/SOURCES/libvirt-qemu-bulk-stats-Don-t-access-possibly-blocked-storage.patch deleted file mode 100644 index ed7b0c8..0000000 --- a/SOURCES/libvirt-qemu-bulk-stats-Don-t-access-possibly-blocked-storage.patch +++ /dev/null @@ -1,57 +0,0 @@ -From a3176697f2d1288d3e30ca6aac0d2c5891a6b135 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Thu, 26 May 2016 12:54:54 +0200 -Subject: [PATCH] qemu: bulk stats: Don't access possibly blocked storage - -https://bugzilla.redhat.com/show_bug.cgi?id=1339963 - -If the stats for a block device can't be acquired from qemu we've -fallen back to loading them from the file on the disk in libvirt. - -If qemu is not cooperating due to being stuck on an inaccessible NFS -share we would then attempt to read the files and get stuck too with -the VM object locked. All other APIs would eventually get stuck waiting -on the VM lock. - -Avoid this problem by skipping the block stats if the VM is online but -the monitor did not provide any stats. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1337073 -(cherry picked from commit 71d2c172edb997bae1e883b2e1bafa97d9f953a1) ---- - src/qemu/qemu_driver.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 1075237..5e28b21 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -19392,13 +19392,22 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, - QEMU_ADD_BLOCK_PARAM_UI(record, maxparams, block_idx, "backingIndex", - backing_idx); - -- /* use fallback path if data is not available */ -- if (!stats || !alias || !(entry = virHashLookup(stats, alias))) { -+ /* the VM is offline so we have to go and load the stast from the disk by -+ * ourselves */ -+ if (!virDomainObjIsActive(dom)) { - ret = qemuDomainGetStatsOneBlockFallback(driver, cfg, dom, record, - maxparams, src, block_idx); - goto cleanup; - } - -+ /* In case where qemu didn't provide the stats we stop here rather than -+ * trying to refresh the stats from the disk. Inability to provide stats is -+ * usually caused by blocked storage so this would make libvirtd hang */ -+ if (!stats || !alias || !(entry = virHashLookup(stats, alias))) { -+ ret = 0; -+ goto cleanup; -+ } -+ - QEMU_ADD_BLOCK_PARAM_LL(record, maxparams, block_idx, - "rd.reqs", entry->rd_req); - QEMU_ADD_BLOCK_PARAM_LL(record, maxparams, block_idx, --- -2.8.3 - diff --git a/SOURCES/libvirt-qemu-cap-Refactor-access-to-array-in-virQEMUCapsProbeQMPMachineTypes.patch b/SOURCES/libvirt-qemu-cap-Refactor-access-to-array-in-virQEMUCapsProbeQMPMachineTypes.patch new file mode 100644 index 0000000..25ce6c3 --- /dev/null +++ b/SOURCES/libvirt-qemu-cap-Refactor-access-to-array-in-virQEMUCapsProbeQMPMachineTypes.patch @@ -0,0 +1,53 @@ +From c087402082daa56d2141208e404f8a38b7569a2b Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:02 -0400 +Subject: [PATCH] qemu: cap: Refactor access to array in + virQEMUCapsProbeQMPMachineTypes + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Use a temporary pointer rather than always recalculating the index in a +very verbose way. + +(cherry picked from commit e44cdaf80b3af528a7b9ab5b555cd09cd27b3f1e) +--- + src/qemu/qemu_capabilities.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index f6a42e7..49ad9df 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -2485,18 +2485,20 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, + goto cleanup; + + for (i = 0; i < nmachines; i++) { ++ struct virQEMUCapsMachineType *mach; + if (STREQ(machines[i]->name, "none")) + continue; +- qemuCaps->nmachineTypes++; +- if (VIR_STRDUP(qemuCaps->machineTypes[qemuCaps->nmachineTypes -1].alias, +- machines[i]->alias) < 0 || +- VIR_STRDUP(qemuCaps->machineTypes[qemuCaps->nmachineTypes - 1].name, +- machines[i]->name) < 0) ++ ++ mach = &(qemuCaps->machineTypes[qemuCaps->nmachineTypes++]); ++ ++ if (VIR_STRDUP(mach->alias, machines[i]->alias) < 0 || ++ VIR_STRDUP(mach->name, machines[i]->name) < 0) + goto cleanup; ++ ++ mach->maxCpus = machines[i]->maxCpus; ++ + if (machines[i]->isDefault) + defIdx = qemuCaps->nmachineTypes - 1; +- qemuCaps->machineTypes[qemuCaps->nmachineTypes - 1].maxCpus = +- machines[i]->maxCpus; + } + + if (defIdx) +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-capabilities-Drop-unused-function-virQEMUCapsGetMachineTypes.patch b/SOURCES/libvirt-qemu-capabilities-Drop-unused-function-virQEMUCapsGetMachineTypes.patch new file mode 100644 index 0000000..77b5c66 --- /dev/null +++ b/SOURCES/libvirt-qemu-capabilities-Drop-unused-function-virQEMUCapsGetMachineTypes.patch @@ -0,0 +1,51 @@ +From c5ac7b8d107300265d16424ad0fb5a754446b2e8 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:00 -0400 +Subject: [PATCH] qemu: capabilities: Drop unused function + virQEMUCapsGetMachineTypes + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +(cherry picked from commit d2d5a9112606d1dd2478236ea9034423cdfc0c5a) +--- + src/qemu/qemu_capabilities.c | 8 -------- + src/qemu/qemu_capabilities.h | 2 -- + 2 files changed, 10 deletions(-) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index f41c8c4..56fefbb 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -2239,14 +2239,6 @@ size_t virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, + } + + +-size_t virQEMUCapsGetMachineTypes(virQEMUCapsPtr qemuCaps, +- char ***names) +-{ +- if (names) +- *names = qemuCaps->machineTypes; +- return qemuCaps->nmachineTypes; +-} +- + int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, + size_t *nmachines, + virCapsGuestMachinePtr **machines) +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index ba9556d..ac1593d 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -422,8 +422,6 @@ int virQEMUCapsAddCPUDefinition(virQEMUCapsPtr qemuCaps, + const char *name); + size_t virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, + char ***names); +-size_t virQEMUCapsGetMachineTypes(virQEMUCapsPtr qemuCaps, +- char ***names); + const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, + const char *name); + int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-capabilities-Extract-availability-of-new-cpu-hotplug-for-machine-types.patch b/SOURCES/libvirt-qemu-capabilities-Extract-availability-of-new-cpu-hotplug-for-machine-types.patch new file mode 100644 index 0000000..dd7bdc4 --- /dev/null +++ b/SOURCES/libvirt-qemu-capabilities-Extract-availability-of-new-cpu-hotplug-for-machine-types.patch @@ -0,0 +1,228 @@ +From e8f1dbb6bb0d1d34615ccc7ae0a4cbc7b8afbe9f Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:21 -0400 +Subject: [PATCH] qemu: capabilities: Extract availability of new cpu hotplug + for machine types + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +QEMU reports whether 'query-hotpluggable-cpus' is supported for a given +machine type. Extract and cache the information using the capability +cache. + +When copying the capabilities for a new start of qemu, mask out the +presence of QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS if the machine type +doesn't support hotpluggable cpus. + +(cherry picked from commit 920bbe5c15007b470a97cdc33353b17a7be5a55e) +--- + src/qemu/qemu_capabilities.c | 29 ++++++++++++- + src/qemu/qemu_capabilities.h | 2 + + src/qemu/qemu_monitor.h | 1 + + src/qemu/qemu_monitor_json.c | 3 ++ + tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 54 ++++++++++++------------ + 5 files changed, 61 insertions(+), 28 deletions(-) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index ffd54c5..5b68271 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -347,6 +347,7 @@ struct virQEMUCapsMachineType { + char *name; + char *alias; + unsigned int maxCpus; ++ bool hotplugCpus; + }; + /* + * Update the XML parser/formatter when adding more +@@ -546,6 +547,7 @@ virQEMUCapsParseMachineTypesStr(const char *output, + } + /* When parsing from command line we don't have information about maxCpus */ + qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].maxCpus = 0; ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].hotplugCpus = false; + } while ((p = next)); + + +@@ -2041,6 +2043,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) + VIR_STRDUP(ret->machineTypes[i].alias, qemuCaps->machineTypes[i].alias) < 0) + goto error; + ret->machineTypes[i].maxCpus = qemuCaps->machineTypes[i].maxCpus; ++ ret->machineTypes[i].hotplugCpus = qemuCaps->machineTypes[i].hotplugCpus; + } + + return ret; +@@ -2344,6 +2347,20 @@ int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, + } + + ++bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, ++ const char *name) ++{ ++ size_t i; ++ ++ for (i = 0; i < qemuCaps->nmachineTypes; i++) { ++ if (STREQ_NULLABLE(qemuCaps->machineTypes[i].name, name)) ++ return qemuCaps->machineTypes[i].hotplugCpus; ++ } ++ ++ return false; ++} ++ ++ + /** + * virQEMUCapsSetGICCapabilities: + * @qemuCaps: QEMU capabilities +@@ -2498,6 +2515,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, + goto cleanup; + + mach->maxCpus = machines[i]->maxCpus; ++ mach->hotplugCpus = machines[i]->hotplugCpus; + + if (machines[i]->isDefault) + defIdx = qemuCaps->nmachineTypes - 1; +@@ -2756,7 +2774,7 @@ int virQEMUCapsProbeQMP(virQEMUCapsPtr qemuCaps, + * ... + * + * ... +- * ++ * + * ... + * + */ +@@ -2913,6 +2931,11 @@ virQEMUCapsLoadCache(virQEMUCapsPtr qemuCaps, const char *filename, + goto cleanup; + } + VIR_FREE(str); ++ ++ str = virXMLPropString(nodes[i], "hotplugCpus"); ++ if (STREQ_NULLABLE(str, "yes")) ++ qemuCaps->machineTypes[i].hotplugCpus = true; ++ VIR_FREE(str); + } + } + VIR_FREE(nodes); +@@ -3046,6 +3069,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps, + if (qemuCaps->machineTypes[i].alias) + virBufferEscapeString(&buf, " alias='%s'", + qemuCaps->machineTypes[i].alias); ++ if (qemuCaps->machineTypes[i].hotplugCpus) ++ virBufferAddLit(&buf, " hotplugCpus='yes'"); + virBufferAsprintf(&buf, " maxCpus='%u'/>\n", + qemuCaps->machineTypes[i].maxCpus); + } +@@ -3836,6 +3861,8 @@ virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, + virQEMUCapsClear(qemuCaps, filter->flags[j]); + } + ++ if (!virQEMUCapsGetMachineHotplugCpus(qemuCaps, machineType)) ++ virQEMUCapsClear(qemuCaps, QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS); + } + + +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index 68d1ea8..e05c178 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -427,6 +427,8 @@ const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, + const char *name); + int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, + const char *name); ++bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, ++ const char *name); + int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, + size_t *nmachines, + virCapsGuestMachinePtr **machines); +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 5ec2101..2269d60 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -853,6 +853,7 @@ struct _qemuMonitorMachineInfo { + bool isDefault; + char *alias; + unsigned int maxCpus; ++ bool hotplugCpus; + }; + + int qemuMonitorGetMachines(qemuMonitorPtr mon, +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index 5836e1e..8243b52 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -4979,6 +4979,9 @@ int qemuMonitorJSONGetMachines(qemuMonitorPtr mon, + _("query-machines reply has malformed 'cpu-max' data")); + goto cleanup; + } ++ ++ ignore_value(virJSONValueObjectGetBoolean(child, "hotpluggable-cpus", ++ &info->hotplugCpus)); + } + + ret = n; +diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +index 0f3c17a..8f878fe 100644 +--- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +@@ -225,31 +225,31 @@ + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-caps-Always-assume-QEMU_CAPS_SMP_TOPOLOGY.patch b/SOURCES/libvirt-qemu-caps-Always-assume-QEMU_CAPS_SMP_TOPOLOGY.patch new file mode 100644 index 0000000..cb5bda5 --- /dev/null +++ b/SOURCES/libvirt-qemu-caps-Always-assume-QEMU_CAPS_SMP_TOPOLOGY.patch @@ -0,0 +1,7258 @@ +From aa9c3728755d05264de287ef4cdcfbb16eedd139 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:42 -0400 +Subject: [PATCH] qemu: caps: Always assume QEMU_CAPS_SMP_TOPOLOGY + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Support for SMP topology was added by qemu commit dc6b1c09849484fbbc50 +prior to 0.12.0, our minimum supported qemu version. + +$ git describe --tags dc6b1c09849484fbbc50803307e4c7a3d81eab62 +v0.11.0-rc0-449-gdc6b1c0 +$ git describe --tags --contains dc6b1c09849484fbbc50803307e4c7a3d81eab +v0.12.0-rc0~1477 + +(cherry picked from commit e114b09157b7fcca12b218b531debfbc0c3a09d7) + + Conflicts and changes: various test cases added after this commit + landed upstream were backported prior to this patch. I've removed + a few instances of QEMU_CAPS_SMP_TOPOLOGY added by them and fixed + all the test cases not having the topology specified. +--- + src/qemu/qemu_capabilities.c | 5 --- + src/qemu/qemu_capabilities.h | 2 +- + src/qemu/qemu_command.c | 40 ++++++++-------------- + tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml | 1 - + tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 1 - + .../caps_2.6.0-gicv2.aarch64.xml | 1 - + .../caps_2.6.0-gicv3.aarch64.xml | 1 - + tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 1 - + tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 1 - + tests/qemuhelptest.c | 8 ----- + .../qemuxml2argv-aarch64-aavmf-virtio-mmio.args | 2 +- + .../qemuxml2argv-aarch64-cpu-passthrough.args | 2 +- + .../qemuxml2argv-aarch64-gic-host.args | 2 +- + .../qemuxml2argv-aarch64-gic-v2.args | 2 +- + .../qemuxml2argv-aarch64-gic-v3.args | 2 +- + .../qemuxml2argv-aarch64-kvm-32-on-64.args | 2 +- + ...l2argv-aarch64-virt-2.6-virtio-pci-default.args | 2 +- + .../qemuxml2argv-aarch64-virt-default-nic.args | 2 +- + .../qemuxml2argv-aarch64-virt-virtio.args | 2 +- + .../qemuxml2argv-aarch64-virtio-pci-default.args | 2 +- + ...l2argv-aarch64-virtio-pci-manual-addresses.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-acpi-table.args | 2 +- + .../qemuxml2argv-arm-vexpressa9-basic.args | 2 +- + .../qemuxml2argv-arm-vexpressa9-nodevs.args | 2 +- + .../qemuxml2argv-arm-vexpressa9-virtio.args | 2 +- + .../qemuxml2argv-arm-virt-virtio.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-autoindex.args | 2 +- + .../qemuxml2argv-balloon-ccw-deflate.args | 2 +- + .../qemuxml2argv-balloon-device-auto.args | 2 +- + .../qemuxml2argv-balloon-device-deflate-off.args | 2 +- + .../qemuxml2argv-balloon-device-deflate.args | 2 +- + .../qemuxml2argv-balloon-device-period.args | 2 +- + .../qemuxml2argv-balloon-device.args | 2 +- + .../qemuxml2argv-balloon-mmio-deflate.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-bios-nvram.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-bios.args | 2 +- + .../qemuxml2argv-blkdeviotune-max.args | 2 +- + .../qemuxml2argv-blkdeviotune.args | 2 +- + .../qemuxml2argv-blkiotune-device.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-boot-cdrom.args | 2 +- + .../qemuxml2argv-boot-complex-bootindex.args | 2 +- + .../qemuxml2argv-boot-complex.args | 2 +- + .../qemuxml2argv-boot-floppy-q35.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-boot-floppy.args | 2 +- + ...xml2argv-boot-menu-disable-drive-bootindex.args | 2 +- + .../qemuxml2argv-boot-menu-disable-drive.args | 2 +- + .../qemuxml2argv-boot-menu-disable.args | 2 +- + .../qemuxml2argv-boot-menu-enable-bootindex.args | 2 +- + ...qemuxml2argv-boot-menu-enable-with-timeout.args | 2 +- + .../qemuxml2argv-boot-menu-enable.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-boot-multi.args | 2 +- + .../qemuxml2argv-boot-network.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-boot-order.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-boot-strict.args | 2 +- + .../qemuxml2argv-bootindex-floppy-q35.args | 2 +- + .../qemuxml2argv-channel-guestfwd.args | 2 +- + .../qemuxml2argv-channel-spicevmc-old.args | 2 +- + .../qemuxml2argv-channel-spicevmc.args | 2 +- + .../qemuxml2argv-channel-virtio-auto.args | 2 +- + .../qemuxml2argv-channel-virtio-autoadd.args | 2 +- + .../qemuxml2argv-channel-virtio-autoassign.args | 2 +- + .../qemuxml2argv-channel-virtio-default.args | 2 +- + .../qemuxml2argv-channel-virtio-state.args | 2 +- + .../qemuxml2argv-channel-virtio-unix.args | 2 +- + .../qemuxml2argv-channel-virtio.args | 2 +- + .../qemuxml2argv-clock-catchup.args | 2 +- + .../qemuxml2argv-clock-france.args | 2 +- + .../qemuxml2argv-clock-hpet-off.args | 2 +- + ...muxml2argv-clock-localtime-basis-localtime.args | 2 +- + .../qemuxml2argv-clock-localtime.args | 2 +- + .../qemuxml2argv-clock-timer-hyperv-rtc.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args | 2 +- + .../qemuxml2argv-clock-variable.args | 2 +- + .../qemuxml2argv-console-compat-auto.args | 2 +- + .../qemuxml2argv-console-compat-chardev.args | 2 +- + .../qemuxml2argv-console-compat.args | 2 +- + .../qemuxml2argv-console-sclp.args | 2 +- + .../qemuxml2argv-console-virtio-ccw.args | 2 +- + .../qemuxml2argv-console-virtio-many.args | 2 +- + .../qemuxml2argv-console-virtio-s390.args | 2 +- + .../qemuxml2argv-console-virtio.args | 2 +- + .../qemuxml2argv-controller-order.args | 2 +- + .../qemuxml2argv-cpu-Haswell-noTSX.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args | 2 +- + .../qemuxml2argv-cpu-Haswell2.args | 2 +- + .../qemuxml2argv-cpu-Haswell3.args | 2 +- + .../qemuxml2argv-cpu-eoi-disabled.args | 2 +- + .../qemuxml2argv-cpu-eoi-enabled.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-cpu-exact1.args | 2 +- + .../qemuxml2argv-cpu-exact2-nofallback.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-cpu-exact2.args | 2 +- + .../qemuxml2argv-cpu-fallback.args | 2 +- + .../qemuxml2argv-cpu-host-kvmclock.args | 2 +- + .../qemuxml2argv-cpu-host-model-cmt.args | 2 +- + .../qemuxml2argv-cpu-host-model-fallback.args | 2 +- + .../qemuxml2argv-cpu-host-model-vendor.args | 2 +- + .../qemuxml2argv-cpu-host-model.args | 2 +- + ...qemuxml2argv-cpu-host-passthrough-features.args | 2 +- + .../qemuxml2argv-cpu-host-passthrough.args | 2 +- + .../qemuxml2argv-cpu-kvmclock.args | 2 +- + .../qemuxml2argv-cpu-minimum1.args | 2 +- + .../qemuxml2argv-cpu-minimum2.args | 2 +- + .../qemuxml2argv-cpu-numa-disjoint.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-cpu-numa1.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-cpu-strict1.args | 2 +- + .../qemuxml2argv-cpu-topology3.args | 2 +- + .../qemuxml2argv-cputune-zero-shares.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-cputune.args | 2 +- + .../qemuxml2argv-debug-threads.args | 2 +- + .../qemuxml2argv-default-kvm-host-arch.args | 2 +- + .../qemuxml2argv-default-qemu-host-arch.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args | 2 +- + .../qemuxml2argv-disk-blockio.args | 2 +- + .../qemuxml2argv-disk-cdrom-empty.args | 2 +- + .../qemuxml2argv-disk-cdrom-network-ftp.args | 2 +- + .../qemuxml2argv-disk-cdrom-network-ftps.args | 2 +- + .../qemuxml2argv-disk-cdrom-network-http.args | 2 +- + .../qemuxml2argv-disk-cdrom-network-https.args | 2 +- + .../qemuxml2argv-disk-cdrom-network-tftp.args | 2 +- + ...qemuxml2argv-disk-cdrom-tray-no-device-cap.args | 2 +- + .../qemuxml2argv-disk-cdrom-tray.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-disk-cdrom.args | 2 +- + .../qemuxml2argv-disk-copy_on_read.args | 2 +- + .../qemuxml2argv-disk-drive-boot-cdrom.args | 2 +- + .../qemuxml2argv-disk-drive-boot-disk.args | 2 +- + .../qemuxml2argv-disk-drive-cache-directsync.args | 2 +- + .../qemuxml2argv-disk-drive-cache-unsafe.args | 2 +- + .../qemuxml2argv-disk-drive-cache-v2-none.args | 2 +- + .../qemuxml2argv-disk-drive-cache-v2-wb.args | 2 +- + .../qemuxml2argv-disk-drive-cache-v2-wt.args | 2 +- + .../qemuxml2argv-disk-drive-copy-on-read.args | 2 +- + .../qemuxml2argv-disk-drive-detect-zeroes.args | 2 +- + .../qemuxml2argv-disk-drive-discard.args | 2 +- + ...uxml2argv-disk-drive-error-policy-enospace.args | 2 +- + .../qemuxml2argv-disk-drive-error-policy-stop.args | 2 +- + ...gv-disk-drive-error-policy-wreport-rignore.args | 2 +- + .../qemuxml2argv-disk-drive-fmt-qcow.args | 2 +- + .../qemuxml2argv-disk-drive-network-gluster.args | 2 +- + ...qemuxml2argv-disk-drive-network-iscsi-auth.args | 2 +- + .../qemuxml2argv-disk-drive-network-iscsi-lun.args | 2 +- + .../qemuxml2argv-disk-drive-network-iscsi.args | 2 +- + ...qemuxml2argv-disk-drive-network-nbd-export.args | 2 +- + ...ml2argv-disk-drive-network-nbd-ipv6-export.args | 2 +- + .../qemuxml2argv-disk-drive-network-nbd-ipv6.args | 2 +- + .../qemuxml2argv-disk-drive-network-nbd-unix.args | 2 +- + .../qemuxml2argv-disk-drive-network-nbd.args | 2 +- + ...muxml2argv-disk-drive-network-rbd-auth-AES.args | 2 +- + .../qemuxml2argv-disk-drive-network-rbd-auth.args | 2 +- + .../qemuxml2argv-disk-drive-network-rbd-ipv6.args | 2 +- + .../qemuxml2argv-disk-drive-network-rbd.args | 2 +- + .../qemuxml2argv-disk-drive-network-sheepdog.args | 2 +- + .../qemuxml2argv-disk-drive-no-boot.args | 2 +- + .../qemuxml2argv-disk-drive-readonly-disk.args | 2 +- + ...qemuxml2argv-disk-drive-readonly-no-device.args | 2 +- + .../qemuxml2argv-disk-drive-shared.args | 2 +- + ...emuxml2argv-disk-floppy-tray-no-device-cap.args | 2 +- + .../qemuxml2argv-disk-floppy-tray.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-disk-floppy.args | 2 +- + .../qemuxml2argv-disk-geometry.args | 2 +- + .../qemuxml2argv-disk-ide-drive-split.args | 2 +- + .../qemuxml2argv-disk-ide-wwn.args | 2 +- + .../qemuxml2argv-disk-ioeventfd.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-disk-iscsi.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-disk-many.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-disk-order.args | 2 +- + .../qemuxml2argv-disk-sata-device.args | 2 +- + .../qemuxml2argv-disk-scsi-device-auto.args | 2 +- + .../qemuxml2argv-disk-scsi-device.args | 2 +- + .../qemuxml2argv-disk-scsi-disk-split.args | 2 +- + .../qemuxml2argv-disk-scsi-disk-vpd.args | 2 +- + .../qemuxml2argv-disk-scsi-disk-wwn.args | 2 +- + .../qemuxml2argv-disk-scsi-lun-passthrough.args | 2 +- + .../qemuxml2argv-disk-scsi-megasas.args | 2 +- + .../qemuxml2argv-disk-scsi-mptsas1068.args | 2 +- + .../qemuxml2argv-disk-scsi-virtio-scsi.args | 2 +- + .../qemuxml2argv-disk-scsi-vscsi.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-disk-serial.args | 2 +- + .../qemuxml2argv-disk-snapshot.args | 2 +- + .../qemuxml2argv-disk-source-pool-mode.args | 2 +- + .../qemuxml2argv-disk-source-pool.args | 2 +- + .../qemuxml2argv-disk-usb-device-removable.args | 2 +- + .../qemuxml2argv-disk-usb-device.args | 2 +- + .../qemuxml2argv-disk-virtio-ccw-many.args | 2 +- + .../qemuxml2argv-disk-virtio-ccw.args | 2 +- + .../qemuxml2argv-disk-virtio-s390.args | 2 +- + .../qemuxml2argv-disk-virtio-scsi-ccw.args | 2 +- + .../qemuxml2argv-disk-virtio-scsi-cmd_per_lun.args | 2 +- + .../qemuxml2argv-disk-virtio-scsi-ioeventfd.args | 2 +- + .../qemuxml2argv-disk-virtio-scsi-max_sectors.args | 2 +- + .../qemuxml2argv-disk-virtio-scsi-num_queues.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-disk-virtio.args | 2 +- + .../qemuxml2argv-encrypted-disk-usage.args | 2 +- + .../qemuxml2argv-encrypted-disk.args | 2 +- + .../qemuxml2argv-eoi-disabled.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-eoi-enabled.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-event_idx.args | 2 +- + .../qemuxml2argv-fips-enabled.args | 2 +- + .../qemuxml2argv-floppy-drive-fat.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-fs9p-ccw.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-fs9p.args | 2 +- + .../qemuxml2argv-graphics-sdl-fullscreen.args | 2 +- + .../qemuxml2argv-graphics-sdl.args | 2 +- + ...emuxml2argv-graphics-spice-agent-file-xfer.args | 2 +- + .../qemuxml2argv-graphics-spice-agentmouse.args | 2 +- + ...emuxml2argv-graphics-spice-auto-socket-cfg.args | 2 +- + .../qemuxml2argv-graphics-spice-auto-socket.args | 2 +- + .../qemuxml2argv-graphics-spice-compression.args | 2 +- + .../qemuxml2argv-graphics-spice-no-args.args | 2 +- + .../qemuxml2argv-graphics-spice-qxl-vga.args | 2 +- + .../qemuxml2argv-graphics-spice-sasl.args | 2 +- + .../qemuxml2argv-graphics-spice-socket.args | 2 +- + .../qemuxml2argv-graphics-spice-timeout.args | 2 +- + .../qemuxml2argv-graphics-spice-usb-redir.args | 2 +- + .../qemuxml2argv-graphics-spice.args | 2 +- + .../qemuxml2argv-graphics-vnc-auto-socket-cfg.args | 2 +- + .../qemuxml2argv-graphics-vnc-auto-socket.args | 2 +- + .../qemuxml2argv-graphics-vnc-no-listen-attr.args | 2 +- + .../qemuxml2argv-graphics-vnc-none.args | 2 +- + .../qemuxml2argv-graphics-vnc-policy.args | 2 +- + ...2argv-graphics-vnc-remove-generated-socket.args | 2 +- + .../qemuxml2argv-graphics-vnc-sasl.args | 2 +- + .../qemuxml2argv-graphics-vnc-socket.args | 2 +- + .../qemuxml2argv-graphics-vnc-tls.args | 2 +- + .../qemuxml2argv-graphics-vnc-websocket.args | 2 +- + .../qemuxml2argv-graphics-vnc.args | 2 +- + .../qemuxml2argv-hostdev-pci-address-device.args | 2 +- + .../qemuxml2argv-hostdev-pci-address.args | 2 +- + .../qemuxml2argv-hostdev-scsi-lsi-iscsi-auth.args | 2 +- + .../qemuxml2argv-hostdev-scsi-lsi-iscsi.args | 2 +- + .../qemuxml2argv-hostdev-scsi-lsi.args | 2 +- + .../qemuxml2argv-hostdev-scsi-readonly.args | 2 +- + ...emuxml2argv-hostdev-scsi-virtio-iscsi-auth.args | 2 +- + .../qemuxml2argv-hostdev-scsi-virtio-iscsi.args | 2 +- + .../qemuxml2argv-hostdev-scsi-virtio-scsi.args | 2 +- + ...muxml2argv-hostdev-usb-address-device-boot.args | 2 +- + .../qemuxml2argv-hostdev-usb-address-device.args | 2 +- + .../qemuxml2argv-hostdev-usb-address.args | 2 +- + .../qemuxml2argv-hostdev-vfio-multidomain.args | 2 +- + .../qemuxml2argv-hostdev-vfio.args | 2 +- + .../qemuxml2argv-hotplug-base.args | 2 +- + .../qemuxml2argv-hugepages-numa.args | 2 +- + .../qemuxml2argv-hugepages-pages.args | 2 +- + .../qemuxml2argv-hugepages-pages2.args | 2 +- + .../qemuxml2argv-hugepages-pages3.args | 2 +- + .../qemuxml2argv-hugepages-pages5.args | 2 +- + .../qemuxml2argv-hugepages-pages6.args | 2 +- + .../qemuxml2argv-hugepages-shared.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-hugepages.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-hyperv-off.args | 2 +- + .../qemuxml2argv-hyperv-panic.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-hyperv.args | 2 +- + .../qemuxml2argv-input-usbmouse-addr.args | 2 +- + .../qemuxml2argv-input-usbmouse.args | 2 +- + .../qemuxml2argv-input-usbtablet.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-intel-iommu.args | 2 +- + .../qemuxml2argv-iothreads-disk-virtio-ccw.args | 2 +- + .../qemuxml2argv-iothreads-disk.args | 2 +- + .../qemuxml2argv-iothreads-ids-partial.args | 2 +- + .../qemuxml2argv-iothreads-ids.args | 2 +- + .../qemuxml2argv-iothreads-virtio-scsi-ccw.args | 2 +- + .../qemuxml2argv-iothreads-virtio-scsi-pci.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-iothreads.args | 2 +- + .../qemuxml2argv-kvm-features-off.args | 2 +- + .../qemuxml2argv-kvm-features.args | 2 +- + .../qemuxml2argv-kvm-pit-delay.args | 2 +- + .../qemuxml2argv-kvm-pit-device.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-kvm.args | 2 +- + .../qemuxml2argv-kvmclock+eoi-disabled.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-kvmclock.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-luks-disks.args | 2 +- + .../qemuxml2argv-machine-aeskeywrap-off-cap.args | 2 +- + .../qemuxml2argv-machine-aeskeywrap-off-caps.args | 2 +- + .../qemuxml2argv-machine-aeskeywrap-on-cap.args | 2 +- + .../qemuxml2argv-machine-aeskeywrap-on-caps.args | 2 +- + .../qemuxml2argv-machine-aliases1.args | 2 +- + .../qemuxml2argv-machine-aliases2.args | 2 +- + .../qemuxml2argv-machine-core-off.args | 2 +- + .../qemuxml2argv-machine-core-on.args | 2 +- + .../qemuxml2argv-machine-deakeywrap-off-cap.args | 2 +- + .../qemuxml2argv-machine-deakeywrap-off-caps.args | 2 +- + .../qemuxml2argv-machine-deakeywrap-on-cap.args | 2 +- + .../qemuxml2argv-machine-deakeywrap-on-caps.args | 2 +- + .../qemuxml2argv-machine-keywrap-none-caps.args | 2 +- + .../qemuxml2argv-machine-keywrap-none.args | 2 +- + .../qemuxml2argv-machine-usb-opt.args | 2 +- + .../qemuxml2argv-machine-vmport-opt.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-master-key.args | 2 +- + .../qemuxml2argv-memory-hotplug-dimm-addr.args | 2 +- + .../qemuxml2argv-memory-hotplug-dimm.args | 2 +- + .../qemuxml2argv-memory-hotplug-ppc64-nonuma.args | 2 +- + .../qemuxml2argv-memory-hotplug.args | 2 +- + .../qemuxml2argv-memtune-unlimited.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-memtune.args | 2 +- + .../qemuxml2argv-migrate-numa-unaligned.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-migrate.args | 2 +- + .../qemuxml2argv-minimal-msg-timestamp.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-minimal.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args | 2 +- + .../qemuxml2argv-misc-disable-s3.args | 2 +- + .../qemuxml2argv-misc-disable-suspends.args | 2 +- + .../qemuxml2argv-misc-enable-s4.args | 2 +- + .../qemuxml2argv-misc-no-reboot.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-mlock-off.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-mlock-on.args | 2 +- + .../qemuxml2argv-mlock-unsupported.args | 2 +- + .../qemuxml2argv-monitor-json.args | 2 +- + .../qemuxml2argv-multifunction-pci-device.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-name-escape.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-net-client.args | 2 +- + .../qemuxml2argv-net-eth-ifname.args | 2 +- + .../qemuxml2argv-net-eth-names.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-net-eth.args | 2 +- + .../qemuxml2argv-net-hostdev-multidomain.args | 2 +- + .../qemuxml2argv-net-hostdev-vfio-multidomain.args | 2 +- + .../qemuxml2argv-net-hostdev-vfio.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-net-hostdev.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-net-mcast.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-net-server.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-net-udp.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-net-user.args | 2 +- + .../qemuxml2argv-net-vhostuser-multiq.args | 2 +- + .../qemuxml2argv-net-vhostuser.args | 2 +- + .../qemuxml2argv-net-virtio-ccw.args | 2 +- + .../qemuxml2argv-net-virtio-device.args | 2 +- + .../qemuxml2argv-net-virtio-disable-offloads.args | 2 +- + .../qemuxml2argv-net-virtio-netdev.args | 2 +- + .../qemuxml2argv-net-virtio-s390.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-net-virtio.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-no-shutdown.args | 2 +- + .../qemuxml2argv-nographics-vga.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-nographics.args | 2 +- + .../qemuxml2argv-nosharepages.args | 2 +- + ...qemuxml2argv-numad-auto-memory-vcpu-cpuset.args | 2 +- + ...d-auto-memory-vcpu-no-cpuset-and-placement.args | 2 +- + ...muxml2argv-numad-auto-vcpu-static-numatune.args | 2 +- + ...qemuxml2argv-numad-static-memory-auto-vcpu.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-numad.args | 2 +- + ...qemuxml2argv-numatune-auto-nodeset-invalid.args | 2 +- + .../qemuxml2argv-numatune-auto-prefer.args | 2 +- + .../qemuxml2argv-numatune-memnode-no-memory.args | 2 +- + .../qemuxml2argv-numatune-memnode.args | 2 +- + .../qemuxml2argv-numatune-memory.args | 2 +- + .../qemuxml2argv-panic-double.args | 2 +- + .../qemuxml2argv-panic-no-address.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-panic.args | 2 +- + .../qemuxml2argv-parallel-parport-chardev.args | 2 +- + .../qemuxml2argv-parallel-tcp-chardev.args | 2 +- + .../qemuxml2argv-parallel-tcp.args | 2 +- + .../qemuxml2argv-pci-autoadd-addr.args | 2 +- + .../qemuxml2argv-pci-autoadd-idx.args | 2 +- + .../qemuxml2argv-pci-autofill-addr.args | 2 +- + .../qemuxml2argv-pci-bridge-many-disks.args | 2 +- + .../qemuxml2argv-pci-expander-bus.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-pci-many.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-pci-rom.args | 2 +- + .../qemuxml2argv-pci-serial-dev-chardev.args | 2 +- + .../qemuxml2argv-pcie-expander-bus.args | 2 +- + .../qemuxml2argv-pcie-root-port.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-pcie-root.args | 2 +- + .../qemuxml2argv-pcie-switch-downstream-port.args | 2 +- + .../qemuxml2argv-pcie-switch-upstream-port.args | 2 +- + .../qemuxml2argv-pcihole64-q35.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-pcihole64.args | 2 +- + .../qemuxml2argv-pmu-feature-off.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-pmu-feature.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.args | 2 +- + .../qemuxml2argv-ppc64-usb-controller-legacy.args | 2 +- + .../qemuxml2argv-ppc64-usb-controller.args | 2 +- + .../qemuxml2argv-ppce500-serial.args | 2 +- + .../qemuxml2argv-pseries-basic.args | 2 +- + .../qemuxml2argv-pseries-cpu-compat.args | 2 +- + .../qemuxml2argv-pseries-cpu-exact.args | 2 +- + .../qemuxml2argv-pseries-cpu-le.args | 2 +- + .../qemuxml2argv-pseries-nvram.args | 2 +- + .../qemuxml2argv-pseries-panic-missing.args | 2 +- + .../qemuxml2argv-pseries-panic-no-address.args | 2 +- + .../qemuxml2argv-pseries-usb-default.args | 2 +- + .../qemuxml2argv-pseries-usb-kbd.args | 2 +- + .../qemuxml2argv-pseries-usb-multi.args | 2 +- + .../qemuxml2argv-pseries-vio-user-assigned.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-pseries-vio.args | 2 +- + .../qemuxml2argv-pv-spinlock-disabled.args | 2 +- + .../qemuxml2argv-pv-spinlock-enabled.args | 2 +- + .../qemuxml2argv-q35-pm-disable-fallback.args | 2 +- + .../qemuxml2argv-q35-pm-disable.args | 2 +- + .../qemuxml2argv-q35-usb2-multi.args | 2 +- + .../qemuxml2argv-q35-usb2-reorder.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-q35-usb2.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-q35.args | 2 +- + .../qemuxml2argv-qemu-ns-commandline-ns0.args | 2 +- + .../qemuxml2argv-qemu-ns-commandline-ns1.args | 2 +- + .../qemuxml2argv-qemu-ns-commandline.args | 2 +- + ...emuxml2argv-qemu-ns-domain-commandline-ns0.args | 2 +- + .../qemuxml2argv-qemu-ns-domain-commandline.args | 2 +- + .../qemuxml2argv-qemu-ns-domain-ns0.args | 2 +- + .../qemuxml2argv-qemu-ns-no-env.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-qemu-ns.args | 2 +- + .../qemuxml2argv-reboot-timeout-disabled.args | 2 +- + .../qemuxml2argv-reboot-timeout-enabled.args | 2 +- + .../qemuxml2argv-restore-v2-fd.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-restore-v2.args | 2 +- + ...muxml2argv-s390-allow-bogus-usb-controller.args | 2 +- + .../qemuxml2argv-s390-allow-bogus-usb-none.args | 2 +- + .../qemuxml2argv-s390-panic-missing.args | 2 +- + .../qemuxml2argv-s390-panic-no-address.args | 2 +- + .../qemuxml2argv-seclabel-dac-none.args | 2 +- + .../qemuxml2argv-seclabel-dynamic-baselabel.args | 2 +- + .../qemuxml2argv-seclabel-dynamic-labelskip.args | 2 +- + .../qemuxml2argv-seclabel-dynamic-override.args | 2 +- + .../qemuxml2argv-seclabel-dynamic-relabel.args | 2 +- + .../qemuxml2argv-seclabel-dynamic.args | 2 +- + .../qemuxml2argv-seclabel-none.args | 2 +- + .../qemuxml2argv-seclabel-static-labelskip.args | 2 +- + .../qemuxml2argv-seclabel-static-relabel.args | 2 +- + .../qemuxml2argv-seclabel-static.args | 2 +- + .../qemuxml2argv-serial-dev-chardev-iobase.args | 2 +- + .../qemuxml2argv-serial-dev-chardev.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-dev.args | 2 +- + .../qemuxml2argv-serial-file-chardev.args | 2 +- + .../qemuxml2argv-serial-file-log.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-file.args | 2 +- + .../qemuxml2argv-serial-many-chardev.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-many.args | 2 +- + .../qemuxml2argv-serial-pty-chardev.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-pty.args | 2 +- + .../qemuxml2argv-serial-spiceport-nospice.args | 2 +- + .../qemuxml2argv-serial-spiceport.args | 2 +- + .../qemuxml2argv-serial-tcp-chardev.args | 2 +- + .../qemuxml2argv-serial-tcp-telnet-chardev.args | 2 +- + .../qemuxml2argv-serial-tcp-telnet.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-tcp.args | 2 +- + .../qemuxml2argv-serial-udp-chardev.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-udp.args | 2 +- + .../qemuxml2argv-serial-unix-chardev.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-serial-unix.args | 2 +- + .../qemuxml2argv-serial-vc-chardev.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-shmem.args | 2 +- + .../qemuxml2argv-smartcard-controller.args | 2 +- + .../qemuxml2argv-smartcard-host-certificates.args | 2 +- + .../qemuxml2argv-smartcard-host.args | 2 +- + ...emuxml2argv-smartcard-passthrough-spicevmc.args | 2 +- + .../qemuxml2argv-smartcard-passthrough-tcp.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-smbios.args | 2 +- + .../qemuxml2argv-sound-device.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-sound.args | 2 +- + .../qemuxml2argv-tpm-passthrough.args | 2 +- + .../qemuxml2argv-usb-controller-default-q35.args | 2 +- + .../qemuxml2argv-usb-controller-explicit-q35.args | 2 +- + .../qemuxml2argv-usb-controller-xhci.args | 2 +- + .../qemuxml2argv-usb-controller.args | 2 +- + .../qemuxml2argv-usb-hub-autoadd.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-usb-hub.args | 2 +- + .../qemuxml2argv-usb-ich9-autoassign.args | 2 +- + .../qemuxml2argv-usb-ich9-companion.args | 2 +- + .../qemuxml2argv-usb-ich9-ehci-addr.args | 2 +- + .../qemuxml2argv-usb-long-port-path.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-usb-none.args | 2 +- + .../qemuxml2argv-usb-piix3-controller.args | 2 +- + .../qemuxml2argv-usb-port-autoassign.args | 2 +- + .../qemuxml2argv-usb-port-missing.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-usb-ports.args | 2 +- + .../qemuxml2argv-usb-redir-boot.args | 2 +- + .../qemuxml2argv-usb-redir-filter-version.args | 2 +- + .../qemuxml2argv-usb-redir-filter.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args | 2 +- + .../qemuxml2argv-usb-xhci-autoassign.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args | 2 +- + .../qemuxml2argv-video-device-pciaddr-default.args | 2 +- + .../qemuxml2argv-video-qxl-device-vgamem.args | 2 +- + .../qemuxml2argv-video-qxl-device.args | 2 +- + .../qemuxml2argv-video-qxl-heads.args | 2 +- + .../qemuxml2argv-video-qxl-nodevice.args | 2 +- + .../qemuxml2argv-video-qxl-noheads.args | 2 +- + .../qemuxml2argv-video-qxl-sec-device-vgamem.args | 2 +- + .../qemuxml2argv-video-qxl-sec-device.args | 2 +- + .../qemuxml2argv-video-vga-device-vgamem.args | 2 +- + .../qemuxml2argv-video-vga-device.args | 2 +- + .../qemuxml2argv-video-vga-nodevice.args | 2 +- + .../qemuxml2argv-video-virtio-gpu-device.args | 2 +- + .../qemuxml2argv-video-virtio-gpu-spice-gl.args | 2 +- + .../qemuxml2argv-video-virtio-gpu-virgl.args | 2 +- + .../qemuxml2argv-virtio-input-passthrough.args | 2 +- + .../qemuxml2argv-virtio-input.args | 2 +- + .../qemuxml2argvdata/qemuxml2argv-virtio-lun.args | 2 +- + .../qemuxml2argv-virtio-rng-ccw.args | 2 +- + .../qemuxml2argv-virtio-rng-default.args | 2 +- + .../qemuxml2argv-virtio-rng-egd.args | 2 +- + .../qemuxml2argv-virtio-rng-multiple.args | 2 +- + .../qemuxml2argv-virtio-rng-random.args | 2 +- + .../qemuxml2argv-watchdog-device.args | 2 +- + .../qemuxml2argv-watchdog-diag288.args | 2 +- + .../qemuxml2argv-watchdog-dump.args | 2 +- + .../qemuxml2argv-watchdog-injectnmi.args | 2 +- + tests/qemuxml2argvdata/qemuxml2argv-watchdog.args | 2 +- + tests/qemuxml2argvtest.c | 19 +++++----- + 505 files changed, 510 insertions(+), 551 deletions(-) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index d3964bd..f41c8c4 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -1231,10 +1231,6 @@ virQEMUCapsComputeCmdFlags(const char *help, + + if (strstr(help, "-sdl")) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_SDL); +- if (strstr(help, "cores=") && +- strstr(help, "threads=") && +- strstr(help, "sockets=")) +- virQEMUCapsSet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY); + + if (strstr(help, ",vhost=")) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOST_NET); +@@ -3385,7 +3381,6 @@ virQEMUCapsInitQMPBasic(virQEMUCapsPtr qemuCaps) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_CHARDEV); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_MONITOR_JSON); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_SDL); +- virQEMUCapsSet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_NETDEV); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_RTC); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOST_NET); +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index 150d619..ba9556d 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -85,7 +85,7 @@ typedef enum { + X_QEMU_CAPS_BALLOON, /* -balloon available */ + X_QEMU_CAPS_DEVICE, /* Is the -device arg available */ + QEMU_CAPS_SDL, /* Is the new -sdl arg available */ +- QEMU_CAPS_SMP_TOPOLOGY, /* -smp has sockets/cores/threads */ ++ X_QEMU_CAPS_SMP_TOPOLOGY, /* -smp has sockets/cores/threads */ + QEMU_CAPS_NETDEV, /* -netdev flag & netdev_add/remove */ + + /* 30 */ +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index a001d2c..9832a6a 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -7108,8 +7108,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + + static int + qemuBuildSmpCommandLine(virCommandPtr cmd, +- const virDomainDef *def, +- virQEMUCapsPtr qemuCaps) ++ const virDomainDef *def) + { + char *smp; + virBuffer buf = VIR_BUFFER_INITIALIZER; +@@ -7118,29 +7117,18 @@ qemuBuildSmpCommandLine(virCommandPtr cmd, + + virBufferAsprintf(&buf, "%u", virDomainDefGetVcpus(def)); + +- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY)) { +- if (virDomainDefHasVcpusOffline(def)) +- virBufferAsprintf(&buf, ",maxcpus=%u", +- virDomainDefGetVcpusMax(def)); +- /* sockets, cores, and threads are either all zero +- * or all non-zero, thus checking one of them is enough */ +- if (def->cpu && def->cpu->sockets) { +- virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets); +- virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores); +- virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads); +- } else { +- virBufferAsprintf(&buf, ",sockets=%u", +- virDomainDefGetVcpusMax(def)); +- virBufferAsprintf(&buf, ",cores=%u", 1); +- virBufferAsprintf(&buf, ",threads=%u", 1); +- } +- } else if (virDomainDefHasVcpusOffline(def)) { +- virBufferFreeAndReset(&buf); +- /* FIXME - consider hot-unplugging cpus after boot for older qemu */ +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("setting current vcpu count less than maximum is " +- "not supported with this QEMU binary")); +- return -1; ++ if (virDomainDefHasVcpusOffline(def)) ++ virBufferAsprintf(&buf, ",maxcpus=%u", virDomainDefGetVcpusMax(def)); ++ /* sockets, cores, and threads are either all zero ++ * or all non-zero, thus checking one of them is enough */ ++ if (def->cpu && def->cpu->sockets) { ++ virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets); ++ virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores); ++ virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads); ++ } else { ++ virBufferAsprintf(&buf, ",sockets=%u", virDomainDefGetVcpusMax(def)); ++ virBufferAsprintf(&buf, ",cores=%u", 1); ++ virBufferAsprintf(&buf, ",threads=%u", 1); + } + + if (virBufferCheckError(&buf) < 0) +@@ -9438,7 +9426,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, + if (qemuBuildMemCommandLine(cmd, cfg, def, qemuCaps) < 0) + goto error; + +- if (qemuBuildSmpCommandLine(cmd, def, qemuCaps) < 0) ++ if (qemuBuildSmpCommandLine(cmd, def) < 0) + goto error; + + if (qemuBuildIOThreadCommandLine(cmd, def, qemuCaps) < 0) +diff --git a/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml +index c1d5212..c84f3de 100644 +--- a/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml +index 3ac7bdd..c21fdd0 100644 +--- a/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml +index 78628ee..6dc74ce 100644 +--- a/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml +index ba096b8..358ce3f 100644 +--- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml +index 9b454b0..9e96dc0 100644 +--- a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml +index db0d000..3b56444 100644 +--- a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml +index 964b6f0..19ac793 100644 +--- a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +index 225019a..7c63682 100644 +--- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +index f16f057..df25aae 100644 +--- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml +index c57f11f..7586269 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml +index 9798323..cc146f6 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml +index 7392551..cf77e92 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +index 766c514..5a2512e 100644 +--- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +@@ -9,7 +9,6 @@ + + + +- + + + +diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c +index d32a731..77ba06b 100644 +--- a/tests/qemuhelptest.c ++++ b/tests/qemuhelptest.c +@@ -154,7 +154,6 @@ mymain(void) + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_SDL, + QEMU_CAPS_CHARDEV, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_RTC, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_BOOT_MENU, +@@ -173,7 +172,6 @@ mymain(void) + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, +@@ -214,7 +212,6 @@ mymain(void) + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_SDL, + QEMU_CAPS_CHARDEV, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, + QEMU_CAPS_NO_HPET, +@@ -239,7 +236,6 @@ mymain(void) + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, +@@ -290,7 +286,6 @@ mymain(void) + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, +@@ -339,7 +334,6 @@ mymain(void) + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, +@@ -396,7 +390,6 @@ mymain(void) + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, +@@ -469,7 +462,6 @@ mymain(void) + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VHOST_NET, +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-aavmf-virtio-mmio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-aavmf-virtio-mmio.args +index 1de2ecf..bf4b2f7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-aavmf-virtio-mmio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-aavmf-virtio-mmio.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-cpu-passthrough.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-cpu-passthrough.args +index b394066..52d2112 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-cpu-passthrough.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-cpu-passthrough.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu host \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-host.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-host.args +index a16b8b6..23276ad 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-host.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-host.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -machine virt,accel=kvm,gic-version=host \ + -cpu host \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 6ba410c5-1e5c-4d57-bee7-2228e7ffa32f \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.args +index 031a31e..f79c1c6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -machine virt,accel=kvm \ + -cpu host \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 6ba410c5-1e5c-4d57-bee7-2228e7ffa32f \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.args +index f078fd8..fce9308 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -machine virt,accel=kvm,gic-version=3 \ + -cpu host \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 6ba410c5-1e5c-4d57-bee7-2228e7ffa32f \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-kvm-32-on-64.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-kvm-32-on-64.args +index 284aacf..c9eb68a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-kvm-32-on-64.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-kvm-32-on-64.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu host,aarch64=off \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e6a \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-2.6-virtio-pci-default.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-2.6-virtio-pci-default.args +index 6c2a908..75db1a4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-2.6-virtio-pci-default.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-2.6-virtio-pci-default.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt-2.6 \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args +index ab45209..e7131d3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 6ba410c5-1e5c-4d57-bee7-2228e7ffa32f \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args +index 1ed5462..b5b010c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-default.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-default.args +index 1ed5462..b5b010c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-default.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-default.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-manual-addresses.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-manual-addresses.args +index 8245854..23f94ce 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-manual-addresses.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virtio-pci-manual-addresses.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-acpi-table.args b/tests/qemuxml2argvdata/qemuxml2argv-acpi-table.args +index 31902ba..e7f62d3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-acpi-table.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-acpi-table.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-basic.args b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-basic.args +index 37884a7..e91c628 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-basic.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-basic.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M vexpress-a9 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e6a \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args +index c7c7487..49fccd8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M vexpress-a9 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e6a \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-virtio.args +index e6dc00a..e86c555 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-virtio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M vexpress-a9 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e6a \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-arm-virt-virtio.args +index d3e8efc..800c5f5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-arm-virt-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-virt-virtio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M virt \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e6a \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args b/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args +index bbf8f47..d7a8e4b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-ccw-deflate.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-ccw-deflate.args +index a666876..8565071 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-ccw-deflate.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-ccw-deflate.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-auto.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-auto.args +index 390cc9d..7875e14 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-auto.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-auto.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate-off.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate-off.args +index 203fc85..2060ad2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate-off.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate.args +index a112579..57ac600 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-deflate.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-period.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-period.args +index 1289d44..9b63b68 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-period.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device-period.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device.args +index 1289d44..9b63b68 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-balloon-mmio-deflate.args b/tests/qemuxml2argvdata/qemuxml2argv-balloon-mmio-deflate.args +index 42709c5..10d1362 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-balloon-mmio-deflate.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-balloon-mmio-deflate.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M virt \ + -cpu cortex-a53 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args +index 848a029..c482068 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \ + -drive file=/usr/share/OVMF/OVMF_VARS.fd,if=pflash,format=raw,unit=1 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 362d1fc1-df7d-193e-5c18-49a71bd1da66 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios.args b/tests/qemuxml2argvdata/qemuxml2argv-bios.args +index 604b871..fdd9a4e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-bios.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bios.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -bios /usr/share/seabios/bios.bin \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 362d1fc1-df7d-193e-5c18-49a71bd1da66 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune-max.args b/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune-max.args +index 3efa2ac..66e1c10 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune-max.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune-max.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune.args b/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune.args +index f69f916..1f9983f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-blkiotune-device.args b/tests/qemuxml2argvdata/qemuxml2argv-blkiotune-device.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-blkiotune-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-blkiotune-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args b/tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args +index 0296242..32de47b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-complex-bootindex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-complex-bootindex.args +index 051c139..a443511 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-complex-bootindex.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-complex-bootindex.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args +index fe7e225..45da387 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args +index 4915ae5..b9c6126 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy-q35.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-q35-2.4 \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args +index 6666e3b..2c53870 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive-bootindex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive-bootindex.args +index c2d4a7d..099fc16 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive-bootindex.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive-bootindex.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive.args +index 3759677..ef59ff7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable-drive.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable.args +index 3759677..ef59ff7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-disable.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args +index 6580b82..809393d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-with-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-with-timeout.args +index 74252f2..a16bc29 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-with-timeout.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-with-timeout.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable.args +index 6c9eda0..f56a9d5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-multi.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-multi.args +index 4050176..a258c8a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-multi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-multi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args +index 8e8c4da..bf57a6e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-order.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-order.args +index 6d2d030..daf889d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-order.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-order.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-strict.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-strict.args +index 7de2ace..af4b970 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-boot-strict.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-strict.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args +index 26ae886..8bcdc1f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-bootindex-floppy-q35.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-q35-2.4 \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-guestfwd.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-guestfwd.args +index ee213ab..f70b953 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-guestfwd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-guestfwd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc-old.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc-old.args +index 23c5df5..81d4c7e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc-old.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc-old.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefconfig \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc.args +index b633e65..1dc068e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-spicevmc.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefconfig \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-auto.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-auto.args +index c01dfad..1a00535 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-auto.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-auto.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoadd.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoadd.args +index f087d18..5d75d3d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoadd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoadd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoassign.args +index b5e1e77..229e31e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-autoassign.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-default.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-default.args +index ad2981b..fe7d542 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-default.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-default.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-state.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-state.args +index 2e4f960..7a0cf87 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-state.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-state.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args +index b56ced5..3e7fd52 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio.args +index b21bf67..3f0d4e2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-catchup.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-catchup.args +index f08a28c..c47e2db 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-catchup.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-catchup.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-france.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-france.args +index 6992559..8535d12 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-france.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-france.args +@@ -10,7 +10,7 @@ TZ=Europe/Paris \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-hpet-off.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-hpet-off.args +index a0c6145..e978689 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-hpet-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-hpet-off.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime-basis-localtime.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime-basis-localtime.args +index 080c29c..82482a9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime-basis-localtime.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime-basis-localtime.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1c15a1f6-f4f0-4d3c-9002-667ddb458736 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args +index e5a746e..5a015a8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-timer-hyperv-rtc.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-timer-hyperv-rtc.args +index 4fa1163..cd38855 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-timer-hyperv-rtc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-timer-hyperv-rtc.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,hv_time \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args +index ee120fa..3c21045 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-variable.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-variable.args +index 4f02c40..a8716a2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-clock-variable.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-variable.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-auto.args b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-auto.args +index a192a0a..bb7dbff 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-auto.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-auto.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-chardev.args +index e071b3f..0e7f26a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-compat-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-compat-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-console-compat.args +index 9fea57f..1a63b9a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-compat.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-compat.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-sclp.args b/tests/qemuxml2argvdata/qemuxml2argv-console-sclp.args +index 73b6b08..dc9f7af 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-sclp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-sclp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-ccw.args +index cae909a..160b1f5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-many.args b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-many.args +index d765334..abe3e3b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-many.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-many.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-s390.args b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-s390.args +index 3ec1109..6e0e11e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-s390.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio-s390.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio.args +index 0dd75aa..4cc7023 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-console-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-console-virtio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args b/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args +index 7b98beb..3361383 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-controller-order.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=spice \ + -M rhel6.1.0 \ + -enable-kvm \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -uuid d091ea82-29e6-2e34-3005-f02617b36e87 \ + -nodefaults \ + -chardev socket,id=charmonitor,path=/tmp/lib/domain--1-fdr/monitor.sock,server,\ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell-noTSX.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell-noTSX.args +index 57e6e07..783a4ab 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell-noTSX.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell-noTSX.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu Haswell-noTSX \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args +index 29cf688..2e74a67 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu Haswell,+rtm,+hle \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell2.args +index 6503a52..e089a74 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell2.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu Haswell,-hle,-rtm \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args +index 29cf688..2e74a67 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-Haswell3.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu Haswell,+rtm,+hle \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-disabled.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-disabled.args +index d518c70..db14ac4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-disabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-disabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,-kvm_pv_eoi \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.args +index b21a13c..ce964a6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-eoi-enabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,+kvm_pv_eoi \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args +index 971d522..4a7f174 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu64,-mca,-pse36,-clflush,-syscall,-nx,-lm,-svm \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args +index 404878d..0693e70 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu core2duo,+ds,+ht,+tm,+ds_cpl,+xtpr,+3dnowext,+lahf_lm,-nx \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args +index 404878d..0693e70 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu core2duo,+ds,+ht,+tm,+ds_cpl,+xtpr,+3dnowext,+lahf_lm,-nx \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args +index 6b9dc82..0352eb7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu Penryn,-sse4.1 \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.args +index a7fea66..6eead4b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -enable-kvm \ + -cpu host,-kvmclock \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args +index b7fdf4b..2d7e5bf 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\ + +smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+rtm,+hle \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-fallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-fallback.args +index d96d973..4e53547 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-fallback.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-fallback.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu Penryn,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+monitor,+ds_cpl,+vmx,+est,+tm2,\ + +xtpr,-sse4.1 \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args +index 04abe06..416712f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-vendor.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu 'core2duo,vendor=Libvirt QEMU,+ds,+acpi,+ss,+ht,+tm,+pbe,+ds_cpl,+vmx,+est,\ + +tm2,+cx16,+xtpr,+lahf_lm' \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model.args +index b6e660c..a57ef9a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu core2duo,+ds,+acpi,+ss,+ht,+tm,+pbe,+ds_cpl,+vmx,+est,+tm2,+cx16,+xtpr,\ + +lahf_lm \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough-features.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough-features.args +index 5a722a8..fa960c3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough-features.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough-features.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu host,+abm,+ds,-invtsc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough.args +index e3d13a2..aa73f89 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-passthrough.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu host \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-kvmclock.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-kvmclock.args +index 23dcc91..6e50dc1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-kvmclock.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-kvmclock.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -enable-kvm \ + -cpu core2duo,-kvmclock \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args +index a7d37fc..decf7fd 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu core2duo,+ds,+acpi,+ss,+ht,+tm,+pbe,+ds_cpl,+vmx,+est,+tm2,+cx16,+xtpr,\ + +lahf_lm \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args +index ca6592f..e1b902f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu core2duo,+ds,+acpi,+ss,+ht,+tm,+pbe,+ds_cpl,+vmx,+est,+tm2,+cx16,+xtpr,\ + +lahf_lm,-syscall,-nx,-lm \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disjoint.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disjoint.args +index 5b112c6..5ff7a43 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disjoint.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disjoint.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 16 \ ++-smp 16,sockets=2,cores=4,threads=2 \ + -numa node,nodeid=0,cpus=0-3,cpus=8-11,mem=107 \ + -numa node,nodeid=1,cpus=4-7,cpus=12-15,mem=107 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa1.args +index bc8c54c..2613649 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa1.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa1.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 16 \ ++-smp 16,sockets=2,cores=4,threads=2 \ + -numa node,nodeid=0,cpus=0-7,mem=107 \ + -numa node,nodeid=1,cpus=8-15,mem=107 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args +index a6b2c1f..ad7b1c5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu core2duo,+ds,+acpi,+ht,+tm,+ds_cpl,+vmx,+est,+xtpr,+3dnowext,+lahf_lm,-nx \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-topology3.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-topology3.args +index 3510234..eb001c1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-topology3.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-topology3.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=3,cores=2,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cputune-zero-shares.args b/tests/qemuxml2argvdata/qemuxml2argv-cputune-zero-shares.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cputune-zero-shares.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cputune-zero-shares.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cputune.args b/tests/qemuxml2argvdata/qemuxml2argv-cputune.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-cputune.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cputune.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-debug-threads.args b/tests/qemuxml2argvdata/qemuxml2argv-debug-threads.args +index 2ad6fcf..b57f143 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-debug-threads.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-debug-threads.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args b/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args +index 872f782..39195f2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc,accel=kvm \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -uuid d091ea82-29e6-2e34-3005-f02617b36e87 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args b/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args +index 4c2019a..0396810 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc-0.11,accel=tcg \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -uuid d091ea82-29e6-2e34-3005-f02617b36e87 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args +index 70670da..b0d1f04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-blockio.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-blockio.args +index d220a31..9367a96 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-blockio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-blockio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-empty.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-empty.args +index ce5df64..1477bbb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-empty.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-empty.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftp.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftp.args +index 253736d..1c306b5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftps.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftps.args +index bdedf1a..2c14818 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftps.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-ftps.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-http.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-http.args +index fddb339..0bdaaf9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-http.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-http.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-https.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-https.args +index a83b5a0..3934842 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-https.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-https.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args +index 3efc64f..165cd91 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray-no-device-cap.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray-no-device-cap.args +index 020aac9..0231d03 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray-no-device-cap.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray-no-device-cap.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray.args +index 3adcb1f..0655ee2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-tray.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 3fa02811-7832-34bd-004d-1ff56a9286ff \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args +index 26b10aa..ad5523b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-copy_on_read.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-copy_on_read.args +index 37074b8..02a7970 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-copy_on_read.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-copy_on_read.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 468404ad-d49c-40f2-9e14-02294f9c1be3 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-cdrom.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-cdrom.args +index 1a1925c..9c73926 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-cdrom.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-cdrom.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-disk.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-disk.args +index 4bab779..f24c0f0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-disk.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-boot-disk.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-directsync.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-directsync.args +index 152dbf7..6ef08ae 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-directsync.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-directsync.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-unsafe.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-unsafe.args +index 8a66e06..96f768a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-unsafe.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-unsafe.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-none.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-none.args +index 6118eba..7e555fa 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wb.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wb.args +index aced6be..8a0362d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wb.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wb.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wt.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wt.args +index af697a8..80b34ae 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wt.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-cache-v2-wt.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args +index 377cb70..72f0d93 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-detect-zeroes.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-detect-zeroes.args +index ea65141..24a1bf1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-detect-zeroes.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-detect-zeroes.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 92d7a226-cfae-425b-a6d3-00bbf9ec5c9e \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.args +index ab016ea..e3e62ac 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 92d7a226-cfae-425b-a6d3-00bbf9ec5c9e \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-enospace.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-enospace.args +index 79a8324..9b68e85 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-enospace.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-enospace.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-stop.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-stop.args +index df5ac59..b3e22e4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-stop.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-stop.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-wreport-rignore.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-wreport-rignore.args +index 1042943..480f921 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-wreport-rignore.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-policy-wreport-rignore.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-fmt-qcow.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-fmt-qcow.args +index 5862916..bd571ab 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-fmt-qcow.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-fmt-qcow.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args +index a7a1ae6..634ed75 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-auth.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-auth.args +index 66e2497..6fa0cee 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-auth.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-auth.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-lun.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-lun.args +index 270f3c3..fbe0b1c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-lun.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-lun.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi.args +index c22d3d8..303e838 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-export.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-export.args +index 2c98291..512eb14 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-export.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-export.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6-export.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6-export.args +index 8a6e7e0..ff13031 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6-export.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6-export.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6.args +index 5d8448a..156efcb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-unix.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-unix.args +index 9d02919..4ac944e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-unix.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-unix.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd.args +index 8ca8e84..8d2ea28 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args +index 8312d3d..dd66388 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth-AES.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth.args +index c7912a6..1be5c26 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-auth.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args +index 4f54e24..c1e2833 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd-ipv6.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd.args +index 53bacedb..042a814 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-rbd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-sheepdog.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-sheepdog.args +index 72780a7..1ab4b1c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-sheepdog.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-sheepdog.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-no-boot.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-no-boot.args +index 27c20cd..a364372 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-no-boot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-no-boot.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-disk.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-disk.args +index 9a35d7b..2b8aeb6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-disk.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-disk.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args +index 9a35d7b..2b8aeb6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args +index b81e470..9ffffa8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray-no-device-cap.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray-no-device-cap.args +index cb49412..314860b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray-no-device-cap.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray-no-device-cap.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray.args +index cb49412..314860b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy-tray.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args +index 8720781..b5f30c9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-geometry.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-geometry.args +index e7fbd0a..34e9358 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-geometry.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-geometry.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-drive-split.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-drive-split.args +index 8adf82b..262f793 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-drive-split.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-drive-split.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args +index 8b5ca32..2507f79 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-ioeventfd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-ioeventfd.args +index 73b064c..9ffa437 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-ioeventfd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-ioeventfd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 8c273d77-39b0-47c4-9714-6dddcad56b88 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-iscsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-iscsi.args +index 66f1c7c..35c1151 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-iscsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-iscsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args +index 86e1395..793c65a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-order.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-order.args +index f3729fb..b80d349 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-order.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-order.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-sata-device.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-sata-device.args +index b83bfc7..f47983a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-sata-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-sata-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device-auto.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device-auto.args +index f729b88..995d2ed 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device-auto.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device-auto.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device.args +index f729b88..995d2ed 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-split.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-split.args +index 5bf5089..a63e0e3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-split.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-split.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args +index 9b41043..b92824e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args +index eb0841a..bfb63d4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-lun-passthrough.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-lun-passthrough.args +index 9a851d1..b88755d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-lun-passthrough.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-lun-passthrough.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-megasas.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-megasas.args +index fce7b27..98f42d6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-megasas.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-megasas.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-mptsas1068.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-mptsas1068.args +index f53a398..41cc27d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-mptsas1068.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-mptsas1068.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args +index be30171..de84797 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args +index d532bcf..4b706cb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-serial.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-serial.args +index 91875bb..2cefdca 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-serial.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-serial.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-snapshot.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-snapshot.args +index 8d2a41c..dc3792b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-snapshot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-snapshot.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool-mode.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool-mode.args +index a34f7e7..fd20b98 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool-mode.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool-mode.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool.args +index 7ad458a..83ac599 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args +index 7cda592..d002f99 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device-removable.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args +index 03ef44f..4ac1a9c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-usb-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw-many.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw-many.args +index c2358f2..3a4b207 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw-many.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw-many.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw.args +index 7dc8a64..2881e90 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-s390.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-s390.args +index 8f08085..30aa47a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-s390.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-s390.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args +index b53ce8c..f2cea48 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-cmd_per_lun.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-cmd_per_lun.args +index 9561965..aae148f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-cmd_per_lun.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-cmd_per_lun.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 8 \ ++-smp 8,sockets=8,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args +index b37885d..26961af 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ioeventfd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 8 \ ++-smp 8,sockets=8,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-max_sectors.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-max_sectors.args +index 7a80207..dcff8b3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-max_sectors.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-max_sectors.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 8 \ ++-smp 8,sockets=8,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-num_queues.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-num_queues.args +index 339f78e..a605c06 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-num_queues.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-num_queues.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 8 \ ++-smp 8,sockets=8,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio.args +index 8e7f7a3..b405242 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args +index 4371413..82f1f80 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args +index 4371413..82f1f80 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.args b/tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.args +index d518c70..db14ac4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-eoi-disabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,-kvm_pv_eoi \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.args b/tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.args +index b21a13c..ce964a6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-eoi-enabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,+kvm_pv_eoi \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-event_idx.args b/tests/qemuxml2argvdata/qemuxml2argv-event_idx.args +index 89247c5..f862362 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-event_idx.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-event_idx.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid bba65c0e-c049-934f-b6aa-4e2c0582acdf \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-fips-enabled.args b/tests/qemuxml2argvdata/qemuxml2argv-fips-enabled.args +index 27d888e..cff1a9a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-fips-enabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-fips-enabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -enable-fips \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-floppy-drive-fat.args b/tests/qemuxml2argvdata/qemuxml2argv-floppy-drive-fat.args +index 136408e..f5668d8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-floppy-drive-fat.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-floppy-drive-fat.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-fs9p-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-fs9p-ccw.args +index fbe864c..7c24490 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-fs9p-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-fs9p-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-fs9p.args b/tests/qemuxml2argvdata/qemuxml2argv-fs9p.args +index 4944032..02f3701 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-fs9p.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-fs9p.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl-fullscreen.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl-fullscreen.args +index 53e9288..70d4709 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl-fullscreen.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl-fullscreen.args +@@ -10,7 +10,7 @@ DISPLAY=:0.1 \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args +index 64a3186..b911baa 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args +@@ -10,7 +10,7 @@ DISPLAY=:0.1 \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args +index 2ad3f68..88fa813 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agentmouse.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agentmouse.args +index efe1c56..08ebc20 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agentmouse.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agentmouse.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefconfig \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket-cfg.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket-cfg.args +index 61335b0..f19ace9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket-cfg.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket-cfg.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args +index 61335b0..f19ace9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-compression.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-compression.args +index 275a88b..774a086 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-compression.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-compression.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-no-args.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-no-args.args +index 05ce743..86ef027 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-no-args.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-no-args.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-qxl-vga.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-qxl-vga.args +index 2517237..8f86ff9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-qxl-vga.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-qxl-vga.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-sasl.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-sasl.args +index bf9045f..5ab7c9c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-sasl.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-sasl.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args +index 26d0671..a1b618c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args +index cead7d6..bab81ff 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=spice \ + -cpu core2duo,+ds,+acpi,+ss,+ht,+tm,+pbe,+ds_cpl,+vmx,+est,+tm2,+cx16,+xtpr,\ + +lahf_lm \ + -m 1024 \ +--smp 2 \ ++-smp 2,sockets=1,cores=2,threads=1 \ + -uuid 553effab-b5e1-2d80-dfe3-da4344826c43 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-f14/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args +index 3f00da4..7d3146c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefconfig \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args +index d6c5820..972dea9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket-cfg.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket-cfg.args +index cfa63b1..640b53b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket-cfg.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket-cfg.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket.args +index 84ce727..10c8162 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-auto-socket.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-no-listen-attr.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-no-listen-attr.args +index f374cff..f2dc11e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-no-listen-attr.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-no-listen-attr.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-none.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-none.args +index 69d1991..649fd91 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-policy.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-policy.args +index eeca740..f18df4a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-policy.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-policy.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-remove-generated-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-remove-generated-socket.args +index ea2e4d0..fd634f3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-remove-generated-socket.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-remove-generated-socket.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args +index 4c0f84e..ab30a48 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-socket.args +index abf724c..aae7ade 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-socket.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-socket.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args +index 4100fb7..f7f586a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-websocket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-websocket.args +index 4969747..239f98e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-websocket.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-websocket.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args +index f374cff..f2dc11e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address-device.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address-device.args +index 47ecc2f..d37f729 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.args +index 4719a7d..405ee07 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi-auth.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi-auth.args +index ff6655f..35b69a9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi-auth.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi-auth.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi.args +index 5d03d52..b35e7b6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi-iscsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi.args +index f605618..d52a1e5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-lsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-readonly.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-readonly.args +index 13af7d3..e66c5db 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-readonly.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-readonly.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi-auth.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi-auth.args +index 42113c8..0ee9453 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi-auth.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi-auth.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi.args +index d50fb3c..e256012 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-iscsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-scsi.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-scsi.args +index 542c42e..0a01108 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-scsi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-scsi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args +index ddf90c0..4d24cb4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device-boot.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args +index 7883c61..06187ec 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args +index d1c3e8f..da409f6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio-multidomain.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio-multidomain.args +index 0027f41..d18387c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio-multidomain.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio-multidomain.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio.args +index a71ebe8..59415d6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-vfio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hotplug-base.args b/tests/qemuxml2argvdata/qemuxml2argv-hotplug-base.args +index 79aa270..1df7121 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hotplug-base.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hotplug-base.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -uuid d091ea82-29e6-2e34-3005-f02617b36e87 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args +index 5c356ef..2eb006e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc-i440fx-2.3 \ + -m size=1048576k,slots=16,maxmem=1099511627776k \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -mem-prealloc \ + -mem-path /dev/hugepages2M/libvirt/qemu \ + -numa node,nodeid=0,cpus=0-1,mem=1024 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages.args +index 5431709..3e8257b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -object memory-backend-file,id=ram-node0,prealloc=yes,\ + mem-path=/dev/hugepages1G/libvirt/qemu,size=1073741824,host-nodes=0-3,\ + policy=bind \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args +index b5bcb81..c01a813 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object memory-backend-file,id=ram-node0,prealloc=yes,\ + mem-path=/dev/hugepages2M/libvirt/qemu,size=268435456 \ + -numa node,nodeid=0,cpus=0,memdev=ram-node0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args +index 3a9d1d0..e3b016a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object memory-backend-ram,id=ram-node0,size=268435456 \ + -numa node,nodeid=0,cpus=0,memdev=ram-node0 \ + -object memory-backend-file,id=ram-node1,prealloc=yes,\ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args +index eb06e2a..e908c32 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -m 1024 \ + -mem-prealloc \ + -mem-path /dev/hugepages2M/libvirt/qemu \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args +index bb702dc..49e673b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-shared.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-shared.args +index 416a962..0204573 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-shared.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-shared.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -object memory-backend-file,id=ram-node0,prealloc=yes,\ + mem-path=/dev/hugepages1G/libvirt/qemu,size=1073741824,host-nodes=0-3,\ + policy=bind \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages.args +index edb01d6..361c8e5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -m 214 \ + -mem-prealloc \ + -mem-path /dev/hugepages2M/libvirt/qemu \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hyperv-off.args b/tests/qemuxml2argvdata/qemuxml2argv-hyperv-off.args +index 37a2af7..c268db1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hyperv-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hyperv-off.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32 \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hyperv-panic.args b/tests/qemuxml2argvdata/qemuxml2argv-hyperv-panic.args +index d620792..c8bc6b3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hyperv-panic.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hyperv-panic.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,hv_crash \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hyperv.args b/tests/qemuxml2argvdata/qemuxml2argv-hyperv.args +index 32846a2..4903759 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-hyperv.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-hyperv.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\ + hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv' \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse-addr.args +index 6310585..08dc180 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse-addr.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse-addr.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args +index df96e6a..f825054 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args +index faf21d5..54f8d0c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args +index 69e4490..fc64405 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk-virtio-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk-virtio-ccw.args +index 58168b9..5e001de 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk-virtio-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk-virtio-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -object iothread,id=iothread1 \ + -object iothread,id=iothread2 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk.args +index df4a299..a984e99 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-disk.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object iothread,id=iothread1 \ + -object iothread,id=iothread2 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids-partial.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids-partial.args +index 49dbfba..c441620 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids-partial.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids-partial.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object iothread,id=iothread5 \ + -object iothread,id=iothread6 \ + -object iothread,id=iothread1 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids.args +index be89828..607fb0d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-ids.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object iothread,id=iothread2 \ + -object iothread,id=iothread4 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-ccw.args +index edf49bf..402ecd7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -object iothread,id=iothread1 \ + -object iothread,id=iothread2 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-pci.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-pci.args +index bd83b27..a7921fd 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-pci.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-pci.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object iothread,id=iothread1 \ + -object iothread,id=iothread2 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-iothreads.args b/tests/qemuxml2argvdata/qemuxml2argv-iothreads.args +index b24ec1e..c4521f2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-iothreads.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-iothreads.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object iothread,id=iothread1 \ + -object iothread,id=iothread2 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvm-features-off.args b/tests/qemuxml2argvdata/qemuxml2argv-kvm-features-off.args +index 37a2af7..c268db1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvm-features-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvm-features-off.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32 \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvm-features.args b/tests/qemuxml2argvdata/qemuxml2argv-kvm-features.args +index 7d768fd..a7a7a3b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvm-features.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvm-features.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,kvm=off \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-delay.args b/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-delay.args +index 1d7be2b..1d69797 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-delay.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-delay.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-device.args b/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-device.args +index 5f04308..5ff60af 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvm-pit-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvm.args b/tests/qemuxml2argvdata/qemuxml2argv-kvm.args +index 033c759..a522c09 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvm.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvm.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc-1.0,accel=kvm \ + -m 4096 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -uuid d091ea82-29e6-2e34-3005-f02617b36e87 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args b/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args +index 756c8a9..96b3c31 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,-kvmclock,-kvm_pv_eoi \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvmclock.args b/tests/qemuxml2argvdata/qemuxml2argv-kvmclock.args +index 954fbaa..50b0bd4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-kvmclock.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-kvmclock.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,-kvmclock \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args +index efb5cb0..270322f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + file=/tmp/lib/domain--1-encryptdisk/master-key.aes \ + -M pc-i440fx-2.1 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-cap.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-cap.args +index 15593bf..caba979 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-cap.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-cap.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,aes-key-wrap=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-caps.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-caps.args +index 15593bf..caba979 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-caps.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-off-caps.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,aes-key-wrap=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-cap.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-cap.args +index c148fab..f5cbf07 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-cap.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-cap.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,aes-key-wrap=on \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-caps.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-caps.args +index c148fab..f5cbf07 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-caps.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-aeskeywrap-on-caps.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,aes-key-wrap=on \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases1.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases1.args +index be730de..5e2d0c0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases1.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases1.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.11 \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases2.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases2.args +index c2ac8bb..07a6600 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-aliases2.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args +index 0610c2c..a6635a6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc,accel=tcg,dump-guest-core=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args +index c62ca65..578ba6a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc,accel=tcg,dump-guest-core=on \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-cap.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-cap.args +index 7fdb827..21b12a0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-cap.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-cap.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,dea-key-wrap=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-caps.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-caps.args +index 7fdb827..21b12a0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-caps.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-off-caps.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,dea-key-wrap=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-cap.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-cap.args +index 63f6fd9..11ca96d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-cap.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-cap.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,dea-key-wrap=on \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-caps.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-caps.args +index 63f6fd9..11ca96d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-caps.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-deakeywrap-on-caps.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg,dea-key-wrap=on \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none-caps.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none-caps.args +index 652eca2..187683c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none-caps.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none-caps.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none.args +index 652eca2..187683c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-keywrap-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine s390-ccw-virtio,accel=tcg \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-usb-opt.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-usb-opt.args +index 68078c6..96f8f6c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-usb-opt.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-usb-opt.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc,accel=tcg,usb=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-vmport-opt.args b/tests/qemuxml2argvdata/qemuxml2argv-machine-vmport-opt.args +index 1f817cb..f7a6dcc 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-vmport-opt.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-vmport-opt.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc,accel=tcg,vmport=off \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-master-key.args b/tests/qemuxml2argvdata/qemuxml2argv-master-key.args +index de030eb..ec6b1ee 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-master-key.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-master-key.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm-addr.args +index 603bae2..beab50e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm-addr.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm-addr.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m size=219136k,slots=16,maxmem=1099511627776k \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -numa node,nodeid=0,cpus=0-1,mem=214 \ + -object memory-backend-file,id=memdimm0,prealloc=yes,\ + mem-path=/dev/hugepages2M/libvirt/qemu,size=536870912,host-nodes=1-3,policy=bind \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.args b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.args +index a8a5527..c3b7afe 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-dimm.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m size=219136k,slots=16,maxmem=1099511627776k \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -numa node,nodeid=0,cpus=0-1,mem=214 \ + -object memory-backend-ram,id=memdimm0,size=536870912 \ + -device pc-dimm,node=0,memdev=memdimm0,id=dimm0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-ppc64-nonuma.args b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-ppc64-nonuma.args +index bb29cfd..8a85fb1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-ppc64-nonuma.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug-ppc64-nonuma.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m size=1310720k,slots=16,maxmem=4194304k \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -object memory-backend-ram,id=memdimm0,size=536870912 \ + -device pc-dimm,memdev=memdimm0,id=dimm0 \ + -object memory-backend-ram,id=memdimm1,size=536870912 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug.args b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug.args +index c4831ec..94b1773 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-memory-hotplug.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m size=219136k,slots=16,maxmem=1099511627776k \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -numa node,nodeid=0,cpus=0-1,mem=214 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memtune-unlimited.args b/tests/qemuxml2argvdata/qemuxml2argv-memtune-unlimited.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-memtune-unlimited.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-memtune-unlimited.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memtune.args b/tests/qemuxml2argvdata/qemuxml2argv-memtune.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-memtune.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-memtune.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args b/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args +index 1c43ba2..a20e1c0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 14338 \ +--smp 32 \ ++-smp 32,sockets=32,cores=1,threads=1 \ + -object memory-backend-ram,id=ram-node0,size=20482048,host-nodes=3,\ + policy=preferred \ + -numa node,nodeid=0,cpus=0,memdev=ram-node0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-migrate.args b/tests/qemuxml2argvdata/qemuxml2argv-migrate.args +index 97d3684..742e29e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-migrate.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-migrate.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-minimal-msg-timestamp.args b/tests/qemuxml2argvdata/qemuxml2argv-minimal-msg-timestamp.args +index b43c4e6..8be1773 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-minimal-msg-timestamp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-minimal-msg-timestamp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-minimal.args b/tests/qemuxml2argvdata/qemuxml2argv-minimal.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-minimal.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-minimal.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args +index 0386a12..4744b11 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-s3.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-s3.args +index 4222202..21c6322 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-s3.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-s3.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 8caaa98c-e7bf-5845-126a-1fc316bd1089 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-suspends.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-suspends.args +index 92d1b4a..224e0f3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-suspends.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-disable-suspends.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 8caaa98c-e7bf-5845-126a-1fc316bd1089 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-enable-s4.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-enable-s4.args +index db25fa9..61eba8c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-misc-enable-s4.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-enable-s4.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 8caaa98c-e7bf-5845-126a-1fc316bd1089 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args +index 0f5e504..cb5a707 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args +index 0386a12..4744b11 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-mlock-off.args b/tests/qemuxml2argvdata/qemuxml2argv-mlock-off.args +index 6564cf3..508d139 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-mlock-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-mlock-off.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -m 214 \ + -realtime mlock=off \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.args b/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.args +index b0b11e8..8db643d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -m 214 \ + -realtime mlock=on \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-mlock-unsupported.args b/tests/qemuxml2argvdata/qemuxml2argv-mlock-unsupported.args +index 5de9ecb..a401b9a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-mlock-unsupported.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-mlock-unsupported.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args b/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args +index 3411b26..2f82286 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args +index 1388927..abb1694 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args b/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args +index b59706c..04be5fe 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + bar=2/master-key.aes \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -chardev socket,id=charmonitor,path=/tmp/lib/domain--1-foo=1,,bar=2/monitor.sock,\ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-client.args b/tests/qemuxml2argvdata/qemuxml2argv-net-client.args +index ef5301e..f923a14 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-client.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-client.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args +index b96c933..181eb3b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args +index a2c3f87..745cf3e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args b/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args +index b96c933..181eb3b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-multidomain.args b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-multidomain.args +index 458eac4..d266a44 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-multidomain.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-multidomain.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio-multidomain.args b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio-multidomain.args +index 99240dc..81fe791 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio-multidomain.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio-multidomain.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio.args b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio.args +index bbeb057..eda2a91 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev-vfio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.args b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.args +index 9cc8c27..04c6712 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-mcast.args b/tests/qemuxml2argvdata/qemuxml2argv-net-mcast.args +index 98ad8cf..30486db 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-mcast.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-mcast.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-server.args b/tests/qemuxml2argvdata/qemuxml2argv-net-server.args +index b0df20f..ba2b585 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-server.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-server.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-udp.args b/tests/qemuxml2argvdata/qemuxml2argv-net-udp.args +index e5b1514..4ab945e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-udp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-udp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-user.args b/tests/qemuxml2argvdata/qemuxml2argv-net-user.args +index 7a6605b..315cbeb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-user.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-user.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser-multiq.args b/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser-multiq.args +index 3229034..a136dba 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser-multiq.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser-multiq.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser.args b/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser.args +index a9989b8..8356ef0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-vhostuser.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-ccw.args +index 4cec6b1..86b6add 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-device.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-device.args +index ac72cbf..e04e66f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args +index 1123b48..e525cf1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-netdev.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-netdev.args +index cd17800..a12d500 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-netdev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-netdev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-s390.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-s390.args +index 3d95fe1..46ccbc9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-s390.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-s390.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio.args +index a3893fc..5186950 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args b/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args +index 7f55f19..12fa43e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-nographics-vga.args b/tests/qemuxml2argvdata/qemuxml2argv-nographics-vga.args +index 1d6c7e9..93ce4b2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-nographics-vga.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-nographics-vga.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-nographics.args b/tests/qemuxml2argvdata/qemuxml2argv-nographics.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-nographics.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-nographics.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-nosharepages.args b/tests/qemuxml2argvdata/qemuxml2argv-nosharepages.args +index 62d09c9..0b45663 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-nosharepages.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-nosharepages.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -machine pc,accel=tcg,mem-merge=off \ + -m 215 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-cpuset.args b/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-cpuset.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-cpuset.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-cpuset.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-no-cpuset-and-placement.args b/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-no-cpuset-and-placement.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-no-cpuset-and-placement.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-memory-vcpu-no-cpuset-and-placement.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-vcpu-static-numatune.args b/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-vcpu-static-numatune.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-vcpu-static-numatune.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numad-auto-vcpu-static-numatune.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numad-static-memory-auto-vcpu.args b/tests/qemuxml2argvdata/qemuxml2argv-numad-static-memory-auto-vcpu.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numad-static-memory-auto-vcpu.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numad-static-memory-auto-vcpu.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numad.args b/tests/qemuxml2argvdata/qemuxml2argv-numad.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numad.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numad.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-nodeset-invalid.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-nodeset-invalid.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-nodeset-invalid.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-nodeset-invalid.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args +index 71d8105..d873b88 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 64 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -numa node,nodeid=0,cpus=0,mem=64 \ + -uuid 9f4b6512-e73a-4a25-93e8-5307802821ce \ + -nographic \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args +index bd1616e..ad024fb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 64 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -object memory-backend-ram,id=ram-node0,size=33554432,host-nodes=3,\ + policy=preferred \ + -numa node,nodeid=0,cpus=0,memdev=ram-node0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.args +index 08d672d..bcd49d8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 24105 \ +--smp 32 \ ++-smp 32,sockets=32,cores=1,threads=1 \ + -object memory-backend-ram,id=ram-node0,size=20971520,host-nodes=3,\ + policy=preferred \ + -numa node,nodeid=0,cpus=0,memdev=ram-node0 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memory.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memory.args +index 23d4b2a..d732b04 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memory.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memory.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-panic-double.args b/tests/qemuxml2argvdata/qemuxml2argv-panic-double.args +index 574e696..71ab7a7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-panic-double.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-panic-double.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,hv_crash \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-panic-no-address.args b/tests/qemuxml2argvdata/qemuxml2argv-panic-no-address.args +index c5345d0..caec159 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-panic-no-address.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-panic-no-address.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-panic.args b/tests/qemuxml2argvdata/qemuxml2argv-panic.args +index bf82d3a..7db4b4a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-panic.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-panic.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-parallel-parport-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-parallel-parport-chardev.args +index 1917dd0..b511f93 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-parallel-parport-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-parallel-parport-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp-chardev.args +index 29aa5d0..cbca4f6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args b/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args +index f40708d..fab1167 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-addr.args +index 1bd0e82..941ce97 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-addr.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-addr.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 3ec6cbe1-b5a2-4515-b800-31a61855df41 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-idx.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-idx.args +index b35d9d9..7a8551b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-idx.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-autoadd-idx.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 3ec6cbe1-b5a2-4515-b800-31a61855df41 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-autofill-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-autofill-addr.args +index d1cbe4a..b8071ea 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-autofill-addr.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-autofill-addr.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 3ec6cbe1-b5a2-4515-b800-31a61855df41 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-many-disks.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-many-disks.args +index 1b3f0a4..c3ee9c7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-many-disks.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-many-disks.args +@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \ + -cpu qemu64,-kvmclock \ + -bios /usr/share/seabios/bios.bin \ + -m 3907 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 04872dc1-e1de-434b-ab21-e3e80e416349 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus.args +index 268a301..b608cf6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-expander-bus.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-i440fx-2.5 \ + -m 214 \ +--smp 16 \ ++-smp 16,sockets=2,cores=4,threads=2 \ + -numa node,nodeid=0,cpus=0-7,mem=107 \ + -numa node,nodeid=1,cpus=8-15,mem=107 \ + -uuid 3ec6cbe1-b5a2-4515-b800-31a61855df41 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-many.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-many.args +index 0a3b4f7..f0e014c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-many.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-many.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 3ec6cbe1-b5a2-4515-b800-31a61855df41 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-rom.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-rom.args +index 94d3135..9fc178b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-rom.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-rom.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9466-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-serial-dev-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-pci-serial-dev-chardev.args +index 908a686..d9634e3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pci-serial-dev-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pci-serial-dev-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args +index 13f546c..2b89846 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 214 \ +--smp 16 \ ++-smp 16,sockets=2,cores=4,threads=2 \ + -numa node,nodeid=0,cpus=0-7,mem=107 \ + -numa node,nodeid=1,cpus=8-15,mem=107 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args b/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args +index 8031ebc..35c2664 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-root.args b/tests/qemuxml2argvdata/qemuxml2argv-pcie-root.args +index ade7acc..7ef03d3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-root.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-root.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-downstream-port.args b/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-downstream-port.args +index d94dc23..500b366 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-downstream-port.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-downstream-port.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args b/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args +index ba2bba7..24d5f37 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcihole64-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-pcihole64-q35.args +index 7d3a070..ad28dde 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcihole64-q35.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcihole64-q35.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcihole64.args b/tests/qemuxml2argvdata/qemuxml2argv-pcihole64.args +index 0d5ad06..992d889 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pcihole64.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pcihole64.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-1.2 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 3c7c30b5-7866-4b05-8a29-efebccba52a0 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature-off.args b/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature-off.args +index 92f05de..6fcd23f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature-off.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature-off.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,pmu=off \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature.args b/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature.args +index 2af536c..5f648e6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pmu-feature.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,pmu=on \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.args b/tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.args +index 31a675c..b1e7410 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M ppce500 \ + -m 256 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 49545eb3-75e1-2d0a-acdd-f0294406c99e \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller-legacy.args b/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller-legacy.args +index aafa621..bed5045 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller-legacy.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller-legacy.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 256 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller.args +index 0711940..2ec2231 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 256 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-ppce500-serial.args b/tests/qemuxml2argvdata/qemuxml2argv-ppce500-serial.args +index 3f06787..7dba956 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-ppce500-serial.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-ppce500-serial.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M ppce500 \ + -m 256 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args +index aac325f..2839dea 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args +index fdd8101..06595a2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pseries \ + -cpu host,compat=power7 \ + -m 256 \ +--smp 4 \ ++-smp 4,sockets=4,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args +index b459e12..4d27f05 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pseries \ + -cpu POWER7_v2.3 \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args +index aac325f..2839dea 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-nvram.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-nvram.args +index 9cc8914..89e0e56 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-nvram.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-nvram.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args +index aac325f..2839dea 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args +index aac325f..2839dea 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args +index 4d0af3f..251e786 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args +index 5887616..8451283 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args +index 46e8b02..50e273b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args +index cc85a15..2525efc 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 2754dd7b-ac8a-4850-aec0-1f3fcd43235b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args +index ba000a9..ddeb642 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pseries \ + -m 512 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 2754dd7b-ac8a-4850-aec0-1f3fcd43235b \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-disabled.args b/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-disabled.args +index 8f5f209..e678ffb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-disabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-disabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,-kvm_pv_unhalt \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-enabled.args b/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-enabled.args +index 66b816a..bcdeaf7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-enabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-pv-spinlock-enabled.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -M pc \ + -cpu qemu32,+kvm_pv_unhalt \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args +index c7eafc5..deae687 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-q35-2.5 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 56f5055c-1b8d-490c-844a-ad646a1caaaa \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args +index ec90851..871340f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-q35-2.5 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 56f5055c-1b8d-490c-844a-ad646a1caaaa \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args +index 9da845b..c9d4d2b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args +index bd0cd55..1966de9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2.args b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2.args +index 5cca714..1d44e7a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-q35.args +index 5cca714..1d44e7a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-q35.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-q35.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 2 \ ++-smp 2,sockets=2,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns0.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns0.args +index 21d2d83..afaa462 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns0.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns0.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns1.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns1.args +index 21d2d83..afaa462 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns1.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline-ns1.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline.args +index 21d2d83..afaa462 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-commandline.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline-ns0.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline-ns0.args +index 21d2d83..afaa462 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline-ns0.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline-ns0.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline.args +index 21d2d83..afaa462 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-commandline.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-ns0.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-ns0.args +index 21d2d83..afaa462 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-ns0.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-domain-ns0.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-no-env.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-no-env.args +index a26fb61..603af8b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-no-env.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns-no-env.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns.args b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns.args +index 7b4dbdf..9bb1b49 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-qemu-ns.args +@@ -11,7 +11,7 @@ BAR='' \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-disabled.args b/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-disabled.args +index d975055..c69a3a0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-disabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-disabled.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-enabled.args b/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-enabled.args +index d7d4dd4..94013f0 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-enabled.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-reboot-timeout-enabled.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 6 \ ++-smp 6,sockets=6,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-restore-v2-fd.args b/tests/qemuxml2argvdata/qemuxml2argv-restore-v2-fd.args +index 8b57976..0954c1a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-restore-v2-fd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-restore-v2-fd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-restore-v2.args b/tests/qemuxml2argvdata/qemuxml2argv-restore-v2.args +index 9cbe45b..2220522 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-restore-v2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-restore-v2.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-controller.args +index 261c842..0bd563e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-controller.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-controller.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-none.args b/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-none.args +index 261c842..0bd563e 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-s390-allow-bogus-usb-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-missing.args +index f2eec5b..a18b5a5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-missing.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-missing.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw-virtio \ + -m 256 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-no-address.args b/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-no-address.args +index 811991d..e49c8df 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-no-address.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-s390-panic-no-address.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw-virtio \ + -m 256 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dac-none.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dac-none.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dac-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dac-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-baselabel.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-baselabel.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-baselabel.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-baselabel.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-labelskip.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-labelskip.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-labelskip.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-labelskip.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-override.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-override.args +index 074db7e..6cf8cd8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-override.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-override.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-relabel.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-relabel.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-relabel.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic-relabel.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-dynamic.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-none.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-none.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-labelskip.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-labelskip.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-labelskip.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-labelskip.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-relabel.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-relabel.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-relabel.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static-relabel.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static.args b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-seclabel-static.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev-iobase.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev-iobase.args +index ec23489..9d79fce 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev-iobase.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev-iobase.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev.args +index bca3a3b..2b549c3 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-dev-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args +index 02adc23..7587eab 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-file-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-file-chardev.args +index b0e7907..b0b0297 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-file-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-file-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-file-log.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-file-log.args +index 38cad7b..72b33f2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-file-log.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-file-log.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-file.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-file.args +index 30f6e68..298a57a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-file.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-file.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-many-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-many-chardev.args +index 1dc50ff..4248435 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-many-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-many-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-many.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-many.args +index e27aae6..8efc238 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-many.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-many.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-pty-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-pty-chardev.args +index e071b3f..0e7f26a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-pty-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-pty-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args +index 9fea57f..1a63b9a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport-nospice.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport-nospice.args +index 60969e4..4ed60f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport-nospice.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport-nospice.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args +index f05c3f2..54293bb 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-spiceport.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefconfig \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-chardev.args +index 4f23b43..59efc87 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet-chardev.args +index 8953217..9dfda3b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args +index 84de29d..86bdc2c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args +index 982639e..e5fc807 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-udp-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-udp-chardev.args +index ef8c89c..4b25e4a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-udp-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-udp-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args +index 236c2d1..7d12cd6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-unix-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-unix-chardev.args +index 057cf79..3324f38 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-unix-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-unix-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args +index cd60b07..259a562 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-vc-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-vc-chardev.args +index ec31a07..e1371a9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-vc-chardev.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-vc-chardev.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args +index 797f45f..8798554 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-shmem.args b/tests/qemuxml2argvdata/qemuxml2argv-shmem.args +index 807bed3..89caf49 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-shmem.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-shmem.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args +index beb2935..913a6b7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-controller.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args +index 72cf24b..f6ee9ed 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host-certificates.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args +index beb2935..913a6b7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-host.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args +index cdca4c4..d4ebe43 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-spicevmc.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args +index 0c526c8..e6034bd 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smartcard-passthrough-tcp.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smbios.args b/tests/qemuxml2argvdata/qemuxml2argv-smbios.args +index d32f065..34753d7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-smbios.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-smbios.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -smbios 'type=0,vendor=LENOVO,version=6FET82WW (3.12 )' \ + -smbios 'type=1,manufacturer=Fedora,product=Virt-Manager,version=0.8.2-3.fc14,\ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args b/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args +index b084f4e..6735182 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-sound-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-sound.args b/tests/qemuxml2argvdata/qemuxml2argv-sound.args +index d730310..0ee5c50 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-sound.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-sound.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-tpm-passthrough.args b/tests/qemuxml2argvdata/qemuxml2argv-tpm-passthrough.args +index 4fdede1..3cdd980 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-tpm-passthrough.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-tpm-passthrough.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.12 \ + -m 2048 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 11d7cd22-da89-3094-6212-079a48a309a1 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-default-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-default-q35.args +index 7c33da2..f98f838 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-default-q35.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-default-q35.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-explicit-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-explicit-q35.args +index d24f9cd..5eb39ba 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-explicit-q35.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-explicit-q35.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M q35 \ + -m 2048 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci.args +index b91adc4..c50271d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller.args +index fa04c25..6936b83 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args +index 12c9691..7467893 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub.args +index 57019c1..2f1ceee 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-hub.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-hub.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args +index db95851..1cda342 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-autoassign.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args +index b8de839..0274008 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args +index 3e1d137..2290dc5 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-long-port-path.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-long-port-path.args +index d9100f6..2f29af7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-long-port-path.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-long-port-path.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-none.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-none.args +index 13ce783..a2eb6a9 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-none.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-none.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args +index 297a36f..8c8648c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args +index ac5cfdd..03803bd 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args +index 56c0750..ff743c8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ports.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ports.args +index 6bf68fb..e63b1b6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ports.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ports.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args +index bc47963..65c5417 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-boot.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter-version.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter-version.args +index cf7a952..5fd9e4a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter-version.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter-version.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args +index f191f35..3668ccc 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args +index 0999c97..04a7a37 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args +index 15a9d29..abcaeae 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-xhci-autoassign.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args +index b2d1489..c1dd5f7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-device-pciaddr-default.args b/tests/qemuxml2argvdata/qemuxml2argv-video-device-pciaddr-default.args +index 40937b8..3de081b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-device-pciaddr-default.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-device-pciaddr-default.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.15 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid cdbebdfa-1d6d-65c3-be0f-fd74b978a773 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device-vgamem.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device-vgamem.args +index e4c456f..f81fd99 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device-vgamem.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device-vgamem.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device.args +index cd893df..fa2c505 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args +index a939177..9678389 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-nodevice.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-nodevice.args +index cf096d7..92db6f8 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-nodevice.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-nodevice.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args +index c609d48..84abe6b 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device-vgamem.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device-vgamem.args +index 45bd170..6e157e2 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device-vgamem.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device-vgamem.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device.args +index b1fa2e3..7c7a0f1 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-sec-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device-vgamem.args b/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device-vgamem.args +index 6206dc0..a5c2509 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device-vgamem.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device-vgamem.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device.args b/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device.args +index 4a03a12..d938393 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-vga-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-vga-nodevice.args b/tests/qemuxml2argvdata/qemuxml2argv-video-vga-nodevice.args +index 4b82419..a266339 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-vga-nodevice.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-vga-nodevice.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-device.args b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-device.args +index d1c7e24..fefa2b6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-spice-gl.args b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-spice-gl.args +index edecca1..8844498 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-spice-gl.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-spice-gl.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=spice \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nodefaults \ + -monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-virgl.args b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-virgl.args +index bd9fdc8..6a55311 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-virgl.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-virgl.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-input-passthrough.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-input-passthrough.args +index aceb04a..287de66 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-input-passthrough.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-input-passthrough.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-input.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-input.args +index 8f6e4fc..9baefc4 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-input.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-input.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args +index 11430c9..22df96f 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc-0.13 \ + -m 1024 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid bba65c0e-c049-934f-b6aa-4e2c0582acdf \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args +index bf39fb1..cf48768 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-ccw \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-default.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-default.args +index 505d8cc..11b7e82 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-default.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-default.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-egd.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-egd.args +index 2a3d196..3c069d7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-egd.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-egd.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-multiple.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-multiple.args +index d68b32a..8f8159a 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-multiple.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-multiple.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-random.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-random.args +index 5a4d47b..a613cd6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-random.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-random.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-device.args b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-device.args +index efc63c0..641f238 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-device.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-device.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-diag288.args b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-diag288.args +index b48c826..2997c12 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-diag288.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-diag288.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M s390-virtio \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefconfig \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-dump.args b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-dump.args +index dbc0929..a0a726c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-dump.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-dump.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-injectnmi.args b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-injectnmi.args +index 0004807..6bf6f3d 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-watchdog-injectnmi.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog-injectnmi.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args b/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args +index 49bfc38..fd5d4a7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args +@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \ + -S \ + -M pc \ + -m 214 \ +--smp 1 \ ++-smp 1,sockets=1,cores=1,threads=1 \ + -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ + -nographic \ + -nodefaults \ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index b1ff684..a9a3e6b 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -623,7 +623,6 @@ mymain(void) + QEMU_CAPS_ICH9_AHCI, + QEMU_CAPS_MACHINE_OPT, + QEMU_CAPS_MACHINE_SMM_OPT, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_VIRTIO_SCSI); + DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT, + QEMU_CAPS_MACHINE_USB_OPT); +@@ -691,7 +690,6 @@ mymain(void) + QEMU_CAPS_ICH9_AHCI, + QEMU_CAPS_MACHINE_OPT, + QEMU_CAPS_MACHINE_SMM_OPT, +- QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_VIRTIO_SCSI); + DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG); + DO_TEST("clock-localtime", NONE); +@@ -1343,7 +1341,7 @@ mymain(void) + DO_TEST("qemu-ns", NONE); + DO_TEST("qemu-ns-no-env", NONE); + +- DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY); ++ DO_TEST("smp", NONE); + + DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD); + DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD); +@@ -1359,8 +1357,8 @@ mymain(void) + QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD, + QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); + +- DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY); +- DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY); ++ DO_TEST("cpu-topology1", NONE); ++ DO_TEST("cpu-topology2", NONE); + DO_TEST("cpu-topology3", NONE); + DO_TEST("cpu-minimum1", QEMU_CAPS_KVM); + DO_TEST("cpu-minimum2", QEMU_CAPS_KVM); +@@ -1371,14 +1369,13 @@ mymain(void) + DO_TEST_FAILURE("cpu-nofallback", QEMU_CAPS_KVM); + DO_TEST("cpu-strict1", QEMU_CAPS_KVM); + DO_TEST("cpu-numa1", NONE); +- DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY); +- DO_TEST("cpu-numa-no-memory-element", QEMU_CAPS_SMP_TOPOLOGY); ++ DO_TEST("cpu-numa2", NONE); ++ DO_TEST("cpu-numa-no-memory-element", NONE); + DO_TEST_PARSE_ERROR("cpu-numa3", NONE); + DO_TEST_FAILURE("cpu-numa-disjoint", NONE); + DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA); +- DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY, +- QEMU_CAPS_OBJECT_MEMORY_RAM); +- DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY); ++ DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM); ++ DO_TEST_FAILURE("cpu-numa-memshared", NONE); + DO_TEST("cpu-host-model", NONE); + DO_TEST("cpu-host-model-vendor", NONE); + skipLegacyCPUs = true; +@@ -1413,7 +1410,7 @@ mymain(void) + DO_TEST("cputune-zero-shares", NONE); + DO_TEST_PARSE_ERROR("cputune-iothreadsched-toomuch", NONE); + DO_TEST_PARSE_ERROR("cputune-vcpusched-overlap", NONE); +- DO_TEST("cputune-numatune", QEMU_CAPS_SMP_TOPOLOGY, ++ DO_TEST("cputune-numatune", + QEMU_CAPS_KVM, + QEMU_CAPS_OBJECT_IOTHREAD, + QEMU_CAPS_OBJECT_MEMORY_RAM, +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-caps-Sanitize-storage-of-machine-type-related-data.patch b/SOURCES/libvirt-qemu-caps-Sanitize-storage-of-machine-type-related-data.patch new file mode 100644 index 0000000..818f9e3 --- /dev/null +++ b/SOURCES/libvirt-qemu-caps-Sanitize-storage-of-machine-type-related-data.patch @@ -0,0 +1,294 @@ +From e3f4b7809a6f2738801f7f9610fcbfa2166c1bb3 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:01 -0400 +Subject: [PATCH] qemu: caps: Sanitize storage of machine type related data + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Add a structure to store the data and use a single array of the +structures rather than having 3 separate arrays with shared indexes. + +(cherry picked from commit ceec23d97f1d32f2047750c7329574a17b7290f9) +--- + src/qemu/qemu_capabilities.c | 117 +++++++++++++++++-------------------------- + 1 file changed, 46 insertions(+), 71 deletions(-) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 56fefbb..f6a42e7 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -342,6 +342,11 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, + ); + + ++struct virQEMUCapsMachineType { ++ char *name; ++ char *alias; ++ unsigned int maxCpus; ++}; + /* + * Update the XML parser/formatter when adding more + * information to this struct so that it gets cached +@@ -369,9 +374,7 @@ struct _virQEMUCaps { + char **cpuDefinitions; + + size_t nmachineTypes; +- char **machineTypes; +- char **machineAliases; +- unsigned int *machineMaxCpus; ++ struct virQEMUCapsMachineType *machineTypes; + + size_t ngicCapabilities; + virGICCapability *gicCapabilities; +@@ -473,22 +476,13 @@ static void + virQEMUCapsSetDefaultMachine(virQEMUCapsPtr qemuCaps, + size_t defIdx) + { +- char *name = qemuCaps->machineTypes[defIdx]; +- char *alias = qemuCaps->machineAliases[defIdx]; +- unsigned int maxCpus = qemuCaps->machineMaxCpus[defIdx]; ++ struct virQEMUCapsMachineType tmp = qemuCaps->machineTypes[defIdx]; + + memmove(qemuCaps->machineTypes + 1, + qemuCaps->machineTypes, + sizeof(qemuCaps->machineTypes[0]) * defIdx); +- memmove(qemuCaps->machineAliases + 1, +- qemuCaps->machineAliases, +- sizeof(qemuCaps->machineAliases[0]) * defIdx); +- memmove(qemuCaps->machineMaxCpus + 1, +- qemuCaps->machineMaxCpus, +- sizeof(qemuCaps->machineMaxCpus[0]) * defIdx); +- qemuCaps->machineTypes[0] = name; +- qemuCaps->machineAliases[0] = alias; +- qemuCaps->machineMaxCpus[0] = maxCpus; ++ ++ qemuCaps->machineTypes[0] = tmp; + } + + /* Format is: +@@ -536,23 +530,21 @@ virQEMUCapsParseMachineTypesStr(const char *output, + } + } + +- if (VIR_REALLOC_N(qemuCaps->machineTypes, qemuCaps->nmachineTypes + 1) < 0 || +- VIR_REALLOC_N(qemuCaps->machineAliases, qemuCaps->nmachineTypes + 1) < 0 || +- VIR_REALLOC_N(qemuCaps->machineMaxCpus, qemuCaps->nmachineTypes + 1) < 0) { ++ if (VIR_REALLOC_N(qemuCaps->machineTypes, qemuCaps->nmachineTypes + 1) < 0) { + VIR_FREE(name); + VIR_FREE(canonical); + return -1; + } + qemuCaps->nmachineTypes++; + if (canonical) { +- qemuCaps->machineTypes[qemuCaps->nmachineTypes-1] = canonical; +- qemuCaps->machineAliases[qemuCaps->nmachineTypes-1] = name; ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].name = canonical; ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].alias = name; + } else { +- qemuCaps->machineTypes[qemuCaps->nmachineTypes-1] = name; +- qemuCaps->machineAliases[qemuCaps->nmachineTypes-1] = NULL; ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].name = name; ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].alias = NULL; + } + /* When parsing from command line we don't have information about maxCpus */ +- qemuCaps->machineMaxCpus[qemuCaps->nmachineTypes-1] = 0; ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes-1].maxCpus = 0; + } while ((p = next)); + + +@@ -2041,16 +2033,12 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) + + if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) + goto error; +- if (VIR_ALLOC_N(ret->machineAliases, qemuCaps->nmachineTypes) < 0) +- goto error; +- if (VIR_ALLOC_N(ret->machineMaxCpus, qemuCaps->nmachineTypes) < 0) +- goto error; + ret->nmachineTypes = qemuCaps->nmachineTypes; + for (i = 0; i < qemuCaps->nmachineTypes; i++) { +- if (VIR_STRDUP(ret->machineTypes[i], qemuCaps->machineTypes[i]) < 0 || +- VIR_STRDUP(ret->machineAliases[i], qemuCaps->machineAliases[i]) < 0) ++ if (VIR_STRDUP(ret->machineTypes[i].name, qemuCaps->machineTypes[i].name) < 0 || ++ VIR_STRDUP(ret->machineTypes[i].alias, qemuCaps->machineTypes[i].alias) < 0) + goto error; +- ret->machineMaxCpus[i] = qemuCaps->machineMaxCpus[i]; ++ ret->machineTypes[i].maxCpus = qemuCaps->machineTypes[i].maxCpus; + } + + return ret; +@@ -2067,12 +2055,10 @@ void virQEMUCapsDispose(void *obj) + size_t i; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { +- VIR_FREE(qemuCaps->machineTypes[i]); +- VIR_FREE(qemuCaps->machineAliases[i]); ++ VIR_FREE(qemuCaps->machineTypes[i].name); ++ VIR_FREE(qemuCaps->machineTypes[i].alias); + } + VIR_FREE(qemuCaps->machineTypes); +- VIR_FREE(qemuCaps->machineAliases); +- VIR_FREE(qemuCaps->machineMaxCpus); + + for (i = 0; i < qemuCaps->ncpuDefinitions; i++) + VIR_FREE(qemuCaps->cpuDefinitions[i]); +@@ -2257,15 +2243,15 @@ int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, + if (VIR_ALLOC(mach) < 0) + goto error; + (*machines)[i] = mach; +- if (qemuCaps->machineAliases[i]) { +- if (VIR_STRDUP(mach->name, qemuCaps->machineAliases[i]) < 0 || +- VIR_STRDUP(mach->canonical, qemuCaps->machineTypes[i]) < 0) ++ if (qemuCaps->machineTypes[i].alias) { ++ if (VIR_STRDUP(mach->name, qemuCaps->machineTypes[i].alias) < 0 || ++ VIR_STRDUP(mach->canonical, qemuCaps->machineTypes[i].name) < 0) + goto error; + } else { +- if (VIR_STRDUP(mach->name, qemuCaps->machineTypes[i]) < 0) ++ if (VIR_STRDUP(mach->name, qemuCaps->machineTypes[i].name) < 0) + goto error; + } +- mach->maxCpus = qemuCaps->machineMaxCpus[i]; ++ mach->maxCpus = qemuCaps->machineTypes[i].maxCpus; + } + + /* Make sure all canonical machine types also have their own entry so that +@@ -2327,10 +2313,10 @@ const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, + return NULL; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { +- if (!qemuCaps->machineAliases[i]) ++ if (!qemuCaps->machineTypes[i].alias) + continue; +- if (STREQ(qemuCaps->machineAliases[i], name)) +- return qemuCaps->machineTypes[i]; ++ if (STREQ(qemuCaps->machineTypes[i].alias, name)) ++ return qemuCaps->machineTypes[i].name; + } + + return name; +@@ -2346,10 +2332,10 @@ int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, + return 0; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { +- if (!qemuCaps->machineMaxCpus[i]) ++ if (!qemuCaps->machineTypes[i].maxCpus) + continue; +- if (STREQ(qemuCaps->machineTypes[i], name)) +- return qemuCaps->machineMaxCpus[i]; ++ if (STREQ(qemuCaps->machineTypes[i].name, name)) ++ return qemuCaps->machineTypes[i].maxCpus; + } + + return 0; +@@ -2497,23 +2483,19 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, + + if (VIR_ALLOC_N(qemuCaps->machineTypes, nmachines) < 0) + goto cleanup; +- if (VIR_ALLOC_N(qemuCaps->machineAliases, nmachines) < 0) +- goto cleanup; +- if (VIR_ALLOC_N(qemuCaps->machineMaxCpus, nmachines) < 0) +- goto cleanup; + + for (i = 0; i < nmachines; i++) { + if (STREQ(machines[i]->name, "none")) + continue; + qemuCaps->nmachineTypes++; +- if (VIR_STRDUP(qemuCaps->machineAliases[qemuCaps->nmachineTypes -1], ++ if (VIR_STRDUP(qemuCaps->machineTypes[qemuCaps->nmachineTypes -1].alias, + machines[i]->alias) < 0 || +- VIR_STRDUP(qemuCaps->machineTypes[qemuCaps->nmachineTypes - 1], ++ VIR_STRDUP(qemuCaps->machineTypes[qemuCaps->nmachineTypes - 1].name, + machines[i]->name) < 0) + goto cleanup; + if (machines[i]->isDefault) + defIdx = qemuCaps->nmachineTypes - 1; +- qemuCaps->machineMaxCpus[qemuCaps->nmachineTypes - 1] = ++ qemuCaps->machineTypes[qemuCaps->nmachineTypes - 1].maxCpus = + machines[i]->maxCpus; + } + +@@ -2908,25 +2890,20 @@ virQEMUCapsLoadCache(virQEMUCapsPtr qemuCaps, const char *filename, + } + if (n > 0) { + qemuCaps->nmachineTypes = n; +- if (VIR_ALLOC_N(qemuCaps->machineTypes, +- qemuCaps->nmachineTypes) < 0 || +- VIR_ALLOC_N(qemuCaps->machineAliases, +- qemuCaps->nmachineTypes) < 0 || +- VIR_ALLOC_N(qemuCaps->machineMaxCpus, +- qemuCaps->nmachineTypes) < 0) ++ if (VIR_ALLOC_N(qemuCaps->machineTypes, qemuCaps->nmachineTypes) < 0) + goto cleanup; + + for (i = 0; i < n; i++) { +- if (!(qemuCaps->machineTypes[i] = virXMLPropString(nodes[i], "name"))) { ++ if (!(qemuCaps->machineTypes[i].name = virXMLPropString(nodes[i], "name"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing machine name in QEMU capabilities cache")); + goto cleanup; + } +- qemuCaps->machineAliases[i] = virXMLPropString(nodes[i], "alias"); ++ qemuCaps->machineTypes[i].alias = virXMLPropString(nodes[i], "alias"); + + str = virXMLPropString(nodes[i], "maxCpus"); + if (str && +- virStrToLong_ui(str, NULL, 10, &(qemuCaps->machineMaxCpus[i])) < 0) { ++ virStrToLong_ui(str, NULL, 10, &(qemuCaps->machineTypes[i].maxCpus)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("malformed machine cpu count in QEMU capabilities cache")); + goto cleanup; +@@ -3061,12 +3038,12 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps, + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { + virBufferEscapeString(&buf, "machineTypes[i]); +- if (qemuCaps->machineAliases[i]) ++ qemuCaps->machineTypes[i].name); ++ if (qemuCaps->machineTypes[i].alias) + virBufferEscapeString(&buf, " alias='%s'", +- qemuCaps->machineAliases[i]); ++ qemuCaps->machineTypes[i].alias); + virBufferAsprintf(&buf, " maxCpus='%u'/>\n", +- qemuCaps->machineMaxCpus[i]); ++ qemuCaps->machineTypes[i].maxCpus); + } + + for (i = 0; i < qemuCaps->ngicCapabilities; i++) { +@@ -3178,12 +3155,10 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps) + qemuCaps->ncpuDefinitions = 0; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { +- VIR_FREE(qemuCaps->machineTypes[i]); +- VIR_FREE(qemuCaps->machineAliases[i]); ++ VIR_FREE(qemuCaps->machineTypes[i].name); ++ VIR_FREE(qemuCaps->machineTypes[i].alias); + } + VIR_FREE(qemuCaps->machineTypes); +- VIR_FREE(qemuCaps->machineAliases); +- VIR_FREE(qemuCaps->machineMaxCpus); + qemuCaps->nmachineTypes = 0; + + VIR_FREE(qemuCaps->gicCapabilities); +@@ -4066,7 +4041,7 @@ virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, + size_t i; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { +- if (STREQ(canonical_machine, qemuCaps->machineTypes[i])) ++ if (STREQ(canonical_machine, qemuCaps->machineTypes[i].name)) + return true; + } + return false; +@@ -4078,7 +4053,7 @@ virQEMUCapsGetDefaultMachine(virQEMUCapsPtr qemuCaps) + { + if (!qemuCaps->nmachineTypes) + return NULL; +- return qemuCaps->machineTypes[0]; ++ return qemuCaps->machineTypes[0].name; + } + + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-cgroup-Extract-temporary-relaxing-of-cgroup-setting-for-vcpu-hotplug.patch b/SOURCES/libvirt-qemu-cgroup-Extract-temporary-relaxing-of-cgroup-setting-for-vcpu-hotplug.patch new file mode 100644 index 0000000..f7407ea --- /dev/null +++ b/SOURCES/libvirt-qemu-cgroup-Extract-temporary-relaxing-of-cgroup-setting-for-vcpu-hotplug.patch @@ -0,0 +1,202 @@ +From b858c92c39a76d6a4aedea05b4f9bf801055f824 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 7 Sep 2016 16:12:13 +0200 +Subject: [PATCH] qemu: cgroup: Extract temporary relaxing of cgroup setting + for vcpu hotplug + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 + +When hot-adding vcpus qemu needs to allocate some structures in the DMA +zone which may be outside of the numa pinning. Extract the code doing +this in a set of helpers so that it can be reused. + +(cherry picked from commit eb5dee353479629d8769de0cfe77c59711c70d79) +--- + src/qemu/qemu_cgroup.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/qemu/qemu_cgroup.h | 11 ++++++ + src/qemu/qemu_driver.c | 36 +++----------------- + 3 files changed, 105 insertions(+), 32 deletions(-) + +diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c +index 2dca874..e2b5bab 100644 +--- a/src/qemu/qemu_cgroup.c ++++ b/src/qemu/qemu_cgroup.c +@@ -1127,3 +1127,93 @@ qemuRemoveCgroup(virDomainObjPtr vm) + + return virCgroupRemove(priv->cgroup); + } ++ ++ ++static void ++qemuCgroupEmulatorAllNodesDataFree(qemuCgroupEmulatorAllNodesDataPtr data) ++{ ++ if (!data) ++ return; ++ ++ virCgroupFree(&data->emulatorCgroup); ++ VIR_FREE(data->emulatorMemMask); ++ VIR_FREE(data); ++} ++ ++ ++/** ++ * qemuCgroupEmulatorAllNodesAllow: ++ * @cgroup: domain cgroup pointer ++ * @retData: filled with structure used to roll back the operation ++ * ++ * Allows all NUMA nodes for the qemu emulator thread temporarily. This is ++ * necessary when hotplugging cpus since it requires memory allocated in the ++ * DMA region. Afterwards the operation can be reverted by ++ * qemuCgrouEmulatorAllNodesRestore. ++ * ++ * Returns 0 on success -1 on error ++ */ ++int ++qemuCgroupEmulatorAllNodesAllow(virCgroupPtr cgroup, ++ qemuCgroupEmulatorAllNodesDataPtr *retData) ++{ ++ qemuCgroupEmulatorAllNodesDataPtr data = NULL; ++ char *all_nodes_str = NULL; ++ virBitmapPtr all_nodes = NULL; ++ int ret = -1; ++ ++ if (!virNumaIsAvailable() || ++ !virCgroupHasController(cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) ++ return 0; ++ ++ if (!(all_nodes = virNumaGetHostNodeset())) ++ goto cleanup; ++ ++ if (!(all_nodes_str = virBitmapFormat(all_nodes))) ++ goto cleanup; ++ ++ if (VIR_ALLOC(data) < 0) ++ goto cleanup; ++ ++ if (virCgroupNewThread(cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, ++ false, &data->emulatorCgroup) < 0) ++ goto cleanup; ++ ++ if (virCgroupGetCpusetMems(data->emulatorCgroup, &data->emulatorMemMask) < 0 || ++ virCgroupSetCpusetMems(data->emulatorCgroup, all_nodes_str) < 0) ++ goto cleanup; ++ ++ VIR_STEAL_PTR(*retData, data); ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(all_nodes_str); ++ virBitmapFree(all_nodes); ++ qemuCgroupEmulatorAllNodesDataFree(data); ++ ++ return ret; ++} ++ ++ ++/** ++ * qemuCgrouEmulatorAllNodesRestore: ++ * @data: data structure created by qemuCgroupEmulatorAllNodesAllow ++ * ++ * Rolls back the setting done by qemuCgroupEmulatorAllNodesAllow and frees the ++ * associated data. ++ */ ++void ++qemuCgrouEmulatorAllNodesRestore(qemuCgroupEmulatorAllNodesDataPtr data) ++{ ++ virErrorPtr err; ++ ++ if (!data) ++ return; ++ ++ err = virSaveLastError(); ++ virCgroupSetCpusetMems(data->emulatorCgroup, data->emulatorMemMask); ++ virSetError(err); ++ virFreeError(err); ++ ++ qemuCgroupEmulatorAllNodesDataFree(data); ++} +diff --git a/src/qemu/qemu_cgroup.h b/src/qemu/qemu_cgroup.h +index dc340a1..e6ebae0 100644 +--- a/src/qemu/qemu_cgroup.h ++++ b/src/qemu/qemu_cgroup.h +@@ -57,4 +57,15 @@ int qemuSetupCgroupCpusetCpus(virCgroupPtr cgroup, virBitmapPtr cpumask); + int qemuSetupGlobalCpuCgroup(virDomainObjPtr vm); + int qemuRemoveCgroup(virDomainObjPtr vm); + ++typedef struct _qemuCgroupEmulatorAllNodesData qemuCgroupEmulatorAllNodesData; ++typedef qemuCgroupEmulatorAllNodesData *qemuCgroupEmulatorAllNodesDataPtr; ++struct _qemuCgroupEmulatorAllNodesData { ++ virCgroupPtr emulatorCgroup; ++ char *emulatorMemMask; ++}; ++ ++int qemuCgroupEmulatorAllNodesAllow(virCgroupPtr cgroup, ++ qemuCgroupEmulatorAllNodesDataPtr *data); ++void qemuCgrouEmulatorAllNodesRestore(qemuCgroupEmulatorAllNodesDataPtr data); ++ + #endif /* __QEMU_CGROUP_H__ */ +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 33bfb67..6775327 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4859,11 +4859,7 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + unsigned int nvcpus) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- virCgroupPtr cgroup_temp = NULL; +- char *mem_mask = NULL; +- char *all_nodes_str = NULL; +- virBitmapPtr all_nodes = NULL; +- virErrorPtr err = NULL; ++ qemuCgroupEmulatorAllNodesDataPtr emulatorCgroup = NULL; + virBitmapPtr vcpumap = NULL; + ssize_t nextvcpu = -1; + int rc = 0; +@@ -4872,22 +4868,8 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + if (!(vcpumap = qemuDomainSelectHotplugVcpuEntities(vm->def, nvcpus))) + goto cleanup; + +- if (virNumaIsAvailable() && +- virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, +- false, &cgroup_temp) < 0) +- goto cleanup; +- +- if (!(all_nodes = virNumaGetHostNodeset())) +- goto cleanup; +- +- if (!(all_nodes_str = virBitmapFormat(all_nodes))) +- goto cleanup; +- +- if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 || +- virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0) +- goto cleanup; +- } ++ if (qemuCgroupEmulatorAllNodesAllow(priv->cgroup, &emulatorCgroup) < 0) ++ goto cleanup; + + if (nvcpus > virDomainDefGetVcpus(vm->def)) { + while ((nextvcpu = virBitmapNextSetBit(vcpumap, nextvcpu)) != -1) { +@@ -4915,17 +4897,7 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + ret = 0; + + cleanup: +- if (mem_mask) { +- err = virSaveLastError(); +- virCgroupSetCpusetMems(cgroup_temp, mem_mask); +- virSetError(err); +- virFreeError(err); +- VIR_FREE(mem_mask); +- } +- +- VIR_FREE(all_nodes_str); +- virBitmapFree(all_nodes); +- virCgroupFree(&cgroup_temp); ++ qemuCgrouEmulatorAllNodesRestore(emulatorCgroup); + virBitmapFree(vcpumap); + + return ret; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-command-Add-helper-to-convert-vcpu-definition-to-JSON-props.patch b/SOURCES/libvirt-qemu-command-Add-helper-to-convert-vcpu-definition-to-JSON-props.patch new file mode 100644 index 0000000..974b211 --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Add-helper-to-convert-vcpu-definition-to-JSON-props.patch @@ -0,0 +1,72 @@ +From dc796a3d8488292fe7088372a23046681f4d0a11 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:35 -0400 +Subject: [PATCH] qemu: command: Add helper to convert vcpu definition to JSON + props + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +For use on the monitor we need to format certain parts of the vcpu +private definition into a JSON object. Add a helper. + +(cherry picked from commit 8807f28b8541b59704df4f90ace06b622ab77866) +--- + src/qemu/qemu_command.c | 30 ++++++++++++++++++++++++++++++ + src/qemu/qemu_command.h | 3 +++ + 2 files changed, 33 insertions(+) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 57b04ee..95055c4 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -9823,3 +9823,33 @@ qemuBuildChrDeviceStr(char **deviceStr, + + return ret; + } ++ ++ ++virJSONValuePtr ++qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu) ++{ ++ qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ virJSONValuePtr ret = NULL; ++ ++ if (virJSONValueObjectCreate(&ret, "s:driver", vcpupriv->type, ++ "s:id", vcpupriv->alias, NULL) < 0) ++ goto error; ++ ++ if (vcpupriv->socket_id != -1 && ++ virJSONValueObjectAdd(ret, "i:socket-id", vcpupriv->socket_id, NULL) < 0) ++ goto error; ++ ++ if (vcpupriv->core_id != -1 && ++ virJSONValueObjectAdd(ret, "i:core-id", vcpupriv->core_id, NULL) < 0) ++ goto error; ++ ++ if (vcpupriv->thread_id != -1 && ++ virJSONValueObjectAdd(ret, "i:thread-id", vcpupriv->thread_id, NULL) < 0) ++ goto error; ++ ++ return ret; ++ ++ error: ++ virJSONValueFree(ret); ++ return NULL; ++} +diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h +index c4d0567..36cfc51 100644 +--- a/src/qemu/qemu_command.h ++++ b/src/qemu/qemu_command.h +@@ -180,4 +180,7 @@ bool qemuCheckCCWS390AddressSupport(const virDomainDef *def, + virQEMUCapsPtr qemuCaps, + const char *devicename); + ++virJSONValuePtr qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu) ++ ATTRIBUTE_NONNULL(1); ++ + #endif /* __QEMU_COMMAND_H__*/ +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-command-Add-infrastructure-for-object-specified-disk-sources.patch b/SOURCES/libvirt-qemu-command-Add-infrastructure-for-object-specified-disk-sources.patch new file mode 100644 index 0000000..2b1503c --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Add-infrastructure-for-object-specified-disk-sources.patch @@ -0,0 +1,211 @@ +From e1b18fb8e327e01dbc062f86d7e23e288f441228 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:42:03 +0200 +Subject: [PATCH] qemu: command: Add infrastructure for object specified disk + sources + +To allow richer definitions of disk sources add infrastructure that will +allow to register functionst generating a JSON object based definition. + +This infrastructure will then convert the definition to the proper +command line syntax and use it in cases where it's necessary. This will +allow to keep legacy definitions for back-compat when possible and use +the new definitions for the configurations requiring them. + +(cherry picked from commit f444101729db35979857f317f46908bea3750488) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/libvirt_private.syms | 1 + + src/qemu/qemu_command.c | 83 ++++++++++++++++++++++++++++++++++++------------ + src/util/virqemu.c | 21 ++++++++++++ + src/util/virqemu.h | 2 ++ + 4 files changed, 86 insertions(+), 21 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 533cf55..b7a1663 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2196,6 +2196,7 @@ virQEMUBuildBufferEscapeComma; + virQEMUBuildCommandLineJSON; + virQEMUBuildCommandLineJSONArrayBitmap; + virQEMUBuildCommandLineJSONArrayNumbered; ++virQEMUBuildDriveCommandlineFromJSON; + virQEMUBuildLuksOpts; + virQEMUBuildObjectCommandlineFromJSON; + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index a3e838c..b33c39c 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -916,6 +916,34 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, + } + + ++static int ++qemuGetDriveSourceProps(virStorageSourcePtr src, ++ virJSONValuePtr *props) ++{ ++ int actualType = virStorageSourceGetActualType(src); ++ virJSONValuePtr fileprops = NULL; ++ ++ *props = NULL; ++ ++ switch ((virStorageType) actualType) { ++ case VIR_STORAGE_TYPE_BLOCK: ++ case VIR_STORAGE_TYPE_FILE: ++ case VIR_STORAGE_TYPE_DIR: ++ case VIR_STORAGE_TYPE_VOLUME: ++ case VIR_STORAGE_TYPE_NONE: ++ case VIR_STORAGE_TYPE_LAST: ++ case VIR_STORAGE_TYPE_NETWORK: ++ break; ++ } ++ ++ if (fileprops && ++ virJSONValueObjectCreate(props, "a:file", fileprops, NULL) < 0) ++ return -1; ++ ++ return 0; ++} ++ ++ + int + qemuGetDriveSourceString(virStorageSourcePtr src, + qemuDomainSecretInfoPtr secinfo, +@@ -1101,14 +1129,19 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo; + qemuDomainSecretInfoPtr encinfo = diskPriv->encinfo; ++ virJSONValuePtr srcprops = NULL; + char *source = NULL; + int ret = -1; + +- if (qemuGetDriveSourceString(disk->src, secinfo, &source) < 0) ++ if (qemuGetDriveSourceProps(disk->src, &srcprops) < 0) ++ goto cleanup; ++ ++ if (!srcprops && ++ qemuGetDriveSourceString(disk->src, secinfo, &source) < 0) + goto cleanup; + + /* nothing to format if the drive is empty */ +- if (!source || ++ if (!(source || srcprops) || + ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY || + disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) && + disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) { +@@ -1125,31 +1158,38 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, + goto cleanup; + } + +- virBufferAddLit(buf, "file="); ++ if (source) { ++ virBufferAddLit(buf, "file="); + +- /* for now the DIR based storage is handled by the magic FAT format */ +- if (actualType == VIR_STORAGE_TYPE_DIR) { +- if (disk->src->format > 0 && +- disk->src->format != VIR_STORAGE_FILE_FAT) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("unsupported disk driver type for '%s'"), +- virStorageFileFormatTypeToString(disk->src->format)); +- goto cleanup; ++ /* for now the DIR based storage is handled by the magic FAT format */ ++ if (actualType == VIR_STORAGE_TYPE_DIR) { ++ if (disk->src->format > 0 && ++ disk->src->format != VIR_STORAGE_FILE_FAT) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("unsupported disk driver type for '%s'"), ++ virStorageFileFormatTypeToString(disk->src->format)); ++ goto cleanup; ++ } ++ ++ if (!disk->src->readonly) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("cannot create virtual FAT disks in read-write mode")); ++ goto cleanup; ++ } ++ ++ virBufferAddLit(buf, "fat:"); ++ ++ if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) ++ virBufferAddLit(buf, "floppy:"); + } + +- if (!disk->src->readonly) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("cannot create virtual FAT disks in read-write mode")); ++ virQEMUBuildBufferEscapeComma(buf, source); ++ } else { ++ if (!(source = virQEMUBuildDriveCommandlineFromJSON(srcprops))) + goto cleanup; +- } + +- virBufferAddLit(buf, "fat:"); +- +- if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) +- virBufferAddLit(buf, "floppy:"); ++ virBufferAdd(buf, source, -1); + } +- +- virQEMUBuildBufferEscapeComma(buf, source); + virBufferAddLit(buf, ","); + + if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { +@@ -1170,6 +1210,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, + + cleanup: + VIR_FREE(source); ++ virJSONValueFree(srcprops); + return ret; + } + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 20410f7..a1ba562 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -264,6 +264,27 @@ virQEMUBuildObjectCommandlineFromJSON(const char *type, + } + + ++char * ++virQEMUBuildDriveCommandlineFromJSON(const virJSONValue *srcdef) ++{ ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ char *ret = NULL; ++ ++ if (virQEMUBuildCommandLineJSON(srcdef, &buf, ++ virQEMUBuildCommandLineJSONArrayNumbered) < 0) ++ goto cleanup; ++ ++ if (virBufferCheckError(&buf) < 0) ++ goto cleanup; ++ ++ ret = virBufferContentAndReset(&buf); ++ ++ cleanup: ++ virBufferFreeAndReset(&buf); ++ return ret; ++} ++ ++ + /** + * virQEMUBuildBufferEscapeComma: + * @buf: buffer to append the escaped string +diff --git a/src/util/virqemu.h b/src/util/virqemu.h +index 40cd9b8..f3c2b69 100644 +--- a/src/util/virqemu.h ++++ b/src/util/virqemu.h +@@ -47,6 +47,8 @@ char *virQEMUBuildObjectCommandlineFromJSON(const char *type, + const char *alias, + virJSONValuePtr props); + ++char *virQEMUBuildDriveCommandlineFromJSON(const virJSONValue *src); ++ + void virQEMUBuildBufferEscapeComma(virBufferPtr buf, const char *str); + void virQEMUBuildLuksOpts(virBufferPtr buf, + virStorageEncryptionInfoDefPtr enc, +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-command-Add-support-for-multi-host-gluster-disks.patch b/SOURCES/libvirt-qemu-command-Add-support-for-multi-host-gluster-disks.patch new file mode 100644 index 0000000..53b8547 --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Add-support-for-multi-host-gluster-disks.patch @@ -0,0 +1,215 @@ +From 4351bb2a4232883bccf4596a80ebeedb4bf8bd91 Mon Sep 17 00:00:00 2001 +Message-Id: <4351bb2a4232883bccf4596a80ebeedb4bf8bd91@dist-git> +From: Prasanna Kumar Kalever +Date: Tue, 2 Aug 2016 13:42:04 +0200 +Subject: [PATCH] qemu: command: Add support for multi-host gluster disks + +To allow using failover with gluster it's necessary to specify multiple +volume hosts. Add support for starting qemu with such configurations. + +Signed-off-by: Peter Krempa +(cherry picked from commit 7b7da9e28332517cfe47d5cf627aa9f7fd88aa3d) + +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + docs/formatdomain.html.in | 2 +- + src/qemu/qemu_command.c | 101 +++++++++++++++++++++ + .../qemuxml2argv-disk-drive-network-gluster.args | 9 +- + .../qemuxml2argv-disk-drive-network-gluster.xml | 9 ++ + .../qemuxml2xmlout-disk-drive-network-gluster.xml | 10 ++ + 5 files changed, 129 insertions(+), 2 deletions(-) + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index d206f6a..f006179 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -2280,7 +2280,7 @@ + + gluster + a server running glusterd daemon +- only one ++ one or more (Since 2.1.0), just one prior to that + 24007 + + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index b33c39c..88b5da1 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -689,6 +689,100 @@ qemuBuildRBDSecinfoURI(virBufferPtr buf, + + + #define QEMU_DEFAULT_NBD_PORT "10809" ++#define QEMU_DEFAULT_GLUSTER_PORT "24007" ++ ++/* builds the hosts array */ ++static virJSONValuePtr ++qemuBuildGlusterDriveJSONHosts(virStorageSourcePtr src) ++{ ++ virJSONValuePtr servers = NULL; ++ virJSONValuePtr server = NULL; ++ virJSONValuePtr ret = NULL; ++ virStorageNetHostDefPtr host; ++ const char *transport; ++ const char *portstr; ++ size_t i; ++ ++ if (!(servers = virJSONValueNewArray())) ++ goto cleanup; ++ ++ for (i = 0; i < src->nhosts; i++) { ++ host = src->hosts + i; ++ transport = virStorageNetHostTransportTypeToString(host->transport); ++ portstr = host->port; ++ ++ if (virJSONValueObjectCreate(&server, "s:type", transport, NULL) < 0) ++ goto cleanup; ++ ++ if (!portstr) ++ portstr = QEMU_DEFAULT_GLUSTER_PORT; ++ ++ switch ((virStorageNetHostTransport) host->transport) { ++ case VIR_STORAGE_NET_HOST_TRANS_TCP: ++ if (virJSONValueObjectAdd(server, ++ "s:host", host->name, ++ "s:port", portstr, ++ NULL) < 0) ++ goto cleanup; ++ break; ++ ++ case VIR_STORAGE_NET_HOST_TRANS_UNIX: ++ if (virJSONValueObjectAdd(server, ++ "s:socket", host->socket, ++ NULL) < 0) ++ goto cleanup; ++ break; ++ ++ case VIR_STORAGE_NET_HOST_TRANS_RDMA: ++ case VIR_STORAGE_NET_HOST_TRANS_LAST: ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("transport protocol '%s' is not yet supported"), ++ transport); ++ goto cleanup; ++ } ++ ++ if (virJSONValueArrayAppend(servers, server) < 0) ++ goto cleanup; ++ ++ server = NULL; ++ } ++ ++ ret = servers; ++ servers = NULL; ++ ++ cleanup: ++ virJSONValueFree(servers); ++ virJSONValueFree(server); ++ ++ return ret; ++} ++ ++ ++static virJSONValuePtr ++qemuBuildGlusterDriveJSON(virStorageSourcePtr src) ++{ ++ const char *protocol = virStorageNetProtocolTypeToString(src->protocol); ++ virJSONValuePtr servers = NULL; ++ virJSONValuePtr ret = NULL; ++ ++ if (!(servers = qemuBuildGlusterDriveJSONHosts(src))) ++ return NULL; ++ ++ /* { driver:"gluster", ++ * volume:"testvol", ++ * path:"/a.img", ++ * server :[{type:"tcp", host:"1.2.3.4", port:24007}, ++ * {type:"unix", socket:"/tmp/glusterd.socket"}, ...]} ++ */ ++ if (virJSONValueObjectCreate(&ret, ++ "s:driver", protocol, ++ "s:volume", src->volume, ++ "s:path", src->path, ++ "a:server", servers, NULL) < 0) ++ virJSONValueFree(servers); ++ ++ return ret; ++} + + + static char * +@@ -932,7 +1026,14 @@ qemuGetDriveSourceProps(virStorageSourcePtr src, + case VIR_STORAGE_TYPE_VOLUME: + case VIR_STORAGE_TYPE_NONE: + case VIR_STORAGE_TYPE_LAST: ++ break; ++ + case VIR_STORAGE_TYPE_NETWORK: ++ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_GLUSTER && ++ src->nhosts > 1) { ++ if (!(fileprops = qemuBuildGlusterDriveJSON(src))) ++ return -1; ++ } + break; + } + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args +index 7851dee..a7a1ae6 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.args +@@ -24,4 +24,11 @@ id=virtio-disk0 \ + -drive 'file=gluster+unix:///Volume2/Image?socket=/path/to/sock,format=raw,\ + if=none,id=drive-virtio-disk1' \ + -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk1,\ +-id=virtio-disk1 ++id=virtio-disk1 \ ++-drive file.driver=gluster,file.volume=Volume3,file.path=/Image.qcow2,\ ++file.server.0.type=tcp,file.server.0.host=example.org,file.server.0.port=6000,\ ++file.server.1.type=tcp,file.server.1.host=example.org,file.server.1.port=24007,\ ++file.server.2.type=unix,file.server.2.socket=/path/to/sock,format=qcow2,\ ++if=none,id=drive-virtio-disk2 \ ++-device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk2,\ ++id=virtio-disk2 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.xml +index 0c66e7f..ef30e8c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-gluster.xml +@@ -28,6 +28,15 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml +index 160fd9d..8e0add5 100644 +--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml +@@ -30,6 +30,16 @@ + +
+ ++ ++ ++ ++ ++ ++ ++ ++ ++
++ + +
+ +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-command-Add-support-for-sparse-vcpu-topologies.patch b/SOURCES/libvirt-qemu-command-Add-support-for-sparse-vcpu-topologies.patch new file mode 100644 index 0000000..10f2ff3 --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Add-support-for-sparse-vcpu-topologies.patch @@ -0,0 +1,475 @@ +From 5fde4ecb99989b91940f1b24a509adb47e3e0894 Mon Sep 17 00:00:00 2001 +Message-Id: <5fde4ecb99989b91940f1b24a509adb47e3e0894@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:37 -0400 +Subject: [PATCH] qemu: command: Add support for sparse vcpu topologies + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Add support for using the new approach to hotplug vcpus using device_add +during startup of qemu to allow sparse vcpu topologies. + +There are a few limitations imposed by qemu on the supported +configuration: +- vcpu0 needs to be always present and not hotpluggable +- non-hotpluggable cpus need to be ordered at the beginning +- order of the vcpus needs to be unique for every single hotpluggable + entity + +Qemu also doesn't really allow to query the information necessary to +start a VM with the vcpus directly on the commandline. Fortunately they +can be hotplugged during startup. + +The new hotplug code uses the following approach: +- non-hotpluggable vcpus are counted and put to the -smp option +- qemu is started +- qemu is queried for the necessary information +- the configuration is checked +- the hotpluggable vcpus are hotplugged +- vcpus are started + +This patch adds a lot of checking code and enables the support to +specify the individual vcpu element with qemu. + +(cherry picked from commit 9eb9106ea51b43102ee51132f69780b2c86ccbca) +--- + docs/formatdomain.html.in | 5 + + src/qemu/qemu_command.c | 20 ++- + src/qemu/qemu_domain.c | 76 ++++++++- + src/qemu/qemu_process.c | 178 +++++++++++++++++++++ + .../qemuxml2argv-cpu-hotplug-startup.args | 20 +++ + .../qemuxml2argv-cpu-hotplug-startup.xml | 29 ++++ + tests/qemuxml2argvtest.c | 2 + + 7 files changed, 325 insertions(+), 5 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index 252f91c..a838bff 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -580,6 +580,11 @@ + Note that providing state for individual cpus may be necessary to enable + support of addressable vCPU hotplug and this feature may not be + supported by all hypervisors. ++ ++ For QEMU the following conditions are required. Vcpu 0 needs to be ++ enabled and non-hotpluggable. On PPC64 along with it vcpus that are in ++ the same core need to be enabled as well. All non-hotpluggable cpus ++ present at boot need to be grouped after vcpu 0. + Since 2.2.0 (QEMU only) +
+ +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 95055c4..e292f48 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -7109,17 +7109,29 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + + static int + qemuBuildSmpCommandLine(virCommandPtr cmd, +- const virDomainDef *def) ++ virDomainDefPtr def) + { + char *smp; + virBuffer buf = VIR_BUFFER_INITIALIZER; ++ unsigned int maxvcpus = virDomainDefGetVcpusMax(def); ++ unsigned int nvcpus = 0; ++ virDomainVcpuDefPtr vcpu; ++ size_t i; ++ ++ /* count non-hotpluggable enabled vcpus. Hotpluggable ones will be added ++ * in a different way */ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ if (vcpu->online && vcpu->hotpluggable == VIR_TRISTATE_BOOL_NO) ++ nvcpus++; ++ } + + virCommandAddArg(cmd, "-smp"); + +- virBufferAsprintf(&buf, "%u", virDomainDefGetVcpus(def)); ++ virBufferAsprintf(&buf, "%u", nvcpus); + +- if (virDomainDefHasVcpusOffline(def)) +- virBufferAsprintf(&buf, ",maxcpus=%u", virDomainDefGetVcpusMax(def)); ++ if (nvcpus != maxvcpus) ++ virBufferAsprintf(&buf, ",maxcpus=%u", maxvcpus); + /* sockets, cores, and threads are either all zero + * or all non-zero, thus checking one of them is enough */ + if (def->cpu && def->cpu->sockets) { +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 959b551..8eb6e51 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -2247,6 +2247,76 @@ qemuDomainRecheckInternalPaths(virDomainDefPtr def, + + + static int ++qemuDomainDefVcpusPostParse(virDomainDefPtr def) ++{ ++ unsigned int maxvcpus = virDomainDefGetVcpusMax(def); ++ virDomainVcpuDefPtr vcpu; ++ virDomainVcpuDefPtr prevvcpu; ++ size_t i; ++ bool has_order = false; ++ ++ /* vcpu 0 needs to be present, first, and non-hotpluggable */ ++ vcpu = virDomainDefGetVcpu(def, 0); ++ if (!vcpu->online) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("vcpu 0 can't be offline")); ++ return -1; ++ } ++ if (vcpu->hotpluggable == VIR_TRISTATE_BOOL_YES) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("vcpu0 can't be hotpluggable")); ++ return -1; ++ } ++ if (vcpu->order != 0 && vcpu->order != 1) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("vcpu0 must be enabled first")); ++ return -1; ++ } ++ ++ if (vcpu->order != 0) ++ has_order = true; ++ ++ prevvcpu = vcpu; ++ ++ /* all online vcpus or non online vcpu need to have order set */ ++ for (i = 1; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ ++ if (vcpu->online && ++ (vcpu->order != 0) != has_order) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("all vcpus must have either set or unset order")); ++ return -1; ++ } ++ ++ /* few conditions for non-hotpluggable (thus online) vcpus */ ++ if (vcpu->hotpluggable == VIR_TRISTATE_BOOL_NO) { ++ /* they can be ordered only at the beginning */ ++ if (prevvcpu->hotpluggable == VIR_TRISTATE_BOOL_YES) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("online non-hotpluggable vcpus need to be " ++ "ordered prior to hotplugable vcpus")); ++ return -1; ++ } ++ ++ /* they need to be in order (qemu doesn't support any order yet). ++ * Also note that multiple vcpus may share order on some platforms */ ++ if (prevvcpu->order > vcpu->order) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("online non-hotpluggable vcpus must be ordered " ++ "in ascending order")); ++ return -1; ++ } ++ } ++ ++ prevvcpu = vcpu; ++ } ++ ++ return 0; ++} ++ ++ ++static int + qemuDomainDefPostParse(virDomainDefPtr def, + virCapsPtr caps, + unsigned int parseFlags, +@@ -2301,6 +2371,9 @@ qemuDomainDefPostParse(virDomainDefPtr def, + if (virSecurityManagerVerify(driver->securityManager, def) < 0) + goto cleanup; + ++ if (qemuDomainDefVcpusPostParse(def) < 0) ++ goto cleanup; ++ + ret = 0; + cleanup: + virObjectUnref(qemuCaps); +@@ -2670,7 +2743,8 @@ virDomainDefParserConfig virQEMUDriverDomainDefParserConfig = { + .deviceValidateCallback = qemuDomainDeviceDefValidate, + + .features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG | +- VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN ++ VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN | ++ VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS, + }; + + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index c94eed4..2eac422 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -4719,6 +4719,172 @@ qemuProcessSetupIOThreads(virDomainObjPtr vm) + } + + ++static int ++qemuProcessValidateHotpluggableVcpus(virDomainDefPtr def) ++{ ++ virDomainVcpuDefPtr vcpu; ++ virDomainVcpuDefPtr subvcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ unsigned int maxvcpus = virDomainDefGetVcpusMax(def); ++ size_t i = 0; ++ size_t j; ++ virBitmapPtr ordermap = NULL; ++ int ret = -1; ++ ++ if (!(ordermap = virBitmapNew(maxvcpus))) ++ goto cleanup; ++ ++ /* validate: ++ * - all hotpluggable entities to be hotplugged have the correct data ++ * - vcpus belonging to a hotpluggable entity share configuration ++ * - order of the hotpluggable entities is unique ++ */ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ /* skip over hotpluggable entities */ ++ if (vcpupriv->vcpus == 0) ++ continue; ++ ++ if (vcpu->order != 0) { ++ if (virBitmapIsBitSet(ordermap, vcpu->order - 1)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("duplicate vcpu order '%u'"), vcpu->order - 1); ++ goto cleanup; ++ } ++ ++ ignore_value(virBitmapSetBit(ordermap, vcpu->order - 1)); ++ } ++ ++ ++ for (j = i + 1; j < (i + vcpupriv->vcpus); j++) { ++ subvcpu = virDomainDefGetVcpu(def, j); ++ if (subvcpu->hotpluggable != vcpu->hotpluggable || ++ subvcpu->online != vcpu->online || ++ subvcpu->order != vcpu->order) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("vcpus '%zu' and '%zu' are in the same hotplug " ++ "group but differ in configuration"), i, j); ++ goto cleanup; ++ } ++ } ++ ++ if (vcpu->online && vcpu->hotpluggable == VIR_TRISTATE_BOOL_YES) { ++ if ((vcpupriv->socket_id == -1 && vcpupriv->core_id == -1 && ++ vcpupriv->thread_id == -1) || ++ !vcpupriv->type) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("vcpu '%zu' is missing hotplug data"), i); ++ goto cleanup; ++ } ++ } ++ } ++ ++ ret = 0; ++ cleanup: ++ virBitmapFree(ordermap); ++ return ret; ++} ++ ++ ++static int ++qemuDomainHasHotpluggableStartupVcpus(virDomainDefPtr def) ++{ ++ size_t maxvcpus = virDomainDefGetVcpusMax(def); ++ virDomainVcpuDefPtr vcpu; ++ size_t i; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ ++ if (vcpu->online && vcpu->hotpluggable == VIR_TRISTATE_BOOL_YES) ++ return true; ++ } ++ ++ return false; ++} ++ ++ ++static int ++qemuProcessVcpusSortOrder(const void *a, ++ const void *b) ++{ ++ virDomainVcpuDefPtr vcpua = *((virDomainVcpuDefPtr *)a); ++ virDomainVcpuDefPtr vcpub = *((virDomainVcpuDefPtr *)b); ++ ++ return vcpua->order - vcpub->order; ++} ++ ++ ++static int ++qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ qemuDomainAsyncJob asyncJob) ++{ ++ unsigned int maxvcpus = virDomainDefGetVcpusMax(vm->def); ++ virDomainVcpuDefPtr vcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ virJSONValuePtr vcpuprops = NULL; ++ size_t i; ++ int ret = -1; ++ int rc; ++ ++ virDomainVcpuDefPtr *bootHotplug = NULL; ++ size_t nbootHotplug = 0; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(vm->def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ if (vcpu->hotpluggable == VIR_TRISTATE_BOOL_YES && vcpu->online && ++ vcpupriv->vcpus != 0) { ++ if (virAsprintf(&vcpupriv->alias, "vcpu%zu", i) < 0) ++ goto cleanup; ++ ++ if (VIR_APPEND_ELEMENT(bootHotplug, nbootHotplug, vcpu) < 0) ++ goto cleanup; ++ } ++ } ++ ++ if (nbootHotplug == 0) { ++ ret = 0; ++ goto cleanup; ++ } ++ ++ qsort(bootHotplug, nbootHotplug, sizeof(*bootHotplug), ++ qemuProcessVcpusSortOrder); ++ ++ for (i = 0; i < nbootHotplug; i++) { ++ vcpu = bootHotplug[i]; ++ ++ if (!(vcpuprops = qemuBuildHotpluggableCPUProps(vcpu))) ++ goto cleanup; ++ ++ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) ++ goto cleanup; ++ ++ rc = qemuMonitorAddDeviceArgs(qemuDomainGetMonitor(vm), vcpuprops); ++ vcpuprops = NULL; ++ ++ if (qemuDomainObjExitMonitor(driver, vm) < 0) ++ goto cleanup; ++ ++ if (rc < 0) ++ goto cleanup; ++ ++ virJSONValueFree(vcpuprops); ++ } ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(bootHotplug); ++ virJSONValueFree(vcpuprops); ++ return ret; ++} ++ ++ + /** + * qemuProcessPrepareDomain + * +@@ -5195,6 +5361,18 @@ qemuProcessLaunch(virConnectPtr conn, + if (qemuSetupCpusetMems(vm) < 0) + goto cleanup; + ++ VIR_DEBUG("setting up hotpluggable cpus"); ++ if (qemuDomainHasHotpluggableStartupVcpus(vm->def)) { ++ if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob, false) < 0) ++ goto cleanup; ++ ++ if (qemuProcessValidateHotpluggableVcpus(vm->def) < 0) ++ goto cleanup; ++ ++ if (qemuProcessSetupHotpluggableVcpus(driver, vm, asyncJob) < 0) ++ goto cleanup; ++ } ++ + VIR_DEBUG("Refreshing VCPU info"); + if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob, false) < 0) + goto cleanup; +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.args +new file mode 100644 +index 0000000..035f250 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.args +@@ -0,0 +1,20 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-m 214 \ ++-smp 1,maxcpus=6,sockets=3,cores=2,threads=1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot n \ ++-usb \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.xml +new file mode 100644 +index 0000000..58718aa +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-hotplug-startup.xml +@@ -0,0 +1,29 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 6 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index a9a3e6b..9de2f94 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -2102,6 +2102,8 @@ mymain(void) + DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_INTEL_IOMMU); + ++ DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS); ++ + qemuTestDriverFree(&driver); + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-command-Align-memory-sizes-only-on-fresh-starts.patch b/SOURCES/libvirt-qemu-command-Align-memory-sizes-only-on-fresh-starts.patch deleted file mode 100644 index f83cbd7..0000000 --- a/SOURCES/libvirt-qemu-command-Align-memory-sizes-only-on-fresh-starts.patch +++ /dev/null @@ -1,50 +0,0 @@ -From f03a1cb15b60d56f8f85bcd4a9823aac68682d56 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:46 +0200 -Subject: [PATCH] qemu: command: Align memory sizes only on fresh starts - -When we are starting a qemu process for an incomming migration or -snapshot reloading we should not modify the memory sizes in the domain -since we could potentially change the guest ABI that was tediously -checked before. Additionally the function now updates the initial memory -size according to the NUMA node size, which should not happen if we are -restoring state. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1252685 -(cherry picked from commit c7d7ba85a6242d789ba3f4dae313e950fbb638c5) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 3 ++- - tests/qemuxml2argvdata/qemuxml2argv-restore-v1.args | 2 +- - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 701ccc3..6314976 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -9040,7 +9040,8 @@ qemuBuildCommandLine(virConnectPtr conn, - if (qemuBuildDomainLoaderCommandLine(cmd, def, qemuCaps) < 0) - goto error; - -- if (qemuDomainAlignMemorySizes(def) < 0) -+ if (!migrateFrom && !snapshot && -+ qemuDomainAlignMemorySizes(def) < 0) - goto error; - - virCommandAddArg(cmd, "-m"); -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-restore-v1.args b/tests/qemuxml2argvdata/qemuxml2argv-restore-v1.args -index 5c67702..458c015 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-restore-v1.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-restore-v1.args -@@ -1,5 +1,5 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M \ --pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait \ -+pc -m 213 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait \ - -no-acpi -boot c -usb -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel \ - none -incoming stdio --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-command-Extract-drive-source-command-line-formatter.patch b/SOURCES/libvirt-qemu-command-Extract-drive-source-command-line-formatter.patch new file mode 100644 index 0000000..01d66d4 --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Extract-drive-source-command-line-formatter.patch @@ -0,0 +1,211 @@ +From 74ff94fbfdf3ab656fa5a124dd4c7254167cf181 Mon Sep 17 00:00:00 2001 +Message-Id: <74ff94fbfdf3ab656fa5a124dd4c7254167cf181@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:59 +0200 +Subject: [PATCH] qemu: command: Extract drive source command line formatter + +The disk source formatting code grew rather ugly and complex and it will +get worse. Extract it into a separated function to contain the mess. + +(cherry picked from commit 3678d42705b76e8e47012cf0b8e23053598a2f5e) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/qemu/qemu_command.c | 159 ++++++++++++++++++++++++++---------------------- + 1 file changed, 87 insertions(+), 72 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 32f8384..bb40832 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1093,6 +1093,92 @@ qemuDiskBusNeedsDeviceArg(int bus) + } + + ++static int ++qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, ++ virBufferPtr buf) ++{ ++ int actualType = virStorageSourceGetActualType(disk->src); ++ qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); ++ qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo; ++ qemuDomainSecretInfoPtr encinfo = diskPriv->encinfo; ++ char *source = NULL; ++ int ret = -1; ++ ++ if (qemuGetDriveSourceString(disk->src, secinfo, &source) < 0) ++ goto cleanup; ++ ++ if (source && ++ !((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY || ++ disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) && ++ disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) { ++ ++ virBufferAddLit(buf, "file="); ++ ++ switch (actualType) { ++ case VIR_STORAGE_TYPE_DIR: ++ /* QEMU only supports magic FAT format for now */ ++ if (disk->src->format > 0 && ++ disk->src->format != VIR_STORAGE_FILE_FAT) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("unsupported disk driver type for '%s'"), ++ virStorageFileFormatTypeToString(disk->src->format)); ++ goto cleanup; ++ } ++ ++ if (!disk->src->readonly) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("cannot create virtual FAT disks in read-write mode")); ++ goto cleanup; ++ } ++ ++ virBufferAddLit(buf, "fat:"); ++ ++ if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) ++ virBufferAddLit(buf, "floppy:"); ++ ++ break; ++ ++ case VIR_STORAGE_TYPE_BLOCK: ++ if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ disk->src->type == VIR_STORAGE_TYPE_VOLUME ? ++ _("tray status 'open' is invalid for block type volume") : ++ _("tray status 'open' is invalid for block type disk")); ++ goto cleanup; ++ } ++ ++ break; ++ ++ default: ++ break; ++ } ++ ++ virQEMUBuildBufferEscapeComma(buf, source); ++ virBufferAddLit(buf, ","); ++ ++ if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { ++ virBufferAsprintf(buf, "password-secret=%s,", ++ secinfo->s.aes.alias); ++ } ++ ++ if (encinfo) ++ virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo, ++ encinfo->s.aes.alias); ++ ++ if (disk->src->format > 0 && ++ disk->src->type != VIR_STORAGE_TYPE_DIR) ++ virBufferAsprintf(buf, "format=%s,", ++ virStorageFileFormatTypeToString(disk->src->format)); ++ } ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(source); ++ return ret; ++} ++ ++ + char * + qemuBuildDriveStr(virDomainDiskDefPtr disk, + bool bootable, +@@ -1104,11 +1190,6 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, + virDomainDiskGeometryTransTypeToString(disk->geometry.trans); + int idx = virDiskNameToIndex(disk->dst); + int busid = -1, unitid = -1; +- char *source = NULL; +- int actualType = virStorageSourceGetActualType(disk->src); +- qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); +- qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo; +- qemuDomainSecretInfoPtr encinfo = diskPriv->encinfo; + bool emitDeviceSyntax = qemuDiskBusNeedsDeviceArg(disk->bus); + + if (idx < 0) { +@@ -1191,74 +1272,9 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, + break; + } + +- if (qemuGetDriveSourceString(disk->src, secinfo, &source) < 0) ++ if (qemuBuildDriveSourceStr(disk, &opt) < 0) + goto error; + +- if (source && +- !((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY || +- disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) && +- disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) { +- +- virBufferAddLit(&opt, "file="); +- +- switch (actualType) { +- case VIR_STORAGE_TYPE_DIR: +- /* QEMU only supports magic FAT format for now */ +- if (disk->src->format > 0 && +- disk->src->format != VIR_STORAGE_FILE_FAT) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("unsupported disk driver type for '%s'"), +- virStorageFileFormatTypeToString(disk->src->format)); +- goto error; +- } +- +- if (!disk->src->readonly) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("cannot create virtual FAT disks in read-write mode")); +- goto error; +- } +- +- virBufferAddLit(&opt, "fat:"); +- +- if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) +- virBufferAddLit(&opt, "floppy:"); +- +- break; +- +- case VIR_STORAGE_TYPE_BLOCK: +- if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- disk->src->type == VIR_STORAGE_TYPE_VOLUME ? +- _("tray status 'open' is invalid for block type volume") : +- _("tray status 'open' is invalid for block type disk")); +- goto error; +- } +- +- break; +- +- default: +- break; +- } +- +- virQEMUBuildBufferEscapeComma(&opt, source); +- virBufferAddLit(&opt, ","); +- +- if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { +- virBufferAsprintf(&opt, "password-secret=%s,", +- secinfo->s.aes.alias); +- } +- +- if (encinfo) +- virQEMUBuildLuksOpts(&opt, &disk->src->encryption->encinfo, +- encinfo->s.aes.alias); +- +- if (disk->src->format > 0 && +- disk->src->type != VIR_STORAGE_TYPE_DIR) +- virBufferAsprintf(&opt, "format=%s,", +- virStorageFileFormatTypeToString(disk->src->format)); +- } +- VIR_FREE(source); +- + if (emitDeviceSyntax) + virBufferAddLit(&opt, "if=none"); + else +@@ -1581,7 +1597,6 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, + return virBufferContentAndReset(&opt); + + error: +- VIR_FREE(source); + virBufferFreeAndReset(&opt); + return NULL; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-command-Refactor-code-extracted-to-qemuBuildDriveSourceStr.patch b/SOURCES/libvirt-qemu-command-Refactor-code-extracted-to-qemuBuildDriveSourceStr.patch new file mode 100644 index 0000000..56c49cd --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Refactor-code-extracted-to-qemuBuildDriveSourceStr.patch @@ -0,0 +1,151 @@ +From 6dda778b55b7508e626635fa67d8f727167a8bed Mon Sep 17 00:00:00 2001 +Message-Id: <6dda778b55b7508e626635fa67d8f727167a8bed@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:42:00 +0200 +Subject: [PATCH] qemu: command: Refactor code extracted to + qemuBuildDriveSourceStr + +Avoid a large block by tweaking the condition skipping empty drives and +split up the switch containing two branches having different purpose. + +(cherry picked from commit 1575f3e8d32b6049ec399cfb54ab36f4d0a0cb00) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/qemu/qemu_command.c | 119 +++++++++++++++++++++++------------------------- + 1 file changed, 57 insertions(+), 62 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index bb40832..a3e838c 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1107,70 +1107,65 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, + if (qemuGetDriveSourceString(disk->src, secinfo, &source) < 0) + goto cleanup; + +- if (source && +- !((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY || +- disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) && +- disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) { +- +- virBufferAddLit(buf, "file="); +- +- switch (actualType) { +- case VIR_STORAGE_TYPE_DIR: +- /* QEMU only supports magic FAT format for now */ +- if (disk->src->format > 0 && +- disk->src->format != VIR_STORAGE_FILE_FAT) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("unsupported disk driver type for '%s'"), +- virStorageFileFormatTypeToString(disk->src->format)); +- goto cleanup; +- } +- +- if (!disk->src->readonly) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("cannot create virtual FAT disks in read-write mode")); +- goto cleanup; +- } +- +- virBufferAddLit(buf, "fat:"); +- +- if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) +- virBufferAddLit(buf, "floppy:"); +- +- break; +- +- case VIR_STORAGE_TYPE_BLOCK: +- if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- disk->src->type == VIR_STORAGE_TYPE_VOLUME ? +- _("tray status 'open' is invalid for block type volume") : +- _("tray status 'open' is invalid for block type disk")); +- goto cleanup; +- } +- +- break; +- +- default: +- break; +- } +- +- virQEMUBuildBufferEscapeComma(buf, source); +- virBufferAddLit(buf, ","); +- +- if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { +- virBufferAsprintf(buf, "password-secret=%s,", +- secinfo->s.aes.alias); +- } +- +- if (encinfo) +- virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo, +- encinfo->s.aes.alias); +- +- if (disk->src->format > 0 && +- disk->src->type != VIR_STORAGE_TYPE_DIR) +- virBufferAsprintf(buf, "format=%s,", +- virStorageFileFormatTypeToString(disk->src->format)); ++ /* nothing to format if the drive is empty */ ++ if (!source || ++ ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY || ++ disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) && ++ disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) { ++ ret = 0; ++ goto cleanup; + } + ++ if (actualType == VIR_STORAGE_TYPE_BLOCK && ++ disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ disk->src->type == VIR_STORAGE_TYPE_VOLUME ? ++ _("tray status 'open' is invalid for block type volume") : ++ _("tray status 'open' is invalid for block type disk")); ++ goto cleanup; ++ } ++ ++ virBufferAddLit(buf, "file="); ++ ++ /* for now the DIR based storage is handled by the magic FAT format */ ++ if (actualType == VIR_STORAGE_TYPE_DIR) { ++ if (disk->src->format > 0 && ++ disk->src->format != VIR_STORAGE_FILE_FAT) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("unsupported disk driver type for '%s'"), ++ virStorageFileFormatTypeToString(disk->src->format)); ++ goto cleanup; ++ } ++ ++ if (!disk->src->readonly) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("cannot create virtual FAT disks in read-write mode")); ++ goto cleanup; ++ } ++ ++ virBufferAddLit(buf, "fat:"); ++ ++ if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) ++ virBufferAddLit(buf, "floppy:"); ++ } ++ ++ virQEMUBuildBufferEscapeComma(buf, source); ++ virBufferAddLit(buf, ","); ++ ++ if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) { ++ virBufferAsprintf(buf, "password-secret=%s,", ++ secinfo->s.aes.alias); ++ } ++ ++ if (encinfo) ++ virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo, ++ encinfo->s.aes.alias); ++ ++ if (disk->src->format > 0 && ++ disk->src->type != VIR_STORAGE_TYPE_DIR) ++ virBufferAsprintf(buf, "format=%s,", ++ virStorageFileFormatTypeToString(disk->src->format)); ++ + ret = 0; + + cleanup: +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-command-Rename-qemuBuildNetworkDriveURI-to-qemuBuildNetworkDriveStr.patch b/SOURCES/libvirt-qemu-command-Rename-qemuBuildNetworkDriveURI-to-qemuBuildNetworkDriveStr.patch new file mode 100644 index 0000000..c68c054 --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Rename-qemuBuildNetworkDriveURI-to-qemuBuildNetworkDriveStr.patch @@ -0,0 +1,49 @@ +From ee944bdbf3422b4f6d0a4a2f7c7edc9b022a8bc2 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:57 +0200 +Subject: [PATCH] qemu: command: Rename qemuBuildNetworkDriveURI to + qemuBuildNetworkDriveStr + +The function builds also non-uri strings for the various protocols. + +(cherry picked from commit b8dc04a7742c2ebabf6922ac510389945ca0404b) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/qemu/qemu_command.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 9ac90f7..b691743 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -691,7 +691,7 @@ qemuBuildRBDSecinfoURI(virBufferPtr buf, + #define QEMU_DEFAULT_NBD_PORT "10809" + + static char * +-qemuBuildNetworkDriveURI(virStorageSourcePtr src, ++qemuBuildNetworkDriveStr(virStorageSourcePtr src, + qemuDomainSecretInfoPtr secinfo) + { + char *ret = NULL; +@@ -926,7 +926,7 @@ qemuGetDriveSourceString(virStorageSourcePtr src, + break; + + case VIR_STORAGE_TYPE_NETWORK: +- if (!(*source = qemuBuildNetworkDriveURI(src, secinfo))) ++ if (!(*source = qemuBuildNetworkDriveStr(src, secinfo))) + goto cleanup; + break; + +@@ -4533,7 +4533,7 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev) + src.nhosts = iscsisrc->nhosts; + + /* Rather than pull what we think we want - use the network disk code */ +- source = qemuBuildNetworkDriveURI(&src, hostdevPriv->secinfo); ++ source = qemuBuildNetworkDriveStr(&src, hostdevPriv->secinfo); + + return source; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-command-Split-out-network-disk-URI-building.patch b/SOURCES/libvirt-qemu-command-Split-out-network-disk-URI-building.patch new file mode 100644 index 0000000..29c7af7 --- /dev/null +++ b/SOURCES/libvirt-qemu-command-Split-out-network-disk-URI-building.patch @@ -0,0 +1,179 @@ +From 16c4218bf97f70a5f9e66fef4fda18126fc05653 Mon Sep 17 00:00:00 2001 +Message-Id: <16c4218bf97f70a5f9e66fef4fda18126fc05653@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:58 +0200 +Subject: [PATCH] qemu: command: Split out network disk URI building + +Extract the code so that it can be called from multiple places. This +also removes a tricky fallthrough in the large switch in +qemuBuildNetworkDriveStr. + +(cherry picked from commit ccaaad62a8b0ffb48d91ad572933a1c605465242) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/qemu/qemu_command.c | 122 +++++++++++++++++++++++++++--------------------- + 1 file changed, 68 insertions(+), 54 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index b691743..32f8384 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -690,13 +690,76 @@ qemuBuildRBDSecinfoURI(virBufferPtr buf, + + #define QEMU_DEFAULT_NBD_PORT "10809" + ++ ++static char * ++qemuBuildNetworkDriveURI(virStorageSourcePtr src, ++ qemuDomainSecretInfoPtr secinfo) ++{ ++ virURIPtr uri = NULL; ++ char *ret = NULL; ++ ++ if (src->nhosts != 1) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("protocol '%s' accepts only one host"), ++ virStorageNetProtocolTypeToString(src->protocol)); ++ goto cleanup; ++ } ++ ++ if (VIR_ALLOC(uri) < 0) ++ goto cleanup; ++ ++ if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) { ++ if (VIR_STRDUP(uri->scheme, ++ virStorageNetProtocolTypeToString(src->protocol)) < 0) ++ goto cleanup; ++ } else { ++ if (virAsprintf(&uri->scheme, "%s+%s", ++ virStorageNetProtocolTypeToString(src->protocol), ++ virStorageNetHostTransportTypeToString(src->hosts->transport)) < 0) ++ goto cleanup; ++ } ++ ++ if ((uri->port = qemuNetworkDriveGetPort(src->protocol, ++ src->hosts->port)) < 0) ++ goto cleanup; ++ ++ if (src->path) { ++ if (src->volume) { ++ if (virAsprintf(&uri->path, "/%s%s", ++ src->volume, src->path) < 0) ++ goto cleanup; ++ } else { ++ if (virAsprintf(&uri->path, "%s%s", ++ src->path[0] == '/' ? "" : "/", ++ src->path) < 0) ++ goto cleanup; ++ } ++ } ++ ++ if (src->hosts->socket && ++ virAsprintf(&uri->query, "socket=%s", src->hosts->socket) < 0) ++ goto cleanup; ++ ++ if (qemuBuildGeneralSecinfoURI(uri, secinfo) < 0) ++ goto cleanup; ++ ++ if (VIR_STRDUP(uri->server, src->hosts->name) < 0) ++ goto cleanup; ++ ++ ret = virURIFormat(uri); ++ ++ cleanup: ++ virURIFree(uri); ++ return ret; ++} ++ ++ + static char * + qemuBuildNetworkDriveStr(virStorageSourcePtr src, + qemuDomainSecretInfoPtr secinfo) + { + char *ret = NULL; + virBuffer buf = VIR_BUFFER_INITIALIZER; +- virURIPtr uri = NULL; + size_t i; + + switch ((virStorageNetProtocol) src->protocol) { +@@ -752,8 +815,9 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, + ret = virBufferContentAndReset(&buf); + goto cleanup; + } +- /* fallthrough */ +- /* NBD code uses same formatting scheme as others in some cases */ ++ /* NBD code uses URI formatting scheme as others in some cases */ ++ ret = qemuBuildNetworkDriveURI(src, secinfo); ++ break; + + case VIR_STORAGE_NET_PROTOCOL_HTTP: + case VIR_STORAGE_NET_PROTOCOL_HTTPS: +@@ -762,56 +826,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, + case VIR_STORAGE_NET_PROTOCOL_TFTP: + case VIR_STORAGE_NET_PROTOCOL_ISCSI: + case VIR_STORAGE_NET_PROTOCOL_GLUSTER: +- if (src->nhosts != 1) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("protocol '%s' accepts only one host"), +- virStorageNetProtocolTypeToString(src->protocol)); +- goto cleanup; +- } +- +- if (VIR_ALLOC(uri) < 0) +- goto cleanup; +- +- if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) { +- if (VIR_STRDUP(uri->scheme, +- virStorageNetProtocolTypeToString(src->protocol)) < 0) +- goto cleanup; +- } else { +- if (virAsprintf(&uri->scheme, "%s+%s", +- virStorageNetProtocolTypeToString(src->protocol), +- virStorageNetHostTransportTypeToString(src->hosts->transport)) < 0) +- goto cleanup; +- } +- +- if ((uri->port = qemuNetworkDriveGetPort(src->protocol, +- src->hosts->port)) < 0) +- goto cleanup; +- +- if (src->path) { +- if (src->volume) { +- if (virAsprintf(&uri->path, "/%s%s", +- src->volume, src->path) < 0) +- goto cleanup; +- } else { +- if (virAsprintf(&uri->path, "%s%s", +- src->path[0] == '/' ? "" : "/", +- src->path) < 0) +- goto cleanup; +- } +- } +- +- if (src->hosts->socket && +- virAsprintf(&uri->query, "socket=%s", src->hosts->socket) < 0) +- goto cleanup; +- +- if (qemuBuildGeneralSecinfoURI(uri, secinfo) < 0) +- goto cleanup; +- +- if (VIR_STRDUP(uri->server, src->hosts->name) < 0) +- goto cleanup; +- +- ret = virURIFormat(uri); +- ++ ret = qemuBuildNetworkDriveURI(src, secinfo); + break; + + case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: +@@ -896,7 +911,6 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, + + cleanup: + virBufferFreeAndReset(&buf); +- virURIFree(uri); + + return ret; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-domain-Add-vcpu-private-data-structure.patch b/SOURCES/libvirt-qemu-domain-Add-vcpu-private-data-structure.patch new file mode 100644 index 0000000..b89d225 --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Add-vcpu-private-data-structure.patch @@ -0,0 +1,103 @@ +From ca46f81dba9a8f4619d43e0c3ba96092b4536086 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:49 -0400 +Subject: [PATCH] qemu: domain: Add vcpu private data structure + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Members will be added in follow-up patches. + +(cherry picked from commit 2540c932036ba2f8fcb64b6d0509f739f18a67b4) +--- + src/qemu/qemu_domain.c | 41 +++++++++++++++++++++++++++++++++++++++++ + src/qemu/qemu_domain.h | 13 +++++++++++++ + 2 files changed, 54 insertions(+) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index cc726dc..c213a9f 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -813,6 +813,46 @@ qemuDomainHostdevPrivateDispose(void *obj) + } + + ++static virClassPtr qemuDomainVcpuPrivateClass; ++static void qemuDomainVcpuPrivateDispose(void *obj); ++ ++static int ++qemuDomainVcpuPrivateOnceInit(void) ++{ ++ qemuDomainVcpuPrivateClass = virClassNew(virClassForObject(), ++ "qemuDomainVcpuPrivate", ++ sizeof(qemuDomainVcpuPrivate), ++ qemuDomainVcpuPrivateDispose); ++ if (!qemuDomainVcpuPrivateClass) ++ return -1; ++ else ++ return 0; ++} ++ ++VIR_ONCE_GLOBAL_INIT(qemuDomainVcpuPrivate) ++ ++static virObjectPtr ++qemuDomainVcpuPrivateNew(void) ++{ ++ qemuDomainVcpuPrivatePtr priv; ++ ++ if (qemuDomainVcpuPrivateInitialize() < 0) ++ return NULL; ++ ++ if (!(priv = virObjectNew(qemuDomainVcpuPrivateClass))) ++ return NULL; ++ ++ return (virObjectPtr) priv; ++} ++ ++ ++static void ++qemuDomainVcpuPrivateDispose(void *obj ATTRIBUTE_UNUSED) ++{ ++ return; ++} ++ ++ + /* qemuDomainSecretPlainSetup: + * @conn: Pointer to connection + * @secinfo: Pointer to secret info +@@ -1668,6 +1708,7 @@ virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks = { + .alloc = qemuDomainObjPrivateAlloc, + .free = qemuDomainObjPrivateFree, + .diskNew = qemuDomainDiskPrivateNew, ++ .vcpuNew = qemuDomainVcpuPrivateNew, + .hostdevNew = qemuDomainHostdevPrivateNew, + .parse = qemuDomainObjPrivateXMLParse, + .format = qemuDomainObjPrivateXMLFormat, +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index 888732a..32433cf 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -313,6 +313,19 @@ struct _qemuDomainDiskPrivate { + # define QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev) \ + ((qemuDomainHostdevPrivatePtr) (hostdev)->privateData) + ++ ++typedef struct _qemuDomainVcpuPrivate qemuDomainVcpuPrivate; ++typedef qemuDomainVcpuPrivate *qemuDomainVcpuPrivatePtr; ++struct _qemuDomainVcpuPrivate { ++ virObject parent; ++ ++ int dummy; ++}; ++ ++# define QEMU_DOMAIN_VCPU_PRIVATE(vcpu) \ ++ ((qemuDomainVcpuPrivatePtr) (vcpu)->privateData) ++ ++ + struct qemuDomainDiskInfo { + bool removable; + bool locked; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Don-t-infer-vcpu-state.patch b/SOURCES/libvirt-qemu-domain-Don-t-infer-vcpu-state.patch new file mode 100644 index 0000000..4ea9565 --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Don-t-infer-vcpu-state.patch @@ -0,0 +1,46 @@ +From 8f16d3dc1ba4ab8a1d057a45ab972f8c1abd7cda Mon Sep 17 00:00:00 2001 +Message-Id: <8f16d3dc1ba4ab8a1d057a45ab972f8c1abd7cda@dist-git> +From: Peter Krempa +Date: Wed, 14 Sep 2016 13:04:23 +0200 +Subject: [PATCH] qemu: domain: Don't infer vcpu state + +Use the state information (online, hotpluggable) provided by the monitor +code rather than trying to infer it. This fixes an issue where on +architectures that require hotplug of multiple threads at once the +sub-cores would get updated as offline on daemon restart thus creating +an invalid configuration. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1375783 +(cherry picked from commit 64bc75f75606d0cc48432729b4618e2eae96accc) +--- + src/qemu/qemu_domain.c | 14 +++++--------- + 1 file changed, 5 insertions(+), 9 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index f001c6e..8db2ed5 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5878,15 +5878,11 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + vcpupriv->enable_id = info[i].id; + + if (hotplug && state) { +- vcpu->online = !!info[i].qom_path; +- +- /* mark cpus that don't have an alias as non-hotpluggable */ +- if (vcpu->online) { +- if (vcpupriv->alias) +- vcpu->hotpluggable = VIR_TRISTATE_BOOL_YES; +- else +- vcpu->hotpluggable = VIR_TRISTATE_BOOL_NO; +- } ++ vcpu->online = info[i].online; ++ if (info[i].hotpluggable) ++ vcpu->hotpluggable = VIR_TRISTATE_BOOL_YES; ++ else ++ vcpu->hotpluggable = VIR_TRISTATE_BOOL_NO; + } + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Extract-cpu-hotplug-related-data.patch b/SOURCES/libvirt-qemu-domain-Extract-cpu-hotplug-related-data.patch new file mode 100644 index 0000000..254dcbe --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Extract-cpu-hotplug-related-data.patch @@ -0,0 +1,183 @@ +From 4d614a11dd3164c63a5e28fdeff8b5f196a7ee18 Mon Sep 17 00:00:00 2001 +Message-Id: <4d614a11dd3164c63a5e28fdeff8b5f196a7ee18@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:30 -0400 +Subject: [PATCH] qemu: domain: Extract cpu-hotplug related data + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Now that the monitor code gathers all the data we can extract it to +relevant places either in the definition or the private data of a vcpu. + +As only thread id is broken for TCG guests we may extract the rest of +the data and just skip assigning of the thread id. In case where qemu +would allow cpu hotplug in TCG mode this will make it work eventually. + +(cherry picked from commit 6b4a23ff6c78bfc901a3c1a33460423ff702461f) +--- + src/qemu/qemu_domain.c | 90 ++++++++++++++++++++++++++++++++------------------ + src/qemu/qemu_domain.h | 10 ++++++ + 2 files changed, 67 insertions(+), 33 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index ebd0d9e..259fd79 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -847,8 +847,12 @@ qemuDomainVcpuPrivateNew(void) + + + static void +-qemuDomainVcpuPrivateDispose(void *obj ATTRIBUTE_UNUSED) ++qemuDomainVcpuPrivateDispose(void *obj) + { ++ qemuDomainVcpuPrivatePtr priv = obj; ++ ++ VIR_FREE(priv->type); ++ VIR_FREE(priv->alias); + return; + } + +@@ -5696,6 +5700,15 @@ qemuDomainValidateVcpuInfo(virDomainObjPtr vm) + } + + ++bool ++qemuDomainSupportsNewVcpuHotplug(virDomainObjPtr vm) ++{ ++ qemuDomainObjPrivatePtr priv = vm->privateData; ++ ++ return virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS); ++} ++ ++ + /** + * qemuDomainRefreshVcpuInfo: + * @driver: qemu driver data +@@ -5717,44 +5730,16 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + qemuMonitorCPUInfoPtr info = NULL; + size_t maxvcpus = virDomainDefGetVcpusMax(vm->def); + size_t i; ++ bool hotplug; + int rc; + int ret = -1; + +- /* +- * Current QEMU *can* report info about host threads mapped +- * to vCPUs, but it is not in a manner we can correctly +- * deal with. The TCG CPU emulation does have a separate vCPU +- * thread, but it runs every vCPU in that same thread. So it +- * is impossible to setup different affinity per thread. +- * +- * What's more the 'query-cpus' command returns bizarre +- * data for the threads. It gives the TCG thread for the +- * vCPU 0, but for vCPUs 1-> N, it actually replies with +- * the main process thread ID. +- * +- * The result is that when we try to set affinity for +- * vCPU 1, it will actually change the affinity of the +- * emulator thread :-( When you try to set affinity for +- * vCPUs 2, 3.... it will fail if the affinity was +- * different from vCPU 1. +- * +- * We *could* allow vcpu pinning with TCG, if we made the +- * restriction that all vCPUs had the same mask. This would +- * at least let us separate emulator from vCPUs threads, as +- * we do for KVM. It would need some changes to our cgroups +- * CPU layout though, and error reporting for the config +- * restrictions. +- * +- * Just disable CPU pinning with TCG until someone wants +- * to try to do this hard work. +- */ +- if (vm->def->virtType == VIR_DOMAIN_VIRT_QEMU) +- return 0; ++ hotplug = qemuDomainSupportsNewVcpuHotplug(vm); + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + +- rc = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &info, maxvcpus, false); ++ rc = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &info, maxvcpus, hotplug); + + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; +@@ -5766,7 +5751,46 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + vcpu = virDomainDefGetVcpu(vm->def, i); + vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); + +- vcpupriv->tid = info[i].tid; ++ /* ++ * Current QEMU *can* report info about host threads mapped ++ * to vCPUs, but it is not in a manner we can correctly ++ * deal with. The TCG CPU emulation does have a separate vCPU ++ * thread, but it runs every vCPU in that same thread. So it ++ * is impossible to setup different affinity per thread. ++ * ++ * What's more the 'query-cpus' command returns bizarre ++ * data for the threads. It gives the TCG thread for the ++ * vCPU 0, but for vCPUs 1-> N, it actually replies with ++ * the main process thread ID. ++ * ++ * The result is that when we try to set affinity for ++ * vCPU 1, it will actually change the affinity of the ++ * emulator thread :-( When you try to set affinity for ++ * vCPUs 2, 3.... it will fail if the affinity was ++ * different from vCPU 1. ++ * ++ * We *could* allow vcpu pinning with TCG, if we made the ++ * restriction that all vCPUs had the same mask. This would ++ * at least let us separate emulator from vCPUs threads, as ++ * we do for KVM. It would need some changes to our cgroups ++ * CPU layout though, and error reporting for the config ++ * restrictions. ++ * ++ * Just disable CPU pinning with TCG until someone wants ++ * to try to do this hard work. ++ */ ++ if (vm->def->virtType != VIR_DOMAIN_VIRT_QEMU) ++ vcpupriv->tid = info[i].tid; ++ ++ vcpupriv->socket_id = info[i].socket_id; ++ vcpupriv->core_id = info[i].core_id; ++ vcpupriv->thread_id = info[i].thread_id; ++ vcpupriv->vcpus = info[i].vcpus; ++ VIR_FREE(vcpupriv->type); ++ VIR_STEAL_PTR(vcpupriv->type, info[i].type); ++ VIR_FREE(vcpupriv->alias); ++ VIR_STEAL_PTR(vcpupriv->alias, info[i].alias); ++ vcpupriv->enable_id = info[i].id; + } + + ret = 0; +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index a7176c4..c3ae169 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -317,6 +317,15 @@ struct _qemuDomainVcpuPrivate { + virObject parent; + + pid_t tid; /* vcpu thread id */ ++ int enable_id; /* order in which the vcpus were enabled in qemu */ ++ char *alias; ++ ++ /* information for hotpluggable cpus */ ++ char *type; ++ int socket_id; ++ int core_id; ++ int thread_id; ++ int vcpus; + }; + + # define QEMU_DOMAIN_VCPU_PRIVATE(vcpu) \ +@@ -647,6 +656,7 @@ int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def, + virQEMUCapsPtr qemuCaps, + const virDomainMemoryDef *mem); + ++bool qemuDomainSupportsNewVcpuHotplug(virDomainObjPtr vm); + bool qemuDomainHasVcpuPids(virDomainObjPtr vm); + pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpuid); + int qemuDomainValidateVcpuInfo(virDomainObjPtr vm); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Extract-formating-and-parsing-of-vCPU-thread-ids.patch b/SOURCES/libvirt-qemu-domain-Extract-formating-and-parsing-of-vCPU-thread-ids.patch new file mode 100644 index 0000000..f439e9e --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Extract-formating-and-parsing-of-vCPU-thread-ids.patch @@ -0,0 +1,138 @@ +From 7f30c5668d4b1e41daad07357f3dc1ed7cff8a71 Mon Sep 17 00:00:00 2001 +Message-Id: <7f30c5668d4b1e41daad07357f3dc1ed7cff8a71@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:50 -0400 +Subject: [PATCH] qemu: domain: Extract formating and parsing of vCPU thread + ids + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Further patches will be adding index and modifying the source variables +so this will make it more clear. + +(cherry picked from commit b91335afe48a406223caf15a0598b95ec29a26b5) +--- + src/qemu/qemu_domain.c | 82 +++++++++++++++++++++++++++++++++----------------- + 1 file changed, 54 insertions(+), 28 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index c213a9f..01f0d6a 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1354,6 +1354,27 @@ qemuDomainObjPrivateFree(void *data) + } + + ++static void ++qemuDomainObjPrivateXMLFormatVcpus(virBufferPtr buf, ++ int *vcpupids, ++ int nvcpupids) ++{ ++ size_t i; ++ ++ if (!nvcpupids) ++ return; ++ ++ virBufferAddLit(buf, "\n"); ++ virBufferAdjustIndent(buf, 2); ++ ++ for (i = 0; i < nvcpupids; i++) ++ virBufferAsprintf(buf, "\n", vcpupids[i]); ++ ++ virBufferAdjustIndent(buf, -2); ++ virBufferAddLit(buf, "\n"); ++} ++ ++ + static int + qemuDomainObjPrivateXMLFormat(virBufferPtr buf, + virDomainObjPtr vm) +@@ -1381,16 +1402,7 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, + virDomainChrTypeToString(priv->monConfig->type)); + } + +- +- if (priv->nvcpupids) { +- size_t i; +- virBufferAddLit(buf, "\n"); +- virBufferAdjustIndent(buf, 2); +- for (i = 0; i < priv->nvcpupids; i++) +- virBufferAsprintf(buf, "\n", priv->vcpupids[i]); +- virBufferAdjustIndent(buf, -2); +- virBufferAddLit(buf, "\n"); +- } ++ qemuDomainObjPrivateXMLFormatVcpus(buf, priv->vcpupids, priv->nvcpupids); + + if (priv->qemuCaps) { + size_t i; +@@ -1479,6 +1491,29 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, + return 0; + } + ++ ++static int ++qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node, ++ unsigned int idx, ++ qemuDomainObjPrivatePtr priv) ++{ ++ char *pidstr; ++ int ret = -1; ++ ++ if (!(pidstr = virXMLPropString(node, "pid"))) ++ goto cleanup; ++ ++ if (virStrToLong_i(pidstr, NULL, 10, &(priv->vcpupids[idx])) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(pidstr); ++ return ret; ++} ++ ++ + static int + qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, + virDomainObjPtr vm, +@@ -1529,27 +1564,18 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, + goto error; + } + +- n = virXPathNodeSet("./vcpus/vcpu", ctxt, &nodes); +- if (n < 0) ++ if ((n = virXPathNodeSet("./vcpus/vcpu", ctxt, &nodes)) < 0) + goto error; +- if (n) { +- priv->nvcpupids = n; +- if (VIR_REALLOC_N(priv->vcpupids, priv->nvcpupids) < 0) ++ ++ priv->nvcpupids = n; ++ if (VIR_REALLOC_N(priv->vcpupids, priv->nvcpupids) < 0) ++ goto error; ++ ++ for (i = 0; i < n; i++) { ++ if (qemuDomainObjPrivateXMLParseVcpu(nodes[i], i, priv) < 0) + goto error; +- +- for (i = 0; i < n; i++) { +- char *pidstr = virXMLPropString(nodes[i], "pid"); +- if (!pidstr) +- goto error; +- +- if (virStrToLong_i(pidstr, NULL, 10, &(priv->vcpupids[i])) < 0) { +- VIR_FREE(pidstr); +- goto error; +- } +- VIR_FREE(pidstr); +- } +- VIR_FREE(nodes); + } ++ VIR_FREE(nodes); + + if ((n = virXPathNodeSet("./qemuCaps/flag", ctxt, &nodes)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Improve-vCPU-data-checking-in-qemuDomainRefreshVcpu.patch b/SOURCES/libvirt-qemu-domain-Improve-vCPU-data-checking-in-qemuDomainRefreshVcpu.patch new file mode 100644 index 0000000..89cd29b --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Improve-vCPU-data-checking-in-qemuDomainRefreshVcpu.patch @@ -0,0 +1,104 @@ +From f2826631e6353ae913c2434f22ad553fb8524f95 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:08 -0400 +Subject: [PATCH] qemu: domain: Improve vCPU data checking in + qemuDomainRefreshVcpu + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Validate the presence of the thread id according to state of the vCPU +rather than just checking the vCPU count. Additionally put the new +validation code into a separate function so that the information +retrieval can be split from the validation. + +(cherry picked from commit 2bdc300a34f07a43cc1362e785c2bfdcfc73bf31) +--- + src/qemu/qemu_domain.c | 49 +++++++++++++++++++++++++++++++++++++++++++------ + src/qemu/qemu_domain.h | 1 + + 2 files changed, 44 insertions(+), 6 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 93dd3f6..e087fe6 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5629,6 +5629,48 @@ qemuDomainGetVcpuPid(virDomainObjPtr vm, + + + /** ++ * qemuDomainValidateVcpuInfo: ++ * ++ * Validates vcpu thread information. If vcpu thread IDs are reported by qemu, ++ * this function validates that online vcpus have thread info present and ++ * offline vcpus don't. ++ * ++ * Returns 0 on success -1 on error. ++ */ ++int ++qemuDomainValidateVcpuInfo(virDomainObjPtr vm) ++{ ++ size_t maxvcpus = virDomainDefGetVcpusMax(vm->def); ++ virDomainVcpuDefPtr vcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ size_t i; ++ ++ if (!qemuDomainHasVcpuPids(vm)) ++ return 0; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(vm->def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ if (vcpu->online && vcpupriv->tid == 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("qemu didn't report thread id for vcpu '%zu'"), i); ++ return -1; ++ } ++ ++ if (!vcpu->online && vcpupriv->tid != 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("qemu reported thread id for inactive vcpu '%zu'"), ++ i); ++ return -1; ++ } ++ } ++ ++ return 0; ++} ++ ++ ++/** + * qemuDomainRefreshVcpuInfo: + * @driver: qemu driver data + * @vm: domain object +@@ -5708,13 +5750,8 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = 0; + } + +- if (ncpupids != virDomainDefGetVcpus(vm->def)) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("got wrong number of vCPU pids from QEMU monitor. " +- "got %d, wanted %d"), +- ncpupids, virDomainDefGetVcpus(vm->def)); ++ if (qemuDomainValidateVcpuInfo(vm) < 0) + goto cleanup; +- } + + ret = ncpupids; + +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index be61535..a7176c4 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -649,6 +649,7 @@ int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def, + + bool qemuDomainHasVcpuPids(virDomainObjPtr vm); + pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpuid); ++int qemuDomainValidateVcpuInfo(virDomainObjPtr vm); + int qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Prepare-for-VCPUs-vanishing-while-libvirt-is-not-running.patch b/SOURCES/libvirt-qemu-domain-Prepare-for-VCPUs-vanishing-while-libvirt-is-not-running.patch new file mode 100644 index 0000000..11380be --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Prepare-for-VCPUs-vanishing-while-libvirt-is-not-running.patch @@ -0,0 +1,129 @@ +From 285de183e4643a0173405bce5ae0703bbf61df08 Mon Sep 17 00:00:00 2001 +Message-Id: <285de183e4643a0173405bce5ae0703bbf61df08@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:31 -0400 +Subject: [PATCH] qemu: domain: Prepare for VCPUs vanishing while libvirt is + not running + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Similarly to devices the guest may allow unplug of the VCPU if libvirt +is down. To avoid problems, refresh the vcpu state on reconnect. Don't +mess with the vcpu state otherwise. + +(cherry picked from commit 133be0a9e27dc28dacba4b651b8633f1a85eead9) +--- + src/qemu/qemu_domain.c | 9 ++++++++- + src/qemu/qemu_domain.h | 3 ++- + src/qemu/qemu_driver.c | 4 ++-- + src/qemu/qemu_process.c | 7 +++++-- + 4 files changed, 17 insertions(+), 6 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 259fd79..add8379 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5714,16 +5714,20 @@ qemuDomainSupportsNewVcpuHotplug(virDomainObjPtr vm) + * @driver: qemu driver data + * @vm: domain object + * @asyncJob: current asynchronous job type ++ * @state: refresh vcpu state + * + * Updates vCPU information private data of @vm. Due to historical reasons this + * function returns success even if some data were not reported by qemu. + * ++ * If @state is true, the vcpu state is refreshed as reported by the monitor. ++ * + * Returns 0 on success and -1 on fatal error. + */ + int + qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + virDomainObjPtr vm, +- int asyncJob) ++ int asyncJob, ++ bool state) + { + virDomainVcpuDefPtr vcpu; + qemuDomainVcpuPrivatePtr vcpupriv; +@@ -5791,6 +5795,9 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + VIR_FREE(vcpupriv->alias); + VIR_STEAL_PTR(vcpupriv->alias, info[i].alias); + vcpupriv->enable_id = info[i].id; ++ ++ if (hotplug && state) ++ vcpu->online = !!info[i].qom_path; + } + + ret = 0; +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index c3ae169..76b6904 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -662,7 +662,8 @@ pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpuid); + int qemuDomainValidateVcpuInfo(virDomainObjPtr vm); + int qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + virDomainObjPtr vm, +- int asyncJob); ++ int asyncJob, ++ bool state); + + bool qemuDomainSupportsNicdev(virDomainDefPtr def, + virDomainNetDefPtr net); +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 1b433f8..35ed8ec 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4646,7 +4646,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + + vcpuinfo->online = true; + +- if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0) + goto cleanup; + + if (qemuDomainValidateVcpuInfo(vm) < 0) +@@ -4695,7 +4695,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, + goto cleanup; + } + +- if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0) + goto cleanup; + + if (qemuDomainValidateVcpuInfo(vm) < 0) { +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index cdfd1e3..1726608 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -3353,6 +3353,9 @@ qemuProcessReconnect(void *opaque) + ignore_value(virSecurityManagerCheckAllLabel(driver->securityManager, + obj->def)); + ++ if (qemuDomainRefreshVcpuInfo(driver, obj, QEMU_ASYNC_JOB_NONE, true) < 0) ++ goto error; ++ + if (virSecurityManagerReserveLabel(driver->securityManager, obj->def, obj->pid) < 0) + goto error; + +@@ -5193,7 +5196,7 @@ qemuProcessLaunch(virConnectPtr conn, + goto cleanup; + + VIR_DEBUG("Refreshing VCPU info"); +- if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob) < 0) ++ if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob, false) < 0) + goto cleanup; + + if (qemuDomainValidateVcpuInfo(vm) < 0) +@@ -5990,7 +5993,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, + } + + VIR_DEBUG("Detecting VCPU PIDs"); +- if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0) + goto error; + + if (qemuDomainValidateVcpuInfo(vm) < 0) +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Rename-qemuDomainDetectVcpuPids-to-qemuDomainRefreshVcpuInfo.patch b/SOURCES/libvirt-qemu-domain-Rename-qemuDomainDetectVcpuPids-to-qemuDomainRefreshVcpuInfo.patch new file mode 100644 index 0000000..8a7c4e5 --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Rename-qemuDomainDetectVcpuPids-to-qemuDomainRefreshVcpuInfo.patch @@ -0,0 +1,116 @@ +From b41d5d32d7d34a4e4de359cdb9725f0ab8c97a0e Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:06 -0400 +Subject: [PATCH] qemu: domain: Rename qemuDomainDetectVcpuPids to + qemuDomainRefreshVcpuInfo + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +The function will eventually do more useful stuff than just detection of +thread ids. + +(cherry picked from commit 8f56b5baaf8c743a10412e1f1df915b3140b0019) +--- + src/qemu/qemu_domain.c | 10 +++++----- + src/qemu/qemu_domain.h | 5 +++-- + src/qemu/qemu_driver.c | 4 ++-- + src/qemu/qemu_process.c | 6 +++--- + 4 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 1148b52..93dd3f6 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5629,20 +5629,20 @@ qemuDomainGetVcpuPid(virDomainObjPtr vm, + + + /** +- * qemuDomainDetectVcpuPids: ++ * qemuDomainRefreshVcpuInfo: + * @driver: qemu driver data + * @vm: domain object + * @asyncJob: current asynchronous job type + * +- * Updates vCPU thread ids in the private data of @vm. ++ * Updates vCPU information private data of @vm. + * + * Returns number of detected vCPU threads on success, -1 on error and reports + * an appropriate error, -2 if the domain doesn't exist any more. + */ + int +-qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, +- virDomainObjPtr vm, +- int asyncJob) ++qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ int asyncJob) + { + virDomainVcpuDefPtr vcpu; + size_t maxvcpus = virDomainDefGetVcpusMax(vm->def); +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index 06c3fc2..be61535 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -649,8 +649,9 @@ int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def, + + bool qemuDomainHasVcpuPids(virDomainObjPtr vm); + pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpuid); +-int qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, virDomainObjPtr vm, +- int asyncJob); ++int qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ int asyncJob); + + bool qemuDomainSupportsNicdev(virDomainDefPtr def, + virDomainNetDefPtr net); +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 57ca522..040c638 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4645,7 +4645,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + + vcpuinfo->online = true; + +- if ((rc = qemuDomainDetectVcpuPids(driver, vm, QEMU_ASYNC_JOB_NONE)) <= 0) { ++ if ((rc = qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE)) <= 0) { + /* vcpu pids were not detected, skip setting of affinity */ + if (rc == 0) + ret = 0; +@@ -4695,7 +4695,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, + goto cleanup; + } + +- if ((rc = qemuDomainDetectVcpuPids(driver, vm, QEMU_ASYNC_JOB_NONE)) < 0) { ++ if ((rc = qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE)) < 0) { + /* rollback only if domain didn't exit */ + if (rc == -2) + goto cleanup; +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 4cfa81a..6ff5da5 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -5192,8 +5192,8 @@ qemuProcessLaunch(virConnectPtr conn, + if (qemuSetupCpusetMems(vm) < 0) + goto cleanup; + +- VIR_DEBUG("Detecting VCPU PIDs"); +- if (qemuDomainDetectVcpuPids(driver, vm, asyncJob) < 0) ++ VIR_DEBUG("Refreshing VCPU info"); ++ if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob) < 0) + goto cleanup; + + VIR_DEBUG("Detecting IOThread PIDs"); +@@ -5987,7 +5987,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, + } + + VIR_DEBUG("Detecting VCPU PIDs"); +- if (qemuDomainDetectVcpuPids(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) + goto error; + + VIR_DEBUG("Detecting IOThread PIDs"); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-domain-Restructurate-control-flow-in-qemuDomainGetMlockLimitBytes.patch b/SOURCES/libvirt-qemu-domain-Restructurate-control-flow-in-qemuDomainGetMlockLimitBytes.patch deleted file mode 100644 index a9cae92..0000000 --- a/SOURCES/libvirt-qemu-domain-Restructurate-control-flow-in-qemuDomainGetMlockLimitBytes.patch +++ /dev/null @@ -1,49 +0,0 @@ -From edd55b5cb27f6b1f5738a354f59624795a049d73 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Thu, 12 Nov 2015 08:40:44 +0100 -Subject: [PATCH] qemu: domain: Restructurate control flow in - qemuDomainGetMlockLimitBytes - -https://bugzilla.redhat.com/show_bug.cgi?id=1280420 - -Break early when hard limit is set so that it's not intermixed by other -logic for determining the limit. - -(cherry picked from commit e7b91c510e9831b2741469809465bb68a87c8362) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 1f206fa..fd4449d 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3439,14 +3439,18 @@ qemuDomainGetMlockLimitBytes(virDomainDefPtr def) - { - unsigned long long memKB; - -+ /* prefer the hard limit */ -+ if (virMemoryLimitIsSet(def->mem.hard_limit)) { -+ memKB = def->mem.hard_limit; -+ goto done; -+ } -+ - /* VFIO requires all of the guest's memory to be locked resident, plus some - * amount for IO space. Alex Williamson suggested adding 1GiB for IO space - * just to be safe (some finer tuning might be nice, though). */ -- if (virMemoryLimitIsSet(def->mem.hard_limit)) -- memKB = def->mem.hard_limit; -- else -- memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; -+ memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; - -+ done: - return memKB << 10; - } - --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-domain-Simplify-return-values-of-qemuDomainRefreshVcpuInfo.patch b/SOURCES/libvirt-qemu-domain-Simplify-return-values-of-qemuDomainRefreshVcpuInfo.patch new file mode 100644 index 0000000..961dcc3 --- /dev/null +++ b/SOURCES/libvirt-qemu-domain-Simplify-return-values-of-qemuDomainRefreshVcpuInfo.patch @@ -0,0 +1,143 @@ +From 0267f63a1fcfe60c69183274650cace0a4aba1f5 Mon Sep 17 00:00:00 2001 +Message-Id: <0267f63a1fcfe60c69183274650cace0a4aba1f5@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:09 -0400 +Subject: [PATCH] qemu: domain: Simplify return values of + qemuDomainRefreshVcpuInfo + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Call the vcpu thread info validation separately to decrease complexity +of returned values by qemuDomainRefreshVcpuInfo. + +This function now returns 0 on success and -1 on error. Certain +failures of qemu to report data are still considered as success. Any +error reported now is fatal. + +(cherry picked from commit 041f35340b949e4b4dbb8fbbbc12d69dfac734a6) +--- + src/qemu/qemu_domain.c | 15 +++++---------- + src/qemu/qemu_driver.c | 22 +++++++++++----------- + src/qemu/qemu_process.c | 6 ++++++ + 3 files changed, 22 insertions(+), 21 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index e087fe6..9cbf938 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5676,10 +5676,10 @@ qemuDomainValidateVcpuInfo(virDomainObjPtr vm) + * @vm: domain object + * @asyncJob: current asynchronous job type + * +- * Updates vCPU information private data of @vm. ++ * Updates vCPU information private data of @vm. Due to historical reasons this ++ * function returns success even if some data were not reported by qemu. + * +- * Returns number of detected vCPU threads on success, -1 on error and reports +- * an appropriate error, -2 if the domain doesn't exist any more. ++ * Returns 0 on success and -1 on fatal error. + */ + int + qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, +@@ -5727,10 +5727,8 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + ncpupids = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &cpupids); +- if (qemuDomainObjExitMonitor(driver, vm) < 0) { +- ret = -2; ++ if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; +- } + + /* failure to get the VCPU <-> PID mapping or to execute the query + * command will not be treated fatal as some versions of qemu don't +@@ -5750,10 +5748,7 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = 0; + } + +- if (qemuDomainValidateVcpuInfo(vm) < 0) +- goto cleanup; +- +- ret = ncpupids; ++ ret = 0; + + cleanup: + VIR_FREE(cpupids); +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 040c638..1011bb8 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4621,6 +4621,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + { + qemuDomainObjPrivatePtr priv = vm->privateData; + virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); ++ qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); + int ret = -1; + int rc; + int oldvcpus = virDomainDefGetVcpus(vm->def); +@@ -4645,15 +4646,14 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + + vcpuinfo->online = true; + +- if ((rc = qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE)) <= 0) { +- /* vcpu pids were not detected, skip setting of affinity */ +- if (rc == 0) +- ret = 0; +- ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) + goto cleanup; +- } + +- if (qemuProcessSetupVcpu(vm, vcpu) < 0) ++ if (qemuDomainValidateVcpuInfo(vm) < 0) ++ goto cleanup; ++ ++ if (vcpupriv->tid > 0 && ++ qemuProcessSetupVcpu(vm, vcpu) < 0) + goto cleanup; + + ret = 0; +@@ -4695,11 +4695,11 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, + goto cleanup; + } + +- if ((rc = qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE)) < 0) { +- /* rollback only if domain didn't exit */ +- if (rc == -2) +- goto cleanup; ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) ++ goto cleanup; + ++ if (qemuDomainValidateVcpuInfo(vm) < 0) { ++ /* rollback vcpu count if the setting has failed */ + virDomainAuditVcpu(vm, oldvcpus, oldvcpus - 1, "update", false); + vcpuinfo->online = true; + goto cleanup; +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 6ff5da5..cdfd1e3 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -5196,6 +5196,9 @@ qemuProcessLaunch(virConnectPtr conn, + if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob) < 0) + goto cleanup; + ++ if (qemuDomainValidateVcpuInfo(vm) < 0) ++ goto cleanup; ++ + VIR_DEBUG("Detecting IOThread PIDs"); + if (qemuProcessDetectIOThreadPIDs(driver, vm, asyncJob) < 0) + goto cleanup; +@@ -5990,6 +5993,9 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, + if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) + goto error; + ++ if (qemuDomainValidateVcpuInfo(vm) < 0) ++ goto error; ++ + VIR_DEBUG("Detecting IOThread PIDs"); + if (qemuProcessDetectIOThreadPIDs(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) + goto error; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-don-t-use-initialized-ret-in-qemuRemoveSharedDevice.patch b/SOURCES/libvirt-qemu-don-t-use-initialized-ret-in-qemuRemoveSharedDevice.patch deleted file mode 100644 index 22a7c3d..0000000 --- a/SOURCES/libvirt-qemu-don-t-use-initialized-ret-in-qemuRemoveSharedDevice.patch +++ /dev/null @@ -1,37 +0,0 @@ -From f1ae475d996a4943d25ad7a540364be6d4f6fa32 Mon Sep 17 00:00:00 2001 -Message-Id: -From: =?UTF-8?q?Guido=20G=C3=BCnther?= -Date: Thu, 9 Jul 2015 19:08:49 +0200 -Subject: [PATCH] qemu: don't use initialized ret in qemuRemoveSharedDevice - -This fixes - - CC qemu/libvirt_driver_qemu_impl_la-qemu_conf.lo - qemu/qemu_conf.c: In function 'qemuRemoveSharedDevice': - qemu/qemu_conf.c:1384:9: error: 'ret' may be used uninitialized in this function [-Werror=maybe-uninitialized] - -(cherry picked from commit c6f9ddf9099d08732acf2501b73c6817d8feb882) - -https://bugzilla.redhat.com/show_bug.cgi?id=1072736 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_conf.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c -index 965d34d..030261e 100644 ---- a/src/qemu/qemu_conf.c -+++ b/src/qemu/qemu_conf.c -@@ -1396,7 +1396,7 @@ qemuRemoveSharedHostdev(virQEMUDriverPtr driver, - { - char *dev_path = NULL; - char *key = NULL; -- int ret; -+ int ret = -1; - - if (!qemuIsSharedHostdev(hostdev)) - return 0; --- -2.5.1 - diff --git a/SOURCES/libvirt-qemu-driver-Extract-setting-of-live-vcpu-count.patch b/SOURCES/libvirt-qemu-driver-Extract-setting-of-live-vcpu-count.patch new file mode 100644 index 0000000..269d17e --- /dev/null +++ b/SOURCES/libvirt-qemu-driver-Extract-setting-of-live-vcpu-count.patch @@ -0,0 +1,183 @@ +From 2d4e8abbe6a54d8472ac867ace641e5987b08495 Mon Sep 17 00:00:00 2001 +Message-Id: <2d4e8abbe6a54d8472ac867ace641e5987b08495@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:14 -0400 +Subject: [PATCH] qemu: driver: Extract setting of live vcpu count + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +The live code does ugly things. Contain it in a separate function. + +(cherry picked from commit 2fa7db93de99df54adcf3948a16ee98fb5c11e59) +--- + src/qemu/qemu_driver.c | 121 +++++++++++++++++++++++++++---------------------- + 1 file changed, 68 insertions(+), 53 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 520a628..224c5d4 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4798,6 +4798,72 @@ qemuDomainSetVcpusMax(virQEMUDriverPtr driver, + + + static int ++qemuDomainSetVcpusLive(virQEMUDriverPtr driver, ++ virQEMUDriverConfigPtr cfg, ++ virDomainObjPtr vm, ++ unsigned int nvcpus) ++{ ++ qemuDomainObjPrivatePtr priv = vm->privateData; ++ size_t i; ++ virCgroupPtr cgroup_temp = NULL; ++ char *mem_mask = NULL; ++ char *all_nodes_str = NULL; ++ virBitmapPtr all_nodes = NULL; ++ virErrorPtr err = NULL; ++ int ret = -1; ++ ++ if (virNumaIsAvailable() && ++ virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { ++ if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, ++ false, &cgroup_temp) < 0) ++ goto cleanup; ++ ++ if (!(all_nodes = virNumaGetHostNodeset())) ++ goto cleanup; ++ ++ if (!(all_nodes_str = virBitmapFormat(all_nodes))) ++ goto cleanup; ++ ++ if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 || ++ virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0) ++ goto cleanup; ++ } ++ ++ if (nvcpus > virDomainDefGetVcpus(vm->def)) { ++ for (i = virDomainDefGetVcpus(vm->def); i < nvcpus; i++) { ++ if (qemuDomainHotplugAddVcpu(driver, vm, i) < 0) ++ goto cleanup; ++ } ++ } else { ++ for (i = virDomainDefGetVcpus(vm->def) - 1; i >= nvcpus; i--) { ++ if (qemuDomainHotplugDelVcpu(driver, vm, i) < 0) ++ goto cleanup; ++ } ++ } ++ ++ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ ++ cleanup: ++ if (mem_mask) { ++ err = virSaveLastError(); ++ virCgroupSetCpusetMems(cgroup_temp, mem_mask); ++ virSetError(err); ++ virFreeError(err); ++ VIR_FREE(mem_mask); ++ } ++ ++ VIR_FREE(all_nodes_str); ++ virBitmapFree(all_nodes); ++ virCgroupFree(&cgroup_temp); ++ ++ return ret; ++} ++ ++ ++static int + qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + unsigned int flags) + { +@@ -4807,13 +4873,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + virDomainDefPtr persistentDef; + int ret = -1; + virQEMUDriverConfigPtr cfg = NULL; +- qemuDomainObjPrivatePtr priv; +- size_t i; +- virCgroupPtr cgroup_temp = NULL; +- char *mem_mask = NULL; +- char *all_nodes_str = NULL; +- virBitmapPtr all_nodes = NULL; +- virErrorPtr err = NULL; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG | +@@ -4828,8 +4887,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + if (virDomainSetVcpusFlagsEnsureACL(dom->conn, vm->def, flags) < 0) + goto cleanup; + +- priv = vm->privateData; +- + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) + goto cleanup; + +@@ -4866,39 +4923,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + } + } + +- if (def && virNumaIsAvailable() && +- virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { +- if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, +- false, &cgroup_temp) < 0) +- goto endjob; +- +- if (!(all_nodes = virNumaGetHostNodeset())) +- goto endjob; +- +- if (!(all_nodes_str = virBitmapFormat(all_nodes))) +- goto endjob; +- +- if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 || +- virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0) +- goto endjob; +- } +- +- if (def) { +- if (nvcpus > virDomainDefGetVcpus(def)) { +- for (i = virDomainDefGetVcpus(def); i < nvcpus; i++) { +- if (qemuDomainHotplugAddVcpu(driver, vm, i) < 0) +- goto endjob; +- } +- } else { +- for (i = virDomainDefGetVcpus(def) - 1; i >= nvcpus; i--) { +- if (qemuDomainHotplugDelVcpu(driver, vm, i) < 0) +- goto endjob; +- } +- } +- +- if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) +- goto endjob; +- } ++ if (def && qemuDomainSetVcpusLive(driver, cfg, vm, nvcpus) < 0) ++ goto endjob; + + if (persistentDef) { + if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0) +@@ -4912,21 +4938,10 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + ret = 0; + + endjob: +- if (mem_mask) { +- err = virSaveLastError(); +- virCgroupSetCpusetMems(cgroup_temp, mem_mask); +- virSetError(err); +- virFreeError(err); +- } +- + qemuDomainObjEndJob(driver, vm); + + cleanup: + virDomainObjEndAPI(&vm); +- VIR_FREE(mem_mask); +- VIR_FREE(all_nodes_str); +- virBitmapFree(all_nodes); +- virCgroupFree(&cgroup_temp); + virObjectUnref(cfg); + return ret; + } +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-driver-Fix-qemuDomainHelperGetVcpus-for-sparse-vcpu-topologies.patch b/SOURCES/libvirt-qemu-driver-Fix-qemuDomainHelperGetVcpus-for-sparse-vcpu-topologies.patch new file mode 100644 index 0000000..7530c55 --- /dev/null +++ b/SOURCES/libvirt-qemu-driver-Fix-qemuDomainHelperGetVcpus-for-sparse-vcpu-topologies.patch @@ -0,0 +1,67 @@ +From 71279f41cc04f3c350d25f87243e3184d71c88c9 Mon Sep 17 00:00:00 2001 +Message-Id: <71279f41cc04f3c350d25f87243e3184d71c88c9@dist-git> +From: Peter Krempa +Date: Fri, 26 Aug 2016 15:45:24 -0400 +Subject: [PATCH] qemu: driver: Fix qemuDomainHelperGetVcpus for sparse vcpu + topologies + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +ce43cca0e refactored the helper to prepare it for sparse topologies but +forgot to fix the iterator used to fill the structures. This would +result into a weirdly sparse populated array and possible out of bounds +access and crash once sparse vcpu topologies were allowed. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1369988 +(cherry picked from commit 9b6e947b015026bc7bca9acc4283808459c4efd2) +--- + src/qemu/qemu_driver.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 1ef8bc4..c8c7aee 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -1477,15 +1477,17 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, + for (i = 0; i < virDomainDefGetVcpusMax(vm->def) && ncpuinfo < maxinfo; i++) { + virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i); + pid_t vcpupid = qemuDomainGetVcpuPid(vm, i); ++ virVcpuInfoPtr vcpuinfo = info + ncpuinfo; + + if (!vcpu->online) + continue; + + if (info) { +- info[i].number = i; +- info[i].state = VIR_VCPU_RUNNING; ++ vcpuinfo->number = i; ++ vcpuinfo->state = VIR_VCPU_RUNNING; + +- if (qemuGetProcessInfo(&(info[i].cpuTime), &(info[i].cpu), NULL, ++ if (qemuGetProcessInfo(&vcpuinfo->cpuTime, ++ &vcpuinfo->cpu, NULL, + vm->pid, vcpupid) < 0) { + virReportSystemError(errno, "%s", + _("cannot get vCPU placement & pCPU time")); +@@ -1494,7 +1496,7 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, + } + + if (cpumaps) { +- unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, i); ++ unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, ncpuinfo); + virBitmapPtr map = NULL; + + if (!(map = virProcessGetAffinity(vcpupid))) +@@ -1505,7 +1507,7 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, + } + + if (cpuwait) { +- if (qemuGetSchedInfo(&(cpuwait[i]), vm->pid, vcpupid) < 0) ++ if (qemuGetSchedInfo(&(cpuwait[ncpuinfo]), vm->pid, vcpupid) < 0) + return -1; + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-driver-Remove-unnecessary-flag-in-qemuDomainGetStatsBlock.patch b/SOURCES/libvirt-qemu-driver-Remove-unnecessary-flag-in-qemuDomainGetStatsBlock.patch deleted file mode 100644 index 3be0f70..0000000 --- a/SOURCES/libvirt-qemu-driver-Remove-unnecessary-flag-in-qemuDomainGetStatsBlock.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 992d8fee540fcdeba1a8b1cb9568fb981d210b08 Mon Sep 17 00:00:00 2001 -Message-Id: <992d8fee540fcdeba1a8b1cb9568fb981d210b08@dist-git> -From: Peter Krempa -Date: Thu, 26 May 2016 12:54:52 +0200 -Subject: [PATCH] qemu: driver: Remove unnecessary flag in - qemuDomainGetStatsBlock - -https://bugzilla.redhat.com/show_bug.cgi?id=1339963 - -'abbreviated' was true if 'stats' were NULL - -(cherry picked from commit 5d2b0e6f12b4e57d75ed1047ab1c36443b7a54b3) ---- - src/qemu/qemu_driver.c | 15 +++++---------- - 1 file changed, 5 insertions(+), 10 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index bdebf13..e403103 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -19340,7 +19340,6 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, - virStorageSourcePtr src, - size_t block_idx, - unsigned int backing_idx, -- bool abbreviated, - virHashTablePtr stats) - { - qemuBlockStats *entry; -@@ -19359,7 +19358,7 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, - QEMU_ADD_BLOCK_PARAM_UI(record, maxparams, block_idx, "backingIndex", - backing_idx); - -- if (abbreviated || !alias || !(entry = virHashLookup(stats, alias))) { -+ if (!stats || !alias || !(entry = virHashLookup(stats, alias))) { - if (virStorageSourceIsEmpty(src)) { - ret = 0; - goto cleanup; -@@ -19436,15 +19435,12 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, - int rc; - virHashTablePtr stats = NULL; - qemuDomainObjPrivatePtr priv = dom->privateData; -- bool abbreviated = false; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - int count_index = -1; - size_t visited = 0; - bool visitBacking = !!(privflags & QEMU_DOMAIN_STATS_BACKING); - -- if (!HAVE_JOB(privflags) || !virDomainObjIsActive(dom)) { -- abbreviated = true; /* it's ok, just go ahead silently */ -- } else { -+ if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) { - qemuDomainObjEnterMonitor(driver, dom); - rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats, - visitBacking); -@@ -19454,10 +19450,9 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, - if (qemuDomainObjExitMonitor(driver, dom) < 0) - goto cleanup; - -- if (rc < 0) { -+ /* failure to retrieve stats is fine at this point */ -+ if (rc < 0) - virResetLastError(); -- abbreviated = true; /* still ok, again go ahead silently */ -- } - } - - /* When listing backing chains, it's easier to fix up the count -@@ -19474,7 +19469,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, - while (src && (backing_idx == 0 || visitBacking)) { - if (qemuDomainGetStatsOneBlock(driver, cfg, dom, record, maxparams, - disk, src, visited, backing_idx, -- abbreviated, stats) < 0) -+ stats) < 0) - goto cleanup; - visited++; - backing_idx++; --- -2.8.3 - diff --git a/SOURCES/libvirt-qemu-driver-Separate-bulk-stats-worker-for-block-devices.patch b/SOURCES/libvirt-qemu-driver-Separate-bulk-stats-worker-for-block-devices.patch deleted file mode 100644 index ad7ec25..0000000 --- a/SOURCES/libvirt-qemu-driver-Separate-bulk-stats-worker-for-block-devices.patch +++ /dev/null @@ -1,96 +0,0 @@ -From fdf02246eb2837e144b1929887af94aa9ce9a77e Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Thu, 26 May 2016 12:54:53 +0200 -Subject: [PATCH] qemu: driver: Separate bulk stats worker for block devices - -https://bugzilla.redhat.com/show_bug.cgi?id=1339963 - -Extract the fallback path that reloads the stats from disk into a -separate function. - -(cherry picked from commit 3aa5d51a9530a8737ca584b393c29297dd9bbc37) ---- - src/qemu/qemu_driver.c | 58 ++++++++++++++++++++++++++++++++------------------ - 1 file changed, 37 insertions(+), 21 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index e403103..1075237 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -19329,6 +19329,40 @@ do { \ - goto cleanup; \ - } while (0) - -+/* refresh information by opening images on the disk */ -+static int -+qemuDomainGetStatsOneBlockFallback(virQEMUDriverPtr driver, -+ virQEMUDriverConfigPtr cfg, -+ virDomainObjPtr dom, -+ virDomainStatsRecordPtr record, -+ int *maxparams, -+ virStorageSourcePtr src, -+ size_t block_idx) -+{ -+ int ret = -1; -+ -+ if (virStorageSourceIsEmpty(src)) -+ return 0; -+ -+ if (qemuStorageLimitsRefresh(driver, cfg, dom, src) < 0) { -+ virResetLastError(); -+ return 0; -+ } -+ -+ if (src->allocation) -+ QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -+ "allocation", src->allocation); -+ if (src->capacity) -+ QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -+ "capacity", src->capacity); -+ if (src->physical) -+ QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -+ "physical", src->physical); -+ ret = 0; -+ cleanup: -+ return ret; -+} -+ - - static int - qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, -@@ -19358,28 +19392,10 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, - QEMU_ADD_BLOCK_PARAM_UI(record, maxparams, block_idx, "backingIndex", - backing_idx); - -+ /* use fallback path if data is not available */ - if (!stats || !alias || !(entry = virHashLookup(stats, alias))) { -- if (virStorageSourceIsEmpty(src)) { -- ret = 0; -- goto cleanup; -- } -- -- if (qemuStorageLimitsRefresh(driver, cfg, dom, src) < 0) { -- virResetLastError(); -- ret = 0; -- goto cleanup; -- } -- -- if (src->allocation) -- QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -- "allocation", src->allocation); -- if (src->capacity) -- QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -- "capacity", src->capacity); -- if (src->physical) -- QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, -- "physical", src->physical); -- ret = 0; -+ ret = qemuDomainGetStatsOneBlockFallback(driver, cfg, dom, record, -+ maxparams, src, block_idx); - goto cleanup; - } - --- -2.8.3 - diff --git a/SOURCES/libvirt-qemu-driver-Split-out-regular-vcpu-hotplug-code-into-a-function.patch b/SOURCES/libvirt-qemu-driver-Split-out-regular-vcpu-hotplug-code-into-a-function.patch new file mode 100644 index 0000000..27dab78 --- /dev/null +++ b/SOURCES/libvirt-qemu-driver-Split-out-regular-vcpu-hotplug-code-into-a-function.patch @@ -0,0 +1,167 @@ +From f76acdb6a03b2a572a552713be49366494d6ae2b Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:15 -0400 +Subject: [PATCH] qemu: driver: Split out regular vcpu hotplug code into a + function + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +All other modes of qemuDomainSetVcpusFlags have helpers so finish the +work by splitting the regular code into a new function. + +This patch also touches up the coding (spacing) style. + +(cherry picked from commit c6f26fc207a31fd069779ebdd400196249c9784a) +--- + src/qemu/qemu_driver.c | 100 ++++++++++++++++++++++++++----------------------- + 1 file changed, 53 insertions(+), 47 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 224c5d4..1b433f8 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4864,7 +4864,53 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + + + static int +-qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, ++qemuDomainSetVcpusInternal(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ virDomainDefPtr def, ++ virDomainDefPtr persistentDef, ++ unsigned int nvcpus) ++{ ++ virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); ++ int ret = -1; ++ ++ if (def && nvcpus > virDomainDefGetVcpusMax(def)) { ++ virReportError(VIR_ERR_INVALID_ARG, ++ _("requested vcpus is greater than max allowable" ++ " vcpus for the live domain: %u > %u"), ++ nvcpus, virDomainDefGetVcpusMax(def)); ++ goto cleanup; ++ } ++ ++ if (persistentDef && nvcpus > virDomainDefGetVcpusMax(persistentDef)) { ++ virReportError(VIR_ERR_INVALID_ARG, ++ _("requested vcpus is greater than max allowable" ++ " vcpus for the persistent domain: %u > %u"), ++ nvcpus, virDomainDefGetVcpusMax(persistentDef)); ++ goto cleanup; ++ } ++ ++ if (def && qemuDomainSetVcpusLive(driver, cfg, vm, nvcpus) < 0) ++ goto cleanup; ++ ++ if (persistentDef) { ++ if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0) ++ goto cleanup; ++ ++ if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) ++ goto cleanup; ++ } ++ ++ ret = 0; ++ ++ cleanup: ++ virObjectUnref(cfg); ++ return ret; ++} ++ ++ ++static int ++qemuDomainSetVcpusFlags(virDomainPtr dom, ++ unsigned int nvcpus, + unsigned int flags) + { + virQEMUDriverPtr driver = dom->conn->privateData; +@@ -4872,7 +4918,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + virDomainDefPtr def; + virDomainDefPtr persistentDef; + int ret = -1; +- virQEMUDriverConfigPtr cfg = NULL; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG | +@@ -4882,70 +4927,31 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + if (!(vm = qemuDomObjFromDomain(dom))) + goto cleanup; + +- cfg = virQEMUDriverGetConfig(driver); +- + if (virDomainSetVcpusFlagsEnsureACL(dom->conn, vm->def, flags) < 0) + goto cleanup; + + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) + goto cleanup; + +- if (flags & VIR_DOMAIN_VCPU_GUEST) { +- ret = qemuDomainSetVcpusAgent(vm, nvcpus); +- goto endjob; +- } +- + if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) + goto endjob; + +- if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { ++ if (flags & VIR_DOMAIN_VCPU_GUEST) ++ ret = qemuDomainSetVcpusAgent(vm, nvcpus); ++ else if (flags & VIR_DOMAIN_VCPU_MAXIMUM) + ret = qemuDomainSetVcpusMax(driver, def, persistentDef, nvcpus); +- goto endjob; +- } +- +- if (def) { +- if (nvcpus > virDomainDefGetVcpusMax(def)) { +- virReportError(VIR_ERR_INVALID_ARG, +- _("requested vcpus is greater than max allowable" +- " vcpus for the live domain: %u > %u"), +- nvcpus, virDomainDefGetVcpusMax(def)); +- goto endjob; +- } +- } +- +- if (persistentDef) { +- if (nvcpus > virDomainDefGetVcpusMax(persistentDef)) { +- virReportError(VIR_ERR_INVALID_ARG, +- _("requested vcpus is greater than max allowable" +- " vcpus for the persistent domain: %u > %u"), +- nvcpus, virDomainDefGetVcpusMax(persistentDef)); +- goto endjob; +- } +- } +- +- if (def && qemuDomainSetVcpusLive(driver, cfg, vm, nvcpus) < 0) +- goto endjob; +- +- if (persistentDef) { +- if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0) +- goto endjob; +- +- if (virDomainSaveConfig(cfg->configDir, driver->caps, +- persistentDef) < 0) +- goto endjob; +- } +- +- ret = 0; ++ else ++ ret = qemuDomainSetVcpusInternal(driver, vm, def, persistentDef, nvcpus); + + endjob: + qemuDomainObjEndJob(driver, vm); + + cleanup: + virDomainObjEndAPI(&vm); +- virObjectUnref(cfg); + return ret; + } + ++ + static int + qemuDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) + { +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-driver-Validate-configuration-when-setting-maximum-vcpu-count.patch b/SOURCES/libvirt-qemu-driver-Validate-configuration-when-setting-maximum-vcpu-count.patch new file mode 100644 index 0000000..c1e80d0 --- /dev/null +++ b/SOURCES/libvirt-qemu-driver-Validate-configuration-when-setting-maximum-vcpu-count.patch @@ -0,0 +1,47 @@ +From 0cf2ad925d4c4258d08e85e80700d6b1163fff2c Mon Sep 17 00:00:00 2001 +Message-Id: <0cf2ad925d4c4258d08e85e80700d6b1163fff2c@dist-git> +From: Peter Krempa +Date: Fri, 26 Aug 2016 15:45:27 -0400 +Subject: [PATCH] qemu: driver: Validate configuration when setting maximum + vcpu count + +Partially fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1370066 +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Setting vcpu count when cpu topology is specified may result into an +invalid configuration. Since the topology can't be modified, reject the +setting if it doesn't match the requested topology. This will allow +fixing the topology in case it was broken. + +(cherry picked from commit 802fac97ec8c8bd5438ec5bcd4d13edb03b00fc2) +--- + src/qemu/qemu_driver.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index c8c7aee..8081417 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4736,6 +4736,18 @@ qemuDomainSetVcpusMax(virQEMUDriverPtr driver, + goto cleanup; + } + ++ if (persistentDef && persistentDef->cpu && persistentDef->cpu->sockets) { ++ /* allow setting a valid vcpu count for the topology so an invalid ++ * setting may be corrected via this API */ ++ if (nvcpus != persistentDef->cpu->sockets * ++ persistentDef->cpu->cores * ++ persistentDef->cpu->threads) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("CPU topology doesn't match the desired vcpu count")); ++ goto cleanup; ++ } ++ } ++ + if (virDomainDefSetVcpusMax(persistentDef, nvcpus, driver->xmlopt) < 0) + goto cleanup; + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-fail-on-attempts-to-use-filterref-for-non-tap-network-connections.patch b/SOURCES/libvirt-qemu-fail-on-attempts-to-use-filterref-for-non-tap-network-connections.patch deleted file mode 100644 index 0f32bf0..0000000 --- a/SOURCES/libvirt-qemu-fail-on-attempts-to-use-filterref-for-non-tap-network-connections.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 78ec2a308afb0becf048571091cc76e6ee5059a5 Mon Sep 17 00:00:00 2001 -Message-Id: <78ec2a308afb0becf048571091cc76e6ee5059a5@dist-git> -From: Laine Stump -Date: Mon, 10 Aug 2015 13:42:53 -0400 -Subject: [PATCH] qemu: fail on attempts to use for non-tap network - connections - -nwfilter uses iptables and ebtables, which only work properly on -tap-based network connections (*not* on macvtap, for example), but we -just ignore any elements for other types of networks, -potentially giving users a false sense of security. - -This patch checks the network type and fails/logs an error if any -domain has a when the connection isn't using a -tap device. - -This resolves: - - https://bugzilla.redhat.com/show_bug.cgi?id=1180011 - -(cherry picked from commit f4f1d18dc464a4fd436ce9cdd18d6f06fa7494e5) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_command.c | 11 +++++++++++ - src/qemu/qemu_hotplug.c | 11 +++++++++++ - 2 files changed, 22 insertions(+) - -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 1e5e244..d28063c 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -8347,6 +8347,17 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, - return -1; - } - -+ /* and only TAP devices support nwfilter rules */ -+ if (net->filter && -+ !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK || -+ actualType == VIR_DOMAIN_NET_TYPE_BRIDGE)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("filterref is not supported for " -+ "network interfaces of type %s"), -+ virDomainNetTypeToString(actualType)); -+ return -1; -+ } -+ - if (net->backend.tap && - !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK || - actualType == VIR_DOMAIN_NET_TYPE_BRIDGE)) { -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index 1ea397f..aabdb78 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -910,6 +910,17 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, - return -1; - } - -+ /* and only TAP devices support nwfilter rules */ -+ if (net->filter && -+ !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK || -+ actualType == VIR_DOMAIN_NET_TYPE_BRIDGE)) { -+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("filterref is not supported for " -+ "network interfaces of type %s"), -+ virDomainNetTypeToString(actualType)); -+ return -1; -+ } -+ - if (actualType == VIR_DOMAIN_NET_TYPE_BRIDGE || - actualType == VIR_DOMAIN_NET_TYPE_NETWORK) { - tapfdSize = vhostfdSize = net->driver.virtio.queues; --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-fix-some-api-cannot-work-when-disable-cpuset-in-conf.patch b/SOURCES/libvirt-qemu-fix-some-api-cannot-work-when-disable-cpuset-in-conf.patch deleted file mode 100644 index 329c1d4..0000000 --- a/SOURCES/libvirt-qemu-fix-some-api-cannot-work-when-disable-cpuset-in-conf.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 3f53107a34adf39f8e380a1036eda619b3460a2c Mon Sep 17 00:00:00 2001 -Message-Id: <3f53107a34adf39f8e380a1036eda619b3460a2c@dist-git> -From: Luyao Huang -Date: Thu, 6 Aug 2015 13:08:35 +0200 -Subject: [PATCH] qemu: fix some api cannot work when disable cpuset in conf - -If cpuset is disabled or not available, it libvirt must not use it. -Mainly for actions that do not need it and can use sched_setaffinity() -or numa_membind() instead, because they will fail without good reason. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1244664 - -Signed-off-by: Luyao Huang -(cherry picked from commit 1439eb32afc9f97378d1d121c0b5c80d2f84896c) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_cgroup.c | 16 ++++++++-------- - src/qemu/qemu_driver.c | 10 +++++++--- - 2 files changed, 15 insertions(+), 11 deletions(-) - -diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c -index ab21e12..e1a2827 100644 ---- a/src/qemu/qemu_cgroup.c -+++ b/src/qemu/qemu_cgroup.c -@@ -1025,10 +1025,6 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm) - if (virCgroupAddTask(cgroup_vcpu, priv->vcpupids[i]) < 0) - goto cleanup; - -- if (mem_mask && -- virCgroupSetCpusetMems(cgroup_vcpu, mem_mask) < 0) -- goto cleanup; -- - if (period || quota) { - if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0) - goto cleanup; -@@ -1038,6 +1034,10 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm) - if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { - virBitmapPtr cpumap = NULL; - -+ if (mem_mask && -+ virCgroupSetCpusetMems(cgroup_vcpu, mem_mask) < 0) -+ goto cleanup; -+ - /* try to use the default cpu maps */ - if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) - cpumap = priv->autoCpuset; -@@ -1202,15 +1202,15 @@ qemuSetupCgroupForIOThreads(virDomainObjPtr vm) - goto cleanup; - } - -- if (mem_mask && -- virCgroupSetCpusetMems(cgroup_iothread, mem_mask) < 0) -- goto cleanup; -- - /* Set iothreadpin in cgroup if iothreadpin xml is provided */ - if (virCgroupHasController(priv->cgroup, - VIR_CGROUP_CONTROLLER_CPUSET)) { - virBitmapPtr cpumask = NULL; - -+ if (mem_mask && -+ virCgroupSetCpusetMems(cgroup_iothread, mem_mask) < 0) -+ goto cleanup; -+ - if (def->iothreadids[i]->cpumask) - cpumask = def->iothreadids[i]->cpumask; - else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 6b715bf..bb0dc7e 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -4613,7 +4613,9 @@ qemuDomainAddCgroupForThread(virCgroupPtr cgroup, - if (virCgroupNewThread(cgroup, nameval, idx, true, &new_cgroup) < 0) - return NULL; - -- if (mem_mask && virCgroupSetCpusetMems(new_cgroup, mem_mask) < 0) -+ if (mem_mask && -+ virCgroupHasController(cgroup, VIR_CGROUP_CONTROLLER_CPUSET) && -+ virCgroupSetCpusetMems(new_cgroup, mem_mask) < 0) - goto error; - - /* Add pid/thread to the cgroup */ -@@ -4669,7 +4671,8 @@ qemuDomainHotplugPinThread(virBitmapPtr cpumask, - { - int ret = -1; - -- if (cgroup) { -+ if (cgroup && -+ virCgroupHasController(cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { - if (qemuSetupCgroupCpusetCpus(cgroup, cpumask) < 0) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("failed to set cpuset.cpus in cgroup for id %d"), -@@ -4912,7 +4915,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, - if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) - goto endjob; - -- if (def && !(flags & VIR_DOMAIN_VCPU_GUEST) && virNumaIsAvailable()) { -+ if (def && !(flags & VIR_DOMAIN_VCPU_GUEST) && virNumaIsAvailable() && -+ virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { - if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, - false, &cgroup_temp) < 0) - goto endjob; --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-format-intel-iommu-on-the-command-line.patch b/SOURCES/libvirt-qemu-format-intel-iommu-on-the-command-line.patch new file mode 100644 index 0000000..8bcc4a3 --- /dev/null +++ b/SOURCES/libvirt-qemu-format-intel-iommu-on-the-command-line.patch @@ -0,0 +1,127 @@ +From 9843ec11c61f08a0f0c9cc23397f28daf87b121a Mon Sep 17 00:00:00 2001 +Message-Id: <9843ec11c61f08a0f0c9cc23397f28daf87b121a@dist-git> +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 25 Jul 2016 10:24:58 +0200 +Subject: [PATCH] qemu: format intel-iommu on the command line +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + + + + +results in: + +-device intel-iommu + +https://bugzilla.redhat.com/show_bug.cgi?id=1235581 +(cherry picked from commit 4c382376da95bf84c9903e62c714ffa33f85d404) +Signed-off-by: Ján Tomko + +Conflicts: + tests - downstream does not assume QEMU_CAPS_SMP_TOPOLOGY +--- + src/qemu/qemu_command.c | 35 ++++++++++++++++++++++ + .../qemuxml2argvdata/qemuxml2argv-intel-iommu.args | 22 ++++++++++++++ + tests/qemuxml2argvtest.c | 2 ++ + 3 files changed, 59 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 300c01c..b87d9c3 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -6172,6 +6172,38 @@ qemuBuildBootCommandLine(virCommandPtr cmd, + + + static int ++qemuBuildIOMMUCommandLine(virCommandPtr cmd, ++ const virDomainDef *def, ++ virQEMUCapsPtr qemuCaps) ++{ ++ if (!def->iommu) ++ return 0; ++ ++ switch (def->iommu->model) { ++ case VIR_DOMAIN_IOMMU_MODEL_INTEL: ++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_INTEL_IOMMU)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("IOMMU device: '%s' is not supported with " ++ "this QEMU binary"), ++ virDomainIOMMUModelTypeToString(def->iommu->model)); ++ return -1; ++ } ++ if (!qemuDomainMachineIsQ35(def)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("IOMMU device: '%s' is only supported with " ++ "Q35 machines"), ++ virDomainIOMMUModelTypeToString(def->iommu->model)); ++ return -1; ++ } ++ virCommandAddArgList(cmd, "-device", "intel-iommu", NULL); ++ case VIR_DOMAIN_IOMMU_MODEL_LAST: ++ break; ++ } ++ return 0; ++} ++ ++ ++static int + qemuBuildGlobalControllerCommandLine(virCommandPtr cmd, + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) +@@ -9273,6 +9305,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, + if (qemuBuildBootCommandLine(cmd, def, qemuCaps, &emitBootindex) < 0) + goto error; + ++ if (qemuBuildIOMMUCommandLine(cmd, def, qemuCaps) < 0) ++ goto error; ++ + if (qemuBuildGlobalControllerCommandLine(cmd, def, qemuCaps) < 0) + goto error; + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args +new file mode 100644 +index 0000000..69e4490 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu.args +@@ -0,0 +1,22 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M q35 \ ++-m 214 \ ++-smp 1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot c \ ++-device intel-iommu \ ++-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \ ++-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x1 +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 51bab61..7fc10a8 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -2043,6 +2043,8 @@ mymain(void) + QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB); + + DO_TEST("acpi-table", NONE); ++ DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE, ++ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_INTEL_IOMMU); + + qemuTestDriverFree(&driver); + +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-getAutoDumpPath-return-value-should-be-dumpfile-not-domname.patch b/SOURCES/libvirt-qemu-getAutoDumpPath-return-value-should-be-dumpfile-not-domname.patch new file mode 100644 index 0000000..3bb8285 --- /dev/null +++ b/SOURCES/libvirt-qemu-getAutoDumpPath-return-value-should-be-dumpfile-not-domname.patch @@ -0,0 +1,38 @@ +From 96c19c7576d3c35298f2fa2757e98e8efb34354f Mon Sep 17 00:00:00 2001 +Message-Id: <96c19c7576d3c35298f2fa2757e98e8efb34354f@dist-git> +From: Yan Fu +Date: Wed, 13 Jul 2016 07:25:22 +0200 +Subject: [PATCH] qemu: getAutoDumpPath() return value should be dumpfile not + domname. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1354238 + +So we spend some time and effort constructing perfect file name +for an automatic coredump of a domain, but then just leak it and +use the domain name anyway. This is probably due to a silly +mistake that slipped even through review. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 8305322d244337b8af7d2464f88829b307cbb721) +Signed-off-by: Michal Privoznik +--- + src/qemu/qemu_driver.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 7bdf329..f1425b7 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -3877,7 +3877,8 @@ getAutoDumpPath(virQEMUDriverPtr driver, + timestr)); + + virObjectUnref(cfg); +- return domname; ++ VIR_FREE(domname); ++ return dumpfile; + } + + static void +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-hotplug-Add-support-for-VCPU-unplug.patch b/SOURCES/libvirt-qemu-hotplug-Add-support-for-VCPU-unplug.patch new file mode 100644 index 0000000..3ec0e30 --- /dev/null +++ b/SOURCES/libvirt-qemu-hotplug-Add-support-for-VCPU-unplug.patch @@ -0,0 +1,268 @@ +From 7693fcc1d88c699d9863287f144d6d37b0456100 Mon Sep 17 00:00:00 2001 +Message-Id: <7693fcc1d88c699d9863287f144d6d37b0456100@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:40 -0400 +Subject: [PATCH] qemu: hotplug: Add support for VCPU unplug + +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 + +This patch removes the old vcpu unplug code completely and replaces it +with the new code using device_del. The old hotplug code basically never +worked with any recent qemu and thus is useless. + +As the new code is using device_del all the implications of using it +are present. Contrary to the device deletion code, the vcpu deletion +code fails if the unplug request is not executed in time. + +(cherry picked from commit e3229f6e4461cd1721dc68a32e16ab1718ae716e) +--- + src/qemu/qemu_driver.c | 74 ++++++--------------------------- + src/qemu/qemu_hotplug.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/qemu/qemu_hotplug.h | 7 ++++ + 3 files changed, 128 insertions(+), 61 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 900aacd..1ef8bc4 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4067,11 +4067,15 @@ processDeviceDeletedEvent(virQEMUDriverPtr driver, + goto endjob; + } + +- if (virDomainDefFindDevice(vm->def, devAlias, &dev, true) < 0) +- goto endjob; ++ if (STRPREFIX(devAlias, "vcpu")) { ++ qemuDomainRemoveVcpuAlias(driver, vm, devAlias); ++ } else { ++ if (virDomainDefFindDevice(vm->def, devAlias, &dev, true) < 0) ++ goto endjob; + +- if (qemuDomainRemoveDevice(driver, vm, &dev) < 0) +- goto endjob; ++ if (qemuDomainRemoveDevice(driver, vm, &dev) < 0) ++ goto endjob; ++ } + + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) + VIR_WARN("unable to save domain status after removing device %s", +@@ -4666,60 +4670,6 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + + + static int +-qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, +- virDomainObjPtr vm, +- unsigned int vcpu) +-{ +- qemuDomainObjPrivatePtr priv = vm->privateData; +- virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); +- int ret = -1; +- int rc; +- int oldvcpus = virDomainDefGetVcpus(vm->def); +- +- if (!vcpuinfo->online) { +- virReportError(VIR_ERR_INVALID_ARG, +- _("vCPU '%u' is already offline"), vcpu); +- return -1; +- } +- +- vcpuinfo->online = false; +- +- qemuDomainObjEnterMonitor(driver, vm); +- +- rc = qemuMonitorSetCPU(priv->mon, vcpu, false); +- +- if (qemuDomainObjExitMonitor(driver, vm) < 0) +- goto cleanup; +- +- if (rc < 0) { +- virDomainAuditVcpu(vm, oldvcpus, oldvcpus - 1, "update", false); +- vcpuinfo->online = true; +- goto cleanup; +- } +- +- if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0) +- goto cleanup; +- +- if (qemuDomainValidateVcpuInfo(vm) < 0) { +- /* rollback vcpu count if the setting has failed */ +- virDomainAuditVcpu(vm, oldvcpus, oldvcpus - 1, "update", false); +- vcpuinfo->online = true; +- goto cleanup; +- } +- +- virDomainAuditVcpu(vm, oldvcpus, oldvcpus - 1, "update", true); +- +- if (virCgroupDelThread(priv->cgroup, VIR_CGROUP_THREAD_VCPU, vcpu) < 0) +- goto cleanup; +- +- ret = 0; +- +- cleanup: +- return ret; +-} +- +- +-static int + qemuDomainSetVcpusAgent(virDomainObjPtr vm, + unsigned int nvcpus) + { +@@ -4895,7 +4845,6 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + unsigned int nvcpus) + { + qemuDomainObjPrivatePtr priv = vm->privateData; +- size_t i; + virCgroupPtr cgroup_temp = NULL; + char *mem_mask = NULL; + char *all_nodes_str = NULL; +@@ -4932,8 +4881,11 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver, + break; + } + } else { +- for (i = virDomainDefGetVcpus(vm->def) - 1; i >= nvcpus; i--) { +- if ((rc = qemuDomainHotplugDelVcpu(driver, vm, i)) < 0) ++ for (nextvcpu = virDomainDefGetVcpusMax(vm->def) - 1; nextvcpu >= 0; nextvcpu--) { ++ if (!virBitmapIsBitSet(vcpumap, nextvcpu)) ++ continue; ++ ++ if ((rc = qemuDomainHotplugDelVcpu(driver, vm, nextvcpu)) < 0) + break; + } + } +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index a1a9bd1..f038be5 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -4346,3 +4346,111 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver, + qemuDomainResetDeviceRemoval(vm); + return ret; + } ++ ++ ++static int ++qemuDomainRemoveVcpu(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ unsigned int vcpu) ++{ ++ qemuDomainObjPrivatePtr priv = vm->privateData; ++ virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); ++ qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); ++ int oldvcpus = virDomainDefGetVcpus(vm->def); ++ unsigned int nvcpus = vcpupriv->vcpus; ++ size_t i; ++ ++ if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0) ++ return -1; ++ ++ /* validation requires us to set the expected state prior to calling it */ ++ for (i = vcpu; i < vcpu + nvcpus; i++) { ++ vcpuinfo = virDomainDefGetVcpu(vm->def, i); ++ vcpuinfo->online = false; ++ } ++ ++ if (qemuDomainValidateVcpuInfo(vm) < 0) { ++ /* rollback vcpu count if the setting has failed */ ++ virDomainAuditVcpu(vm, oldvcpus, oldvcpus - nvcpus, "update", false); ++ ++ for (i = vcpu; i < vcpu + nvcpus; i++) { ++ vcpuinfo = virDomainDefGetVcpu(vm->def, i); ++ vcpuinfo->online = true; ++ } ++ return -1; ++ } ++ ++ virDomainAuditVcpu(vm, oldvcpus, oldvcpus - nvcpus, "update", true); ++ ++ for (i = vcpu; i < vcpu + nvcpus; i++) { ++ vcpuinfo = virDomainDefGetVcpu(vm->def, i); ++ if (virCgroupDelThread(priv->cgroup, VIR_CGROUP_THREAD_VCPU, i) < 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++void ++qemuDomainRemoveVcpuAlias(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ const char *alias) ++{ ++ virDomainVcpuDefPtr vcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ size_t i; ++ ++ for (i = 0; i < virDomainDefGetVcpusMax(vm->def); i++) { ++ vcpu = virDomainDefGetVcpu(vm->def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ if (STREQ_NULLABLE(alias, vcpupriv->alias)) { ++ qemuDomainRemoveVcpu(driver, vm, i); ++ return; ++ } ++ } ++} ++ ++ ++int ++qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ unsigned int vcpu) ++{ ++ virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu); ++ qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); ++ int oldvcpus = virDomainDefGetVcpus(vm->def); ++ unsigned int nvcpus = vcpupriv->vcpus; ++ int rc; ++ ++ if (!vcpupriv->alias) { ++ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, ++ _("vcpu '%u' can't be unplugged"), vcpu); ++ return -1; ++ } ++ ++ qemuDomainMarkDeviceAliasForRemoval(vm, vcpupriv->alias); ++ ++ qemuDomainObjEnterMonitor(driver, vm); ++ ++ rc = qemuMonitorDelDevice(qemuDomainGetMonitor(vm), vcpupriv->alias); ++ ++ if (qemuDomainObjExitMonitor(driver, vm) < 0) ++ return -1; ++ ++ if (rc < 0) { ++ virDomainAuditVcpu(vm, oldvcpus, oldvcpus - nvcpus, "update", false); ++ return -1; ++ } ++ ++ if ((rc = qemuDomainWaitForDeviceRemoval(vm)) <= 0) { ++ if (rc == 0) ++ virReportError(VIR_ERR_OPERATION_FAILED, "%s", ++ _("vcpu unplug request timed out")); ++ ++ return -1; ++ } ++ ++ return qemuDomainRemoveVcpu(driver, vm, vcpu); ++} +diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h +index 165d345..b048cf4 100644 +--- a/src/qemu/qemu_hotplug.h ++++ b/src/qemu/qemu_hotplug.h +@@ -105,6 +105,13 @@ int qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainRNGDefPtr rng); + ++int qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ unsigned int vcpu); ++void qemuDomainRemoveVcpuAlias(virQEMUDriverPtr driver, ++ virDomainObjPtr vm, ++ const char *alias); ++ + int + qemuDomainChrInsert(virDomainDefPtr vmdef, + virDomainChrDefPtr chr); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-hotplug-Allow-marking-unplugged-devices-by-alias.patch b/SOURCES/libvirt-qemu-hotplug-Allow-marking-unplugged-devices-by-alias.patch new file mode 100644 index 0000000..68fbdb2 --- /dev/null +++ b/SOURCES/libvirt-qemu-hotplug-Allow-marking-unplugged-devices-by-alias.patch @@ -0,0 +1,56 @@ +From f2e19ab91dd4c09743bc571862edb23167da607d Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:39 -0400 +Subject: [PATCH] qemu: hotplug: Allow marking unplugged devices by alias + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Add a overlay function that takes the alias directly rather than +extracting it from a device info. + +(cherry picked from commit 00990d9f4c1792f08a53a9b584b3547f52bf2b2c) +--- + src/qemu/qemu_hotplug.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 51ab7c9..a1a9bd1 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -3457,8 +3457,8 @@ qemuDomainRemoveDevice(virQEMUDriverPtr driver, + + + static void +-qemuDomainMarkDeviceForRemoval(virDomainObjPtr vm, +- virDomainDeviceInfoPtr info) ++qemuDomainMarkDeviceAliasForRemoval(virDomainObjPtr vm, ++ const char *alias) + { + qemuDomainObjPrivatePtr priv = vm->privateData; + +@@ -3467,9 +3467,19 @@ qemuDomainMarkDeviceForRemoval(virDomainObjPtr vm, + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT)) + return; + +- priv->unplug.alias = info->alias; ++ priv->unplug.alias = alias; + } + ++ ++static void ++qemuDomainMarkDeviceForRemoval(virDomainObjPtr vm, ++ virDomainDeviceInfoPtr info) ++ ++{ ++ qemuDomainMarkDeviceAliasForRemoval(vm, info->alias); ++} ++ ++ + static void + qemuDomainResetDeviceRemoval(virDomainObjPtr vm) + { +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-hotplug-Fix-mlock-limit-handling-on-memory-hotplug.patch b/SOURCES/libvirt-qemu-hotplug-Fix-mlock-limit-handling-on-memory-hotplug.patch deleted file mode 100644 index c384d2c..0000000 --- a/SOURCES/libvirt-qemu-hotplug-Fix-mlock-limit-handling-on-memory-hotplug.patch +++ /dev/null @@ -1,159 +0,0 @@ -From dfdc5b0fc1fdf8c6d122df9578912ed90bfbabb4 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Thu, 12 Nov 2015 08:40:43 +0100 -Subject: [PATCH] qemu: hotplug: Fix mlock limit handling on memory hotplug - -https://bugzilla.redhat.com/show_bug.cgi?id=1280420 - -If mlock is required either due to use of VFIO hostdevs or due to the -fact that it's enabled it needs to be tweaked prior to adding new memory -or after removing a module. Add a helper to determine when it's -necessary and reuse it both on hotplug and hotunplug. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1273491 -(cherry picked from commit ec90b34acf7cf7d06a63908c39e21b63382a1967) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 27 +++++++++++++++++++++++++++ - src/qemu/qemu_domain.h | 1 + - src/qemu/qemu_hotplug.c | 41 ++++++++++++++++++++++++++++++++++------- - 3 files changed, 62 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 944817d..1f206fa 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3449,3 +3449,30 @@ qemuDomainGetMlockLimitBytes(virDomainDefPtr def) - - return memKB << 10; - } -+ -+ -+/** -+ * @def: domain definition -+ * -+ * Returns ture if the locked memory limit needs to be set or updated due to -+ * configuration or passthrough devices. -+ * */ -+bool -+qemuDomainRequiresMlock(virDomainDefPtr def) -+{ -+ size_t i; -+ -+ if (def->mem.locked) -+ return true; -+ -+ for (i = 0; i < def->nhostdevs; i++) { -+ virDomainHostdevDefPtr dev = def->hostdevs[i]; -+ -+ if (dev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && -+ dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && -+ dev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) -+ return true; -+ } -+ -+ return false; -+} -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index 54e7cd9..32f713b 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -476,5 +476,6 @@ int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, - virDomainObjPtr vm); - - unsigned long long qemuDomainGetMlockLimitBytes(virDomainDefPtr def); -+bool qemuDomainRequiresMlock(virDomainDefPtr def); - - #endif /* __QEMU_DOMAIN_H__ */ -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index d96f572..70aece4 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -1768,6 +1768,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - virJSONValuePtr props = NULL; - virObjectEventPtr event; - bool fix_balloon = false; -+ bool mlock = false; - int id; - int ret = -1; - -@@ -1802,16 +1803,26 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - goto cleanup; - } - -+ mlock = qemuDomainRequiresMlock(vm->def); -+ -+ if (mlock && -+ virProcessSetMaxMemLock(vm->pid, -+ qemuDomainGetMlockLimitBytes(vm->def)) < 0) { -+ mlock = false; -+ virJSONValueFree(props); -+ goto removedef; -+ } -+ - qemuDomainObjEnterMonitor(driver, vm); - if (qemuMonitorAddObject(priv->mon, backendType, objalias, props) < 0) -- goto removedef; -+ goto exit_monitor; - - if (qemuMonitorAddDevice(priv->mon, devstr) < 0) { - virErrorPtr err = virSaveLastError(); - ignore_value(qemuMonitorDelObject(priv->mon, objalias)); - virSetError(err); - virFreeError(err); -- goto removedef; -+ goto exit_monitor; - } - - if (qemuDomainObjExitMonitor(driver, vm) < 0) { -@@ -1846,17 +1857,27 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, - virDomainMemoryDefFree(mem); - return ret; - -+ exit_monitor: -+ if (qemuDomainObjExitMonitor(driver, vm) < 0) { -+ mem = NULL; -+ goto audit; -+ } -+ - removedef: -- if (qemuDomainObjExitMonitor(driver, vm) < 0) { -- mem = NULL; -- goto audit; -- } -- - if ((id = virDomainMemoryFindByDef(vm->def, mem)) >= 0) - mem = virDomainMemoryRemove(vm->def, id); - else - mem = NULL; - -+ /* reset the mlock limit */ -+ if (mlock) { -+ virErrorPtr err = virSaveLastError(); -+ ignore_value(virProcessSetMaxMemLock(vm->pid, -+ qemuDomainGetMlockLimitBytes(vm->def))); -+ virSetError(err); -+ virFreeError(err); -+ } -+ - goto audit; - } - -@@ -2952,6 +2973,12 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, - virDomainMemoryRemove(vm->def, idx); - - virDomainMemoryDefFree(mem); -+ -+ /* decrease the mlock limit after memory unplug if necessary */ -+ if (qemuDomainRequiresMlock(vm->def)) -+ ignore_value(virProcessSetMaxMemLock(vm->pid, -+ qemuDomainGetMlockLimitBytes(vm->def))); -+ - return 0; - } - --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-hotplug-Properly-clean-up-drive-backend-if-frontend-hotplug-fails.patch b/SOURCES/libvirt-qemu-hotplug-Properly-clean-up-drive-backend-if-frontend-hotplug-fails.patch deleted file mode 100644 index d278810..0000000 --- a/SOURCES/libvirt-qemu-hotplug-Properly-clean-up-drive-backend-if-frontend-hotplug-fails.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 8819ee8472dce467407ad40b4a60eb16d16aef66 Mon Sep 17 00:00:00 2001 -Message-Id: <8819ee8472dce467407ad40b4a60eb16d16aef66@dist-git> -From: Peter Krempa -Date: Mon, 14 Sep 2015 09:50:40 +0200 -Subject: [PATCH] qemu: hotplug: Properly clean up drive backend if frontend - hotplug fails - -Commit 8125113c added code that should remove the disk backend if the -fronted hotplug failed for any reason. The code had a bug though as it -used the disk string for unplug rather than the backend alias. Fix the -code by pre-creating an alias string and using it instead of the disk -string. In cases where qemu does not support QEMU_CAPS_DEVICE, we ignore -the unplug of the backend since we can't really create an alias in that -case. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1262399 -(cherry picked from commit 64c6695f1ad72f0a99faace5deb1caf7effa2275) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_hotplug.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index cfb071b..31c56ae 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -321,6 +321,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - qemuDomainObjPrivatePtr priv = vm->privateData; - char *devstr = NULL; - char *drivestr = NULL; -+ char *drivealias = NULL; - bool releaseaddr = false; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - const char *src = virDomainDiskGetSource(disk); -@@ -365,6 +366,9 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps))) - goto error; - -+ if (!(drivealias = qemuDeviceDriveHostAlias(disk, priv->qemuCaps))) -+ goto error; -+ - if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) - goto error; - } -@@ -379,10 +383,11 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - ret = qemuMonitorAddDevice(priv->mon, devstr); - if (ret < 0) { - virErrorPtr orig_err = virSaveLastError(); -- if (qemuMonitorDriveDel(priv->mon, drivestr) < 0) { -+ if (!drivealias || -+ qemuMonitorDriveDel(priv->mon, drivealias) < 0) { - VIR_WARN("Unable to remove drive %s (%s) after failed " - "qemuMonitorAddDevice", -- drivestr, devstr); -+ NULLSTR(drivealias), drivestr); - } - if (orig_err) { - virSetError(orig_err); -@@ -415,6 +420,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - cleanup: - VIR_FREE(devstr); - VIR_FREE(drivestr); -+ VIR_FREE(drivealias); - virObjectUnref(cfg); - return ret; - --- -2.5.2 - diff --git a/SOURCES/libvirt-qemu-hotplug-Reject-VFIO-hotplug-if-setting-RLIMIT_MEMLOCK-fails.patch b/SOURCES/libvirt-qemu-hotplug-Reject-VFIO-hotplug-if-setting-RLIMIT_MEMLOCK-fails.patch deleted file mode 100644 index 3e53dc5..0000000 --- a/SOURCES/libvirt-qemu-hotplug-Reject-VFIO-hotplug-if-setting-RLIMIT_MEMLOCK-fails.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 81421950fe905de097d4ac49f932a902937fb01b Mon Sep 17 00:00:00 2001 -Message-Id: <81421950fe905de097d4ac49f932a902937fb01b@dist-git> -From: Peter Krempa -Date: Fri, 20 Nov 2015 13:29:10 +0100 -Subject: [PATCH] qemu: hotplug: Reject VFIO hotplug if setting RLIMIT_MEMLOCK - fails - -Check the return value of virCommandSetMaxMemLock when hotplugging VFIO -PCI hostdevs and reject the hotplug if the memory limit can't be set. - -(cherry picked from commit baf55e1fa41a6aa77a5373891d70947ef24acadd) - -The code touched by this commit is removed in a later commit, -but including this in the backport gets rid of conflicts when -doing so. - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1283924 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_hotplug.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index 70aece4..785423a 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -1279,7 +1279,10 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, - } - - /* setup memory locking limits, that are necessary for VFIO */ -- virProcessSetMaxMemLock(vm->pid, qemuDomainGetMlockLimitBytes(vm->def)); -+ if (virProcessSetMaxMemLock(vm->pid, -+ qemuDomainGetMlockLimitBytes(vm->def)) < 0) -+ goto error; -+ - break; - - default: --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-hotplug-fix-changeable-media-ejection.patch b/SOURCES/libvirt-qemu-hotplug-fix-changeable-media-ejection.patch new file mode 100644 index 0000000..b5d1bdc --- /dev/null +++ b/SOURCES/libvirt-qemu-hotplug-fix-changeable-media-ejection.patch @@ -0,0 +1,40 @@ +From a38c567ff5d47e86e64d451da6a8715d667e3f2e Mon Sep 17 00:00:00 2001 +Message-Id: +From: Bjoern Walk +Date: Fri, 22 Jul 2016 13:50:59 +0200 +Subject: [PATCH] qemu: hotplug: fix changeable media ejection + +Since return code is checked globally at the end of the function, let's +make sure that we set it correctly at any point. + +This fixes a regression introduced in commit 0aa19f35 where the first +command to eject changeable media would fail unconditionally. + +Signed-off-by: Bjoern Walk +Reviewed-by: Boris Fiuczynski +(cherry picked from commit 6574a01a439cb86a2e53c72346ada8bc9033d140) + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1359071 + +Signed-off-by: Pavel Hrdina +--- + src/qemu/qemu_hotplug.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 36885a3..4a56cad 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -240,7 +240,8 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, + /* If the tray is present and tray change event is supported wait for it to open. */ + if (diskPriv->tray && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_TRAY_MOVED)) { +- if (qemuHotplugWaitForTrayEject(driver, vm, disk, driveAlias, force) < 0) ++ rc = qemuHotplugWaitForTrayEject(driver, vm, disk, driveAlias, force); ++ if (rc < 0) + goto error; + } else { + /* otherwise report possible errors from the attempt to eject the media*/ +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu-migration-Prepare-for-non-contiguous-vcpu-configurations.patch b/SOURCES/libvirt-qemu-migration-Prepare-for-non-contiguous-vcpu-configurations.patch new file mode 100644 index 0000000..238f9d8 --- /dev/null +++ b/SOURCES/libvirt-qemu-migration-Prepare-for-non-contiguous-vcpu-configurations.patch @@ -0,0 +1,142 @@ +From 6e1a906b835301aef822702b62b11969ae4d0f26 Mon Sep 17 00:00:00 2001 +Message-Id: <6e1a906b835301aef822702b62b11969ae4d0f26@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:34 -0400 +Subject: [PATCH] qemu: migration: Prepare for non-contiguous vcpu + configurations + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Introduce a new migration cookie flag that will be used for any +configurations that are not compatible with libvirt that would not +support the specific vcpu hotplug approach. This will make sure that old +libvirt does not fail to reproduce the configuration correctly. + +(cherry picked from commit 48e3d42889dcf3f7cec24c0bf4fd55c8da5f324b) +--- + src/qemu/qemu_domain.c | 35 +++++++++++++++++++++++++++++++++++ + src/qemu/qemu_domain.h | 3 +++ + src/qemu/qemu_migration.c | 16 ++++++++++++++-- + 3 files changed, 52 insertions(+), 2 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 7a71bfb..07c42a0 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5914,3 +5914,38 @@ qemuDomainPrepareChannel(virDomainChrDefPtr channel, + + return 0; + } ++ ++ ++/** ++ * qemuDomainVcpuHotplugIsInOrder: ++ * @def: domain definition ++ * ++ * Returns true if online vcpus were added in order (clustered behind vcpu0 ++ * with increasing order). ++ */ ++bool ++qemuDomainVcpuHotplugIsInOrder(virDomainDefPtr def) ++{ ++ size_t maxvcpus = virDomainDefGetVcpusMax(def); ++ virDomainVcpuDefPtr vcpu; ++ unsigned int prevorder = 0; ++ size_t seenonlinevcpus = 0; ++ size_t i; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ ++ if (!vcpu->online) ++ break; ++ ++ if (vcpu->order < prevorder) ++ break; ++ ++ if (vcpu->order > prevorder) ++ prevorder = vcpu->order; ++ ++ seenonlinevcpus++; ++ } ++ ++ return seenonlinevcpus == virDomainDefGetVcpus(def); ++} +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index 76b6904..3a80769 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -724,4 +724,7 @@ int qemuDomainPrepareChannel(virDomainChrDefPtr chr, + const char *domainChannelTargetDir) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + ++bool qemuDomainVcpuHotplugIsInOrder(virDomainDefPtr def) ++ ATTRIBUTE_NONNULL(1); ++ + #endif /* __QEMU_DOMAIN_H__ */ +diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c +index 463e624..ae70f2a 100644 +--- a/src/qemu/qemu_migration.c ++++ b/src/qemu/qemu_migration.c +@@ -92,6 +92,7 @@ enum qemuMigrationCookieFlags { + QEMU_MIGRATION_COOKIE_FLAG_NBD, + QEMU_MIGRATION_COOKIE_FLAG_STATS, + QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG, ++ QEMU_MIGRATION_COOKIE_FLAG_CPU_HOTPLUG, + + QEMU_MIGRATION_COOKIE_FLAG_LAST + }; +@@ -105,7 +106,8 @@ VIR_ENUM_IMPL(qemuMigrationCookieFlag, + "network", + "nbd", + "statistics", +- "memory-hotplug"); ++ "memory-hotplug", ++ "cpu-hotplug"); + + enum qemuMigrationCookieFeatures { + QEMU_MIGRATION_COOKIE_GRAPHICS = (1 << QEMU_MIGRATION_COOKIE_FLAG_GRAPHICS), +@@ -115,6 +117,7 @@ enum qemuMigrationCookieFeatures { + QEMU_MIGRATION_COOKIE_NBD = (1 << QEMU_MIGRATION_COOKIE_FLAG_NBD), + QEMU_MIGRATION_COOKIE_STATS = (1 << QEMU_MIGRATION_COOKIE_FLAG_STATS), + QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG = (1 << QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG), ++ QEMU_MIGRATION_COOKIE_CPU_HOTPLUG = (1 << QEMU_MIGRATION_COOKIE_FLAG_CPU_HOTPLUG), + }; + + typedef struct _qemuMigrationCookieGraphics qemuMigrationCookieGraphics; +@@ -1408,6 +1411,9 @@ qemuMigrationBakeCookie(qemuMigrationCookiePtr mig, + if (flags & QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG) + mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG; + ++ if (flags & QEMU_MIGRATION_COOKIE_CPU_HOTPLUG) ++ mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG; ++ + if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, mig))) + return -1; + +@@ -3195,6 +3201,11 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver, + vm->newDef && virDomainDefHasMemoryHotplug(vm->newDef))) + cookieFlags |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG; + ++ if (!qemuDomainVcpuHotplugIsInOrder(vm->def) || ++ ((flags & VIR_MIGRATE_PERSIST_DEST) && ++ vm->newDef && !qemuDomainVcpuHotplugIsInOrder(vm->newDef))) ++ cookieFlags |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG; ++ + if (!(mig = qemuMigrationEatCookie(driver, vm, NULL, 0, 0))) + goto cleanup; + +@@ -3690,7 +3701,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, + if (!(mig = qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen, + QEMU_MIGRATION_COOKIE_LOCKSTATE | + QEMU_MIGRATION_COOKIE_NBD | +- QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG))) ++ QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG | ++ QEMU_MIGRATION_COOKIE_CPU_HOTPLUG))) + goto cleanup; + + if (STREQ_NULLABLE(protocol, "rdma") && +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-migration-Properly-parse-memory-hotplug-migration-flag.patch b/SOURCES/libvirt-qemu-migration-Properly-parse-memory-hotplug-migration-flag.patch deleted file mode 100644 index db8570f..0000000 --- a/SOURCES/libvirt-qemu-migration-Properly-parse-memory-hotplug-migration-flag.patch +++ /dev/null @@ -1,41 +0,0 @@ -From cc29e312925235aeab6aba6afec5ff357e39155a Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Thu, 12 Nov 2015 07:45:26 +0100 -Subject: [PATCH] qemu: migration: Properly parse memory hotplug migration flag - -https://bugzilla.redhat.com/show_bug.cgi?id=1280419 [7.2.z] - -Since the flag was not enabled when 'eating' the migration cookie, -libvirt reported a bogus error when memory hotplug was enabled: - - unsupported migration cookie feature memory-hotplug - -The error was ignored though due to a bug in the code so it slipped -through testing. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1278404 -(cherry picked from commit f59808b724f99d43d042600455f55428a88a1ad9) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index d3e024e..8074156 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -3350,7 +3350,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, - - if (!(mig = qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen, - QEMU_MIGRATION_COOKIE_LOCKSTATE | -- QEMU_MIGRATION_COOKIE_NBD))) -+ QEMU_MIGRATION_COOKIE_NBD | -+ QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG))) - goto cleanup; - - if (STREQ_NULLABLE(protocol, "rdma") && --- -2.6.3 - diff --git a/SOURCES/libvirt-qemu-migration-Relax-enforcement-of-memory-hotplug-support.patch b/SOURCES/libvirt-qemu-migration-Relax-enforcement-of-memory-hotplug-support.patch deleted file mode 100644 index e27f3bb..0000000 --- a/SOURCES/libvirt-qemu-migration-Relax-enforcement-of-memory-hotplug-support.patch +++ /dev/null @@ -1,40 +0,0 @@ -From a5d2762f9a375c79703e446e9f8e428ffcd4a9d1 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:36 +0200 -Subject: [PATCH] qemu: migration: Relax enforcement of memory hotplug support - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -If the current live definition does not have memory hotplug enabled, but -the persistent one does libvirt would reject migration if the -destination does not support memory hotplug even if the user didn't want -to persist the VM at the destination and thus the XML containing the -memory hotplug definition would not be used. To fix this corner case the -code will check for memory hotplug in the newDef only if -VIR_MIGRATE_PERSIST_DEST was used. - -(cherry picked from commit a98e5a78153644e0f13b34c69d60b7a866c4401a) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_migration.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c -index cee82fa..58fcb94 100644 ---- a/src/qemu/qemu_migration.c -+++ b/src/qemu/qemu_migration.c -@@ -2989,7 +2989,8 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver, - } - - if (vm->def->mem.max_memory || -- (vm->newDef && -+ ((flags & VIR_MIGRATE_PERSIST_DEST) && -+ vm->newDef && - vm->newDef->mem.max_memory)) - cookieFlags |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG; - --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-monitor-Add-algorithm-for-combining-query-hotpluggable-cpus-data.patch b/SOURCES/libvirt-qemu-monitor-Add-algorithm-for-combining-query-hotpluggable-cpus-data.patch new file mode 100644 index 0000000..252bdd9 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Add-algorithm-for-combining-query-hotpluggable-cpus-data.patch @@ -0,0 +1,352 @@ +From 45a8d716bb066cb05d59e5aeb9c46814f0de3b01 Mon Sep 17 00:00:00 2001 +Message-Id: <45a8d716bb066cb05d59e5aeb9c46814f0de3b01@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:24 -0400 +Subject: [PATCH] qemu: monitor: Add algorithm for combining + query-(hotpluggable-)-cpus data + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +For hotplug purposes it's necessary to retrieve data using +query-hotpluggable-cpus while the old query-cpus API report thread IDs +and order of hotplug. + +This patch adds code that merges the data using a rather non-trivial +algorithm and fills the data to the qemuMonitorCPUInfo structure for +adding to appropriate place in the domain definition. + +(cherry picked from commit 9bbbc88a8f343be6217c49fc4eef033376c0c648) +--- + src/qemu/qemu_domain.c | 2 +- + src/qemu/qemu_monitor.c | 205 ++++++++++++++++++++++++++++++++++++++++++++++-- + src/qemu/qemu_monitor.h | 23 +++++- + 3 files changed, 220 insertions(+), 10 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index be602ef..ebd0d9e 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5754,7 +5754,7 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + +- rc = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &info, maxvcpus); ++ rc = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &info, maxvcpus, false); + + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 573c94a..1f633fc 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1651,13 +1651,36 @@ qemuMonitorSystemReset(qemuMonitorPtr mon) + } + + ++static void ++qemuMonitorCPUInfoClear(qemuMonitorCPUInfoPtr cpus, ++ size_t ncpus) ++{ ++ size_t i; ++ ++ for (i = 0; i < ncpus; i++) { ++ cpus[i].id = 0; ++ cpus[i].socket_id = -1; ++ cpus[i].core_id = -1; ++ cpus[i].thread_id = -1; ++ cpus[i].vcpus = 0; ++ cpus[i].tid = 0; ++ ++ VIR_FREE(cpus[i].qom_path); ++ VIR_FREE(cpus[i].alias); ++ VIR_FREE(cpus[i].type); ++ } ++} ++ ++ + void + qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr cpus, +- size_t ncpus ATTRIBUTE_UNUSED) ++ size_t ncpus) + { + if (!cpus) + return; + ++ qemuMonitorCPUInfoClear(cpus, ncpus); ++ + VIR_FREE(cpus); + } + +@@ -1678,10 +1701,156 @@ qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, + + + /** ++ * Legacy approach doesn't allow out of order cpus, thus no complex matching ++ * algorithm is necessary */ ++static void ++qemuMonitorGetCPUInfoLegacy(struct qemuMonitorQueryCpusEntry *cpuentries, ++ size_t ncpuentries, ++ qemuMonitorCPUInfoPtr vcpus, ++ size_t maxvcpus) ++{ ++ size_t i; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ if (i < ncpuentries) ++ vcpus[i].tid = cpuentries[i].tid; ++ ++ /* for legacy hotplug to work we need to fake the vcpu count added by ++ * enabling a given vcpu */ ++ vcpus[i].vcpus = 1; ++ } ++} ++ ++ ++/** ++ * qemuMonitorGetCPUInfoHotplug: ++ * ++ * This function stitches together data retrieved via query-hotpluggable-cpus ++ * which returns entities on the hotpluggable level (which may describe more ++ * than one guest logical vcpu) with the output of query-cpus, having an entry ++ * per enabled guest logical vcpu. ++ * ++ * query-hotpluggable-cpus conveys following information: ++ * - topology information and number of logical vcpus this entry creates ++ * - device type name of the entry that needs to be used when hotplugging ++ * - qom path in qemu which can be used to map the entry against query-cpus ++ * ++ * query-cpus conveys following information: ++ * - thread id of a given guest logical vcpu ++ * - order in which the vcpus were inserted ++ * - qom path to allow mapping the two together ++ * ++ * The libvirt's internal structure has an entry for each possible (even ++ * disabled) guest vcpu. The purpose is to map the data together so that we are ++ * certain of the thread id mapping and the information required for vcpu ++ * hotplug. ++ * ++ * This function returns 0 on success and -1 on error, but does not report ++ * libvirt errors so that fallback approach can be used. ++ */ ++static int ++qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotplugvcpus, ++ size_t nhotplugvcpus, ++ struct qemuMonitorQueryCpusEntry *cpuentries, ++ size_t ncpuentries, ++ qemuMonitorCPUInfoPtr vcpus, ++ size_t maxvcpus) ++{ ++ char *tmp; ++ int order = 1; ++ size_t totalvcpus = 0; ++ size_t i; ++ size_t j; ++ ++ /* ensure that the total vcpu count reported by query-hotpluggable-cpus equals ++ * to the libvirt maximum cpu count */ ++ for (i = 0; i < nhotplugvcpus; i++) ++ totalvcpus += hotplugvcpus[i].vcpus; ++ ++ /* trim '/thread...' suffix from the data returned by query-cpus */ ++ for (i = 0; i < ncpuentries; i++) { ++ if (cpuentries[i].qom_path && ++ (tmp = strstr(cpuentries[i].qom_path, "/thread"))) ++ *tmp = '\0'; ++ } ++ ++ if (totalvcpus != maxvcpus) { ++ VIR_DEBUG("expected '%zu' total vcpus got '%zu'", maxvcpus, totalvcpus); ++ return -1; ++ } ++ ++ /* Note the order in which the hotpluggable entities are inserted by ++ * matching them to the query-cpus entries */ ++ for (i = 0; i < ncpuentries; i++) { ++ for (j = 0; j < nhotplugvcpus; j++) { ++ if (!cpuentries[i].qom_path || ++ !hotplugvcpus[j].qom_path || ++ STRNEQ(cpuentries[i].qom_path, hotplugvcpus[j].qom_path)) ++ continue; ++ ++ /* add ordering info for hotpluggable entries */ ++ if (hotplugvcpus[j].enable_id == 0) ++ hotplugvcpus[j].enable_id = order++; ++ ++ break; ++ } ++ } ++ ++ /* transfer appropriate data from the hotpluggable list to corresponding ++ * entries. the entries returned by qemu may in fact describe multiple ++ * logical vcpus in the guest */ ++ j = 0; ++ for (i = 0; i < nhotplugvcpus; i++) { ++ vcpus[j].socket_id = hotplugvcpus[i].socket_id; ++ vcpus[j].core_id = hotplugvcpus[i].core_id; ++ vcpus[j].thread_id = hotplugvcpus[i].thread_id; ++ vcpus[j].vcpus = hotplugvcpus[i].vcpus; ++ VIR_STEAL_PTR(vcpus[j].qom_path, hotplugvcpus[i].qom_path); ++ VIR_STEAL_PTR(vcpus[j].alias, hotplugvcpus[i].alias); ++ VIR_STEAL_PTR(vcpus[j].type, hotplugvcpus[i].type); ++ vcpus[j].id = hotplugvcpus[i].enable_id; ++ ++ /* skip over vcpu entries covered by this hotpluggable entry */ ++ j += hotplugvcpus[i].vcpus; ++ } ++ ++ /* match entries from query cpus to the output array taking into account ++ * multi-vcpu objects */ ++ for (j = 0; j < ncpuentries; j++) { ++ /* find the correct entry or beginning of group of entries */ ++ for (i = 0; i < maxvcpus; i++) { ++ if (cpuentries[j].qom_path && vcpus[i].qom_path && ++ STREQ(cpuentries[j].qom_path, vcpus[i].qom_path)) ++ break; ++ } ++ ++ if (i == maxvcpus) { ++ VIR_DEBUG("too many query-cpus entries for a given " ++ "query-hotpluggable-cpus entry"); ++ return -1; ++ } ++ ++ if (vcpus[i].vcpus != 1) { ++ /* find a possibly empty vcpu thread for core granularity systems */ ++ for (; i < maxvcpus; i++) { ++ if (vcpus[i].tid == 0) ++ break; ++ } ++ } ++ ++ vcpus[i].tid = cpuentries[j].tid; ++ } ++ ++ return 0; ++} ++ ++ ++/** + * qemuMonitorGetCPUInfo: + * @mon: monitor + * @vcpus: pointer filled by array of qemuMonitorCPUInfo structures + * @maxvcpus: total possible number of vcpus ++ * @hotplug: query data relevant for hotplug support + * + * Detects VCPU information. If qemu doesn't support or fails reporting + * information this function will return success as other parts of libvirt +@@ -1693,20 +1862,32 @@ qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, + int + qemuMonitorGetCPUInfo(qemuMonitorPtr mon, + qemuMonitorCPUInfoPtr *vcpus, +- size_t maxvcpus) ++ size_t maxvcpus, ++ bool hotplug) + { +- qemuMonitorCPUInfoPtr info = NULL; ++ struct qemuMonitorQueryHotpluggableCpusEntry *hotplugcpus = NULL; ++ size_t nhotplugcpus = 0; + struct qemuMonitorQueryCpusEntry *cpuentries = NULL; + size_t ncpuentries = 0; +- size_t i; + int ret = -1; + int rc; ++ qemuMonitorCPUInfoPtr info = NULL; + +- QEMU_CHECK_MONITOR(mon); ++ if (hotplug) ++ QEMU_CHECK_MONITOR_JSON(mon); ++ else ++ QEMU_CHECK_MONITOR(mon); + + if (VIR_ALLOC_N(info, maxvcpus) < 0) + return -1; + ++ /* initialize a few non-zero defaults */ ++ qemuMonitorCPUInfoClear(info, maxvcpus); ++ ++ if (hotplug && ++ (qemuMonitorJSONGetHotpluggableCPUs(mon, &hotplugcpus, &nhotplugcpus)) < 0) ++ goto cleanup; ++ + if (mon->json) + rc = qemuMonitorJSONQueryCPUs(mon, &cpuentries, &ncpuentries); + else +@@ -1721,15 +1902,23 @@ qemuMonitorGetCPUInfo(qemuMonitorPtr mon, + goto cleanup; + } + +- for (i = 0; i < ncpuentries; i++) +- info[i].tid = cpuentries[i].tid; ++ if (!hotplugcpus || ++ qemuMonitorGetCPUInfoHotplug(hotplugcpus, nhotplugcpus, ++ cpuentries, ncpuentries, ++ info, maxvcpus) < 0) { ++ /* Fallback to the legacy algorithm. Hotplug paths will make sure that ++ * the apropriate data is present */ ++ qemuMonitorCPUInfoClear(info, maxvcpus); ++ qemuMonitorGetCPUInfoLegacy(cpuentries, ncpuentries, info, maxvcpus); ++ } + + VIR_STEAL_PTR(*vcpus, info); + ret = 0; + + cleanup: +- qemuMonitorCPUInfoFree(info, maxvcpus); ++ qemuMonitorQueryHotpluggableCpusFree(hotplugcpus, nhotplugcpus); + qemuMonitorQueryCpusFree(cpuentries, ncpuentries); ++ qemuMonitorCPUInfoFree(info, maxvcpus); + return ret; + } + +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 027a7a9..d07e60c 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -409,6 +409,9 @@ struct qemuMonitorQueryHotpluggableCpusEntry { + int socket_id; + int core_id; + int thread_id; ++ ++ /* internal data */ ++ int enable_id; + }; + void qemuMonitorQueryHotpluggableCpusFree(struct qemuMonitorQueryHotpluggableCpusEntry *entries, + size_t nentries); +@@ -416,6 +419,23 @@ void qemuMonitorQueryHotpluggableCpusFree(struct qemuMonitorQueryHotpluggableCpu + + struct _qemuMonitorCPUInfo { + pid_t tid; ++ int id; /* order of enabling of the given cpu */ ++ ++ /* topology info for hotplug purposes. Hotplug of given vcpu impossible if ++ * all entries are -1 */ ++ int socket_id; ++ int core_id; ++ int thread_id; ++ unsigned int vcpus; /* number of vcpus added if given entry is hotplugged */ ++ ++ /* name of the qemu type to add in case of hotplug */ ++ char *type; ++ ++ /* alias of an hotpluggable entry. Entries with alias can be hot-unplugged */ ++ char *alias; ++ ++ /* internal for use in the matching code */ ++ char *qom_path; + }; + typedef struct _qemuMonitorCPUInfo qemuMonitorCPUInfo; + typedef qemuMonitorCPUInfo *qemuMonitorCPUInfoPtr; +@@ -424,7 +444,8 @@ void qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr list, + size_t nitems); + int qemuMonitorGetCPUInfo(qemuMonitorPtr mon, + qemuMonitorCPUInfoPtr *vcpus, +- size_t maxvcpus); ++ size_t maxvcpus, ++ bool hotplug); + + int qemuMonitorGetVirtType(qemuMonitorPtr mon, + virDomainVirtType *virtType); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Add-do-while-block-to-QEMU_CHECK_MONITOR_FULL.patch b/SOURCES/libvirt-qemu-monitor-Add-do-while-block-to-QEMU_CHECK_MONITOR_FULL.patch new file mode 100644 index 0000000..27d9d2a --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Add-do-while-block-to-QEMU_CHECK_MONITOR_FULL.patch @@ -0,0 +1,56 @@ +From fd3758c438af5b2c4b571916bbe6bc4bf6e0bf4e Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:04 -0400 +Subject: [PATCH] qemu: monitor: Add do-while block to QEMU_CHECK_MONITOR_FULL + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Assure that it's just one statement to avoid problems when used with +conditions. + +(cherry picked from commit 0f889e725e2e132e1eed62de38995677abc5da41) +--- + src/qemu/qemu_monitor.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 2931f82..65e7a11 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -112,17 +112,20 @@ struct _qemuMonitor { + * monitor. + */ + #define QEMU_CHECK_MONITOR_FULL(mon, force_json, exit) \ +- if (!mon) { \ +- virReportError(VIR_ERR_INVALID_ARG, "%s", \ +- _("monitor must not be NULL")); \ +- exit; \ +- } \ +- VIR_DEBUG("mon:%p vm:%p json:%d fd:%d", mon, mon->vm, mon->json, mon->fd); \ +- if (force_json && !mon->json) { \ +- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", \ +- _("JSON monitor is required")); \ +- exit; \ +- } ++ do { \ ++ if (!mon) { \ ++ virReportError(VIR_ERR_INVALID_ARG, "%s", \ ++ _("monitor must not be NULL")); \ ++ exit; \ ++ } \ ++ VIR_DEBUG("mon:%p vm:%p json:%d fd:%d", \ ++ mon, mon->vm, mon->json, mon->fd); \ ++ if (force_json && !mon->json) { \ ++ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", \ ++ _("JSON monitor is required")); \ ++ exit; \ ++ } \ ++ } while (0) + + /* Check monitor and return NULL on error */ + #define QEMU_CHECK_MONITOR_NULL(mon) \ +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Add-monitor-API-for-device_add-supporting-JSON-objects.patch b/SOURCES/libvirt-qemu-monitor-Add-monitor-API-for-device_add-supporting-JSON-objects.patch new file mode 100644 index 0000000..421b245 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Add-monitor-API-for-device_add-supporting-JSON-objects.patch @@ -0,0 +1,129 @@ +From 1d8021ecf7909b3d4cd1a3179c3bac8e9ec4d25b Mon Sep 17 00:00:00 2001 +Message-Id: <1d8021ecf7909b3d4cd1a3179c3bac8e9ec4d25b@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:03 -0400 +Subject: [PATCH] qemu: monitor: Add monitor API for device_add supporting JSON + objects + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Rather than formatting a string and splitting it back to a JSON object +add API that will take a JSON object directly. + +(cherry picked from commit 78806cd21b97aa56f37b0cffd6d4cfe306811107) +--- + src/qemu/qemu_monitor.c | 18 ++++++++++++++++++ + src/qemu/qemu_monitor.h | 2 ++ + src/qemu/qemu_monitor_json.c | 28 ++++++++++++++++++---------- + src/qemu/qemu_monitor_json.h | 2 ++ + 4 files changed, 40 insertions(+), 10 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index e3a5e0b..2931f82 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -2766,6 +2766,24 @@ qemuMonitorAddDevice(qemuMonitorPtr mon, + + + /** ++ * qemuMonitorAddDeviceArgs: ++ * @mon: monitor object ++ * @args: arguments for device add, consumed on success or failure ++ * ++ * Adds a device described by @args. Requires JSON monitor. ++ * Returns 0 on success -1 on error. ++ */ ++int ++qemuMonitorAddDeviceArgs(qemuMonitorPtr mon, ++ virJSONValuePtr args) ++{ ++ QEMU_CHECK_MONITOR_JSON(mon); ++ ++ return qemuMonitorJSONAddDeviceArgs(mon, args); ++} ++ ++ ++/** + * qemuMonitorAddObject: + * @mon: Pointer to monitor object + * @type: Type name of object to add +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 6e4e09d..b2f20e9 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -683,6 +683,8 @@ int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon, + const char *bus, + virPCIDeviceAddress *guestAddr); + ++int qemuMonitorAddDeviceArgs(qemuMonitorPtr mon, ++ virJSONValuePtr args); + int qemuMonitorAddDevice(qemuMonitorPtr mon, + const char *devicestr); + +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index 74bbf75..fae589f 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -3586,20 +3586,15 @@ int qemuMonitorJSONDelDevice(qemuMonitorPtr mon, + } + + +-int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, +- const char *devicestr) ++int ++qemuMonitorJSONAddDeviceArgs(qemuMonitorPtr mon, ++ virJSONValuePtr args) + { + int ret = -1; +- virJSONValuePtr cmd; ++ virJSONValuePtr cmd = NULL; + virJSONValuePtr reply = NULL; +- virJSONValuePtr args; + +- cmd = qemuMonitorJSONMakeCommand("device_add", NULL); +- if (!cmd) +- return -1; +- +- args = qemuMonitorJSONKeywordStringToJSON(devicestr, "driver"); +- if (!args) ++ if (!(cmd = qemuMonitorJSONMakeCommand("device_add", NULL))) + goto cleanup; + + if (virJSONValueObjectAppend(cmd, "arguments", args) < 0) +@@ -3621,6 +3616,19 @@ int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, + } + + ++int ++qemuMonitorJSONAddDevice(qemuMonitorPtr mon, ++ const char *devicestr) ++{ ++ virJSONValuePtr args; ++ ++ if (!(args = qemuMonitorJSONKeywordStringToJSON(devicestr, "driver"))) ++ return -1; ++ ++ return qemuMonitorJSONAddDeviceArgs(mon, args); ++} ++ ++ + int qemuMonitorJSONAddObject(qemuMonitorPtr mon, + const char *type, + const char *objalias, +diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h +index 114b567..3fe5cf1 100644 +--- a/src/qemu/qemu_monitor_json.h ++++ b/src/qemu/qemu_monitor_json.h +@@ -215,6 +215,8 @@ int qemuMonitorJSONAttachPCIDiskController(qemuMonitorPtr mon, + const char *bus, + virPCIDeviceAddress *guestAddr); + ++int qemuMonitorJSONAddDeviceArgs(qemuMonitorPtr mon, ++ virJSONValuePtr args); + int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, + const char *devicestr); + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Add-support-for-calling-query-hotpluggable-cpus.patch b/SOURCES/libvirt-qemu-monitor-Add-support-for-calling-query-hotpluggable-cpus.patch new file mode 100644 index 0000000..1df4068 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Add-support-for-calling-query-hotpluggable-cpus.patch @@ -0,0 +1,248 @@ +From 4da15317e206ea8dede92b8b6e37805473df5a2f Mon Sep 17 00:00:00 2001 +Message-Id: <4da15317e206ea8dede92b8b6e37805473df5a2f@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:23 -0400 +Subject: [PATCH] qemu: monitor: Add support for calling + query-hotpluggable-cpus + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Add support for retrieving information regarding hotpluggable cpu units +supported by qemu. Data returned by the command carries information +needed to figure out the granularity of hotplug, the necessary cpu type +name and the topology information. + +Note that qemu doesn't specify any particular order of the entries thus +it's necessary sort them by socket_id, core_id and thread_id to the +order libvirt expects. + +(cherry picked from commit 1213f0f8a50d9d3b782e3c336e3373c35c652a55) +--- + src/qemu/qemu_monitor.h | 16 ++++ + src/qemu/qemu_monitor_json.c | 170 +++++++++++++++++++++++++++++++++++++++++++ + src/qemu/qemu_monitor_json.h | 5 ++ + 3 files changed, 191 insertions(+) + +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 83396a4..027a7a9 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -398,6 +398,22 @@ void qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, + size_t nentries); + + ++struct qemuMonitorQueryHotpluggableCpusEntry { ++ char *type; /* name of the cpu to use with device_add */ ++ unsigned int vcpus; /* count of virtual cpus in the guest this entry adds */ ++ char *qom_path; /* full device qom path only present for online cpus */ ++ char *alias; /* device alias, may be NULL for non-hotpluggable entities */ ++ ++ /* topology information -1 if qemu didn't report given parameter */ ++ int node_id; ++ int socket_id; ++ int core_id; ++ int thread_id; ++}; ++void qemuMonitorQueryHotpluggableCpusFree(struct qemuMonitorQueryHotpluggableCpusEntry *entries, ++ size_t nentries); ++ ++ + struct _qemuMonitorCPUInfo { + pid_t tid; + }; +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index a59b195..1871723 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -7209,3 +7209,173 @@ qemuMonitorJSONGetRTCTime(qemuMonitorPtr mon, + virJSONValueFree(reply); + return ret; + } ++ ++ ++void ++qemuMonitorQueryHotpluggableCpusFree(struct qemuMonitorQueryHotpluggableCpusEntry *entries, ++ size_t nentries) ++{ ++ struct qemuMonitorQueryHotpluggableCpusEntry *entry; ++ size_t i; ++ ++ if (!entries) ++ return; ++ ++ for (i = 0; i < nentries; i++) { ++ entry = entries + i; ++ ++ VIR_FREE(entry->type); ++ VIR_FREE(entry->qom_path); ++ VIR_FREE(entry->alias); ++ } ++ ++ VIR_FREE(entries); ++} ++ ++ ++/** ++ * [{ ++ * "props": { ++ * "core-id": 0, ++ * "thread-id": 0, ++ * "socket-id": 0 ++ * }, ++ * "vcpus-count": 1, ++ * "qom-path": "/machine/unattached/device[0]", ++ * "type": "qemu64-x86_64-cpu" ++ * }, ++ * {...} ++ * ] ++ */ ++static int ++qemuMonitorJSONProcessHotpluggableCpusReply(virJSONValuePtr vcpu, ++ struct qemuMonitorQueryHotpluggableCpusEntry *entry) ++{ ++ virJSONValuePtr props; ++ const char *tmp; ++ ++ if (!(tmp = virJSONValueObjectGetString(vcpu, "type"))) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("query-hotpluggable-cpus didn't return device type")); ++ return -1; ++ } ++ ++ if (VIR_STRDUP(entry->type, tmp) < 0) ++ return -1; ++ ++ if (virJSONValueObjectGetNumberUint(vcpu, "vcpus-count", &entry->vcpus) < 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("query-hotpluggable-cpus didn't return vcpus-count")); ++ return -1; ++ } ++ ++ if (!(props = virJSONValueObjectGetObject(vcpu, "props"))) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("query-hotpluggable-cpus didn't return device props")); ++ return -1; ++ } ++ ++ entry->node_id = -1; ++ entry->socket_id = -1; ++ entry->core_id = -1; ++ entry->thread_id = -1; ++ ++ ignore_value(virJSONValueObjectGetNumberInt(props, "node-id", &entry->node_id)); ++ ignore_value(virJSONValueObjectGetNumberInt(props, "socket-id", &entry->socket_id)); ++ ignore_value(virJSONValueObjectGetNumberInt(props, "core-id", &entry->core_id)); ++ ignore_value(virJSONValueObjectGetNumberInt(props, "thread-id", &entry->thread_id)); ++ ++ if (entry->node_id == -1 && entry->socket_id == -1 && ++ entry->core_id == -1 && entry->thread_id == -1) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("query-hotpluggable-cpus entry doesn't report " ++ "topology information")); ++ return -1; ++ } ++ ++ /* qom path is not present unless the vCPU is online */ ++ if ((tmp = virJSONValueObjectGetString(vcpu, "qom-path"))) { ++ if (VIR_STRDUP(entry->qom_path, tmp) < 0) ++ return -1; ++ ++ /* alias is the part after last slash having a "vcpu" prefix */ ++ if ((tmp = strrchr(tmp, '/')) && STRPREFIX(tmp + 1, "vcpu")) { ++ if (VIR_STRDUP(entry->alias, tmp + 1) < 0) ++ return -1; ++ } ++ } ++ ++ return 0; ++} ++ ++ ++static int ++qemuMonitorQueryHotpluggableCpusEntrySort(const void *p1, ++ const void *p2) ++{ ++ const struct qemuMonitorQueryHotpluggableCpusEntry *a = p1; ++ const struct qemuMonitorQueryHotpluggableCpusEntry *b = p2; ++ ++ if (a->socket_id != b->socket_id) ++ return a->socket_id - b->socket_id; ++ ++ if (a->core_id != b->core_id) ++ return a->core_id - b->core_id; ++ ++ return a->thread_id - b->thread_id; ++} ++ ++ ++int ++qemuMonitorJSONGetHotpluggableCPUs(qemuMonitorPtr mon, ++ struct qemuMonitorQueryHotpluggableCpusEntry **entries, ++ size_t *nentries) ++{ ++ struct qemuMonitorQueryHotpluggableCpusEntry *info = NULL; ++ ssize_t ninfo = 0; ++ int ret = -1; ++ size_t i; ++ virJSONValuePtr data; ++ virJSONValuePtr cmd; ++ virJSONValuePtr reply = NULL; ++ virJSONValuePtr vcpu; ++ ++ if (!(cmd = qemuMonitorJSONMakeCommand("query-hotpluggable-cpus", NULL))) ++ return -1; ++ ++ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) ++ goto cleanup; ++ ++ if (qemuMonitorJSONCheckError(cmd, reply) < 0) ++ goto cleanup; ++ ++ data = virJSONValueObjectGet(reply, "return"); ++ ++ if ((ninfo = virJSONValueArraySize(data)) < 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("query-hotpluggable-cpus reply is not an array")); ++ goto cleanup; ++ } ++ ++ if (VIR_ALLOC_N(info, ninfo) < 0) ++ goto cleanup; ++ ++ for (i = 0; i < ninfo; i++) { ++ vcpu = virJSONValueArrayGet(data, i); ++ ++ if (qemuMonitorJSONProcessHotpluggableCpusReply(vcpu, info + i) < 0) ++ goto cleanup; ++ } ++ ++ qsort(info, ninfo, sizeof(*info), qemuMonitorQueryHotpluggableCpusEntrySort); ++ ++ VIR_STEAL_PTR(*entries, info); ++ *nentries = ninfo; ++ ret = 0; ++ ++ cleanup: ++ qemuMonitorQueryHotpluggableCpusFree(info, ninfo); ++ virJSONValueFree(cmd); ++ virJSONValueFree(reply); ++ return ret; ++} +diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h +index 2a439da..4db6067 100644 +--- a/src/qemu/qemu_monitor_json.h ++++ b/src/qemu/qemu_monitor_json.h +@@ -504,4 +504,9 @@ int qemuMonitorJSONMigrateStartPostCopy(qemuMonitorPtr mon) + int qemuMonitorJSONGetRTCTime(qemuMonitorPtr mon, + struct tm *tm) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ++ ++int qemuMonitorJSONGetHotpluggableCPUs(qemuMonitorPtr mon, ++ struct qemuMonitorQueryHotpluggableCpusEntry **entries, ++ size_t *nentries) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); + #endif /* QEMU_MONITOR_JSON_H */ +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Add-vcpu-state-information-to-monitor-data.patch b/SOURCES/libvirt-qemu-monitor-Add-vcpu-state-information-to-monitor-data.patch new file mode 100644 index 0000000..63a4c71 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Add-vcpu-state-information-to-monitor-data.patch @@ -0,0 +1,790 @@ +From 2f158bf21cf944a1c6ec6a3498cf702a9e6be161 Mon Sep 17 00:00:00 2001 +Message-Id: <2f158bf21cf944a1c6ec6a3498cf702a9e6be161@dist-git> +From: Peter Krempa +Date: Wed, 14 Sep 2016 13:04:22 +0200 +Subject: [PATCH] qemu: monitor: Add vcpu state information to monitor data + +https://bugzilla.redhat.com/show_bug.cgi?id=1375783 + +Return whether a vcpu entry is hotpluggable or online so that upper +layers don't have to infer the information from other data. + +Advantage is that this code can be tested by unit tests. + +(cherry picked from commit 2a0e68be9185eecb9207ebdfdc4f8f0933f38bb3) +--- + src/qemu/qemu_monitor.c | 10 +++++ + src/qemu/qemu_monitor.h | 4 ++ + .../qemumonitorjson-cpuinfo-ppc64-basic.data | 48 ++++++++++++++++++++++ + .../qemumonitorjson-cpuinfo-ppc64-hotplug-1.data | 48 ++++++++++++++++++++++ + .../qemumonitorjson-cpuinfo-ppc64-hotplug-2.data | 48 ++++++++++++++++++++++ + .../qemumonitorjson-cpuinfo-ppc64-hotplug-4.data | 48 ++++++++++++++++++++++ + .../qemumonitorjson-cpuinfo-ppc64-no-threads.data | 32 +++++++++++++++ + ...emumonitorjson-cpuinfo-x86-basic-pluggable.data | 16 ++++++++ + .../qemumonitorjson-cpuinfo-x86-full.data | 22 ++++++++++ + tests/qemumonitorjsontest.c | 3 ++ + 10 files changed, 279 insertions(+) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index b88b0de..6801c13 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1768,6 +1768,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + int order = 1; + size_t totalvcpus = 0; + size_t mastervcpu; /* this iterator is used for iterating hotpluggable entities */ ++ size_t slavevcpu; /* this corresponds to subentries of a hotpluggable entry */ + size_t anyvcpu; /* this iterator is used for any vcpu entry in the result */ + size_t i; + size_t j; +@@ -1811,6 +1812,9 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + * logical vcpus in the guest */ + mastervcpu = 0; + for (i = 0; i < nhotplugvcpus; i++) { ++ vcpus[mastervcpu].online = !!hotplugvcpus[i].qom_path; ++ vcpus[mastervcpu].hotpluggable = !!hotplugvcpus[i].alias || ++ !vcpus[mastervcpu].online; + vcpus[mastervcpu].socket_id = hotplugvcpus[i].socket_id; + vcpus[mastervcpu].core_id = hotplugvcpus[i].core_id; + vcpus[mastervcpu].thread_id = hotplugvcpus[i].thread_id; +@@ -1820,6 +1824,12 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + VIR_STEAL_PTR(vcpus[mastervcpu].type, hotplugvcpus[i].type); + vcpus[mastervcpu].id = hotplugvcpus[i].enable_id; + ++ /* copy state information to slave vcpus */ ++ for (slavevcpu = mastervcpu + 1; slavevcpu < mastervcpu + hotplugvcpus[i].vcpus; slavevcpu++) { ++ vcpus[slavevcpu].online = vcpus[mastervcpu].online; ++ vcpus[slavevcpu].hotpluggable = vcpus[mastervcpu].hotpluggable; ++ } ++ + /* calculate next master vcpu (hotpluggable unit) entry */ + mastervcpu += hotplugvcpus[i].vcpus; + } +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 09c404a..b1b6062 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -422,6 +422,10 @@ struct _qemuMonitorCPUInfo { + pid_t tid; + int id; /* order of enabling of the given cpu */ + ++ /* state data */ ++ bool online; ++ bool hotpluggable; ++ + /* topology info for hotplug purposes. Hotplug of given vcpu impossible if + * all entries are -1 */ + int socket_id; +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data +index 9fc8148..ae7c2f4 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data +@@ -1,40 +1,88 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='21925' + qemu-id='1' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[1]' + topology: core='0' vcpus='8' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=no + thread-id='21926' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=no + thread-id='21927' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=no + thread-id='21928' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=no + thread-id='21930' + [vcpu libvirt-id='5'] ++ online=yes ++ hotpluggable=no + thread-id='21931' + [vcpu libvirt-id='6'] ++ online=yes ++ hotpluggable=no + thread-id='21932' + [vcpu libvirt-id='7'] ++ online=yes ++ hotpluggable=no + thread-id='21933' + [vcpu libvirt-id='8'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='8' vcpus='8' + [vcpu libvirt-id='9'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='10'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='11'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='12'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='13'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='14'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='15'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='16'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='16' vcpus='8' + [vcpu libvirt-id='17'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='18'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='19'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='20'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='21'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='22'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='23'] ++ online=no ++ hotpluggable=yes +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data +index b0139b5..5c0a6af 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data +@@ -1,24 +1,42 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='21925' + qemu-id='1' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[1]' + topology: core='0' vcpus='8' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=no + thread-id='21926' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=no + thread-id='21927' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=no + thread-id='21928' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=no + thread-id='21930' + [vcpu libvirt-id='5'] ++ online=yes ++ hotpluggable=no + thread-id='21931' + [vcpu libvirt-id='6'] ++ online=yes ++ hotpluggable=no + thread-id='21932' + [vcpu libvirt-id='7'] ++ online=yes ++ hotpluggable=no + thread-id='21933' + [vcpu libvirt-id='8'] ++ online=yes ++ hotpluggable=yes + thread-id='22131' + qemu-id='2' + type='host-spapr-cpu-core' +@@ -26,26 +44,56 @@ + qom_path='/machine/peripheral/vcpu0' + topology: core='8' vcpus='8' + [vcpu libvirt-id='9'] ++ online=yes ++ hotpluggable=yes + thread-id='22132' + [vcpu libvirt-id='10'] ++ online=yes ++ hotpluggable=yes + thread-id='22133' + [vcpu libvirt-id='11'] ++ online=yes ++ hotpluggable=yes + thread-id='22134' + [vcpu libvirt-id='12'] ++ online=yes ++ hotpluggable=yes + thread-id='22135' + [vcpu libvirt-id='13'] ++ online=yes ++ hotpluggable=yes + thread-id='22136' + [vcpu libvirt-id='14'] ++ online=yes ++ hotpluggable=yes + thread-id='22137' + [vcpu libvirt-id='15'] ++ online=yes ++ hotpluggable=yes + thread-id='22138' + [vcpu libvirt-id='16'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='16' vcpus='8' + [vcpu libvirt-id='17'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='18'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='19'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='20'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='21'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='22'] ++ online=no ++ hotpluggable=yes + [vcpu libvirt-id='23'] ++ online=no ++ hotpluggable=yes +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data +index ea4b099..ba4044e 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data +@@ -1,24 +1,42 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='21925' + qemu-id='1' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[1]' + topology: core='0' vcpus='8' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=no + thread-id='21926' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=no + thread-id='21927' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=no + thread-id='21928' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=no + thread-id='21930' + [vcpu libvirt-id='5'] ++ online=yes ++ hotpluggable=no + thread-id='21931' + [vcpu libvirt-id='6'] ++ online=yes ++ hotpluggable=no + thread-id='21932' + [vcpu libvirt-id='7'] ++ online=yes ++ hotpluggable=no + thread-id='21933' + [vcpu libvirt-id='8'] ++ online=yes ++ hotpluggable=yes + thread-id='22131' + qemu-id='2' + type='host-spapr-cpu-core' +@@ -26,20 +44,36 @@ + qom_path='/machine/peripheral/vcpu0' + topology: core='8' vcpus='8' + [vcpu libvirt-id='9'] ++ online=yes ++ hotpluggable=yes + thread-id='22132' + [vcpu libvirt-id='10'] ++ online=yes ++ hotpluggable=yes + thread-id='22133' + [vcpu libvirt-id='11'] ++ online=yes ++ hotpluggable=yes + thread-id='22134' + [vcpu libvirt-id='12'] ++ online=yes ++ hotpluggable=yes + thread-id='22135' + [vcpu libvirt-id='13'] ++ online=yes ++ hotpluggable=yes + thread-id='22136' + [vcpu libvirt-id='14'] ++ online=yes ++ hotpluggable=yes + thread-id='22137' + [vcpu libvirt-id='15'] ++ online=yes ++ hotpluggable=yes + thread-id='22138' + [vcpu libvirt-id='16'] ++ online=yes ++ hotpluggable=yes + thread-id='22223' + qemu-id='3' + type='host-spapr-cpu-core' +@@ -47,16 +81,30 @@ + qom_path='/machine/peripheral/vcpu1' + topology: core='16' vcpus='8' + [vcpu libvirt-id='17'] ++ online=yes ++ hotpluggable=yes + thread-id='22224' + [vcpu libvirt-id='18'] ++ online=yes ++ hotpluggable=yes + thread-id='22225' + [vcpu libvirt-id='19'] ++ online=yes ++ hotpluggable=yes + thread-id='22226' + [vcpu libvirt-id='20'] ++ online=yes ++ hotpluggable=yes + thread-id='22227' + [vcpu libvirt-id='21'] ++ online=yes ++ hotpluggable=yes + thread-id='22228' + [vcpu libvirt-id='22'] ++ online=yes ++ hotpluggable=yes + thread-id='22229' + [vcpu libvirt-id='23'] ++ online=yes ++ hotpluggable=yes + thread-id='22230' +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data +index 22a425d..d2c56ef 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data +@@ -1,24 +1,42 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='21925' + qemu-id='1' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[1]' + topology: core='0' vcpus='8' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=no + thread-id='21926' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=no + thread-id='21927' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=no + thread-id='21928' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=no + thread-id='21930' + [vcpu libvirt-id='5'] ++ online=yes ++ hotpluggable=no + thread-id='21931' + [vcpu libvirt-id='6'] ++ online=yes ++ hotpluggable=no + thread-id='21932' + [vcpu libvirt-id='7'] ++ online=yes ++ hotpluggable=no + thread-id='21933' + [vcpu libvirt-id='8'] ++ online=yes ++ hotpluggable=yes + thread-id='23170' + qemu-id='3' + type='host-spapr-cpu-core' +@@ -26,20 +44,36 @@ + qom_path='/machine/peripheral/vcpu0' + topology: core='8' vcpus='8' + [vcpu libvirt-id='9'] ++ online=yes ++ hotpluggable=yes + thread-id='23171' + [vcpu libvirt-id='10'] ++ online=yes ++ hotpluggable=yes + thread-id='23172' + [vcpu libvirt-id='11'] ++ online=yes ++ hotpluggable=yes + thread-id='23173' + [vcpu libvirt-id='12'] ++ online=yes ++ hotpluggable=yes + thread-id='23174' + [vcpu libvirt-id='13'] ++ online=yes ++ hotpluggable=yes + thread-id='23175' + [vcpu libvirt-id='14'] ++ online=yes ++ hotpluggable=yes + thread-id='23176' + [vcpu libvirt-id='15'] ++ online=yes ++ hotpluggable=yes + thread-id='23177' + [vcpu libvirt-id='16'] ++ online=yes ++ hotpluggable=yes + thread-id='22741' + qemu-id='2' + type='host-spapr-cpu-core' +@@ -47,16 +81,30 @@ + qom_path='/machine/peripheral/vcpu1' + topology: core='16' vcpus='8' + [vcpu libvirt-id='17'] ++ online=yes ++ hotpluggable=yes + thread-id='22742' + [vcpu libvirt-id='18'] ++ online=yes ++ hotpluggable=yes + thread-id='22743' + [vcpu libvirt-id='19'] ++ online=yes ++ hotpluggable=yes + thread-id='22744' + [vcpu libvirt-id='20'] ++ online=yes ++ hotpluggable=yes + thread-id='22745' + [vcpu libvirt-id='21'] ++ online=yes ++ hotpluggable=yes + thread-id='22746' + [vcpu libvirt-id='22'] ++ online=yes ++ hotpluggable=yes + thread-id='22747' + [vcpu libvirt-id='23'] ++ online=yes ++ hotpluggable=yes + thread-id='22748' +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data +index d7ab77b..c2f541b 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data +@@ -1,72 +1,104 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='35232' + qemu-id='1' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[1]' + topology: core='0' vcpus='1' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=no + thread-id='35233' + qemu-id='2' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[2]' + topology: core='8' vcpus='1' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=no + thread-id='35234' + qemu-id='3' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[3]' + topology: core='16' vcpus='1' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=no + thread-id='35235' + qemu-id='4' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[4]' + topology: core='24' vcpus='1' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=no + thread-id='35236' + qemu-id='5' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[5]' + topology: core='32' vcpus='1' + [vcpu libvirt-id='5'] ++ online=yes ++ hotpluggable=no + thread-id='35237' + qemu-id='6' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[6]' + topology: core='40' vcpus='1' + [vcpu libvirt-id='6'] ++ online=yes ++ hotpluggable=no + thread-id='35238' + qemu-id='7' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[7]' + topology: core='48' vcpus='1' + [vcpu libvirt-id='7'] ++ online=yes ++ hotpluggable=no + thread-id='35239' + qemu-id='8' + type='host-spapr-cpu-core' + qom_path='/machine/unattached/device[8]' + topology: core='56' vcpus='1' + [vcpu libvirt-id='8'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='64' vcpus='1' + [vcpu libvirt-id='9'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='72' vcpus='1' + [vcpu libvirt-id='10'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='80' vcpus='1' + [vcpu libvirt-id='11'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='88' vcpus='1' + [vcpu libvirt-id='12'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='96' vcpus='1' + [vcpu libvirt-id='13'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='104' vcpus='1' + [vcpu libvirt-id='14'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='112' vcpus='1' + [vcpu libvirt-id='15'] ++ online=no ++ hotpluggable=yes + type='host-spapr-cpu-core' + topology: core='120' vcpus='1' +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data +index a367a09..67dfc01 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data +@@ -1,39 +1,55 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='518291' + qemu-id='1' + type='qemu64-x86_64-cpu' + qom_path='/machine/unattached/device[0]' + topology: socket='0' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=no + thread-id='518292' + qemu-id='2' + type='qemu64-x86_64-cpu' + qom_path='/machine/unattached/device[2]' + topology: socket='0' core='0' thread='1' vcpus='1' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=no + thread-id='518294' + qemu-id='3' + type='qemu64-x86_64-cpu' + qom_path='/machine/unattached/device[3]' + topology: socket='0' core='1' thread='0' vcpus='1' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=no + thread-id='518295' + qemu-id='4' + type='qemu64-x86_64-cpu' + qom_path='/machine/unattached/device[4]' + topology: socket='0' core='1' thread='1' vcpus='1' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=no + thread-id='518296' + qemu-id='5' + type='qemu64-x86_64-cpu' + qom_path='/machine/unattached/device[5]' + topology: socket='1' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='5'] ++ online=no ++ hotpluggable=yes + type='qemu64-x86_64-cpu' + topology: socket='1' core='0' thread='1' vcpus='1' + [vcpu libvirt-id='6'] ++ online=no ++ hotpluggable=yes + type='qemu64-x86_64-cpu' + topology: socket='1' core='1' thread='0' vcpus='1' + [vcpu libvirt-id='7'] ++ online=no ++ hotpluggable=yes + type='qemu64-x86_64-cpu' + topology: socket='1' core='1' thread='1' vcpus='1' +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data +index a6c1069..dba3745 100644 +--- a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data +@@ -1,10 +1,14 @@ + [vcpu libvirt-id='0'] ++ online=yes ++ hotpluggable=no + thread-id='895040' + qemu-id='1' + type='Broadwell-x86_64-cpu' + qom_path='/machine/unattached/device[0]' + topology: socket='0' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='1'] ++ online=yes ++ hotpluggable=yes + thread-id='895056' + qemu-id='2' + type='Broadwell-x86_64-cpu' +@@ -12,6 +16,8 @@ + qom_path='/machine/peripheral/vcpu1' + topology: socket='1' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='2'] ++ online=yes ++ hotpluggable=yes + thread-id='895057' + qemu-id='3' + type='Broadwell-x86_64-cpu' +@@ -19,6 +25,8 @@ + qom_path='/machine/peripheral/vcpu2' + topology: socket='2' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='3'] ++ online=yes ++ hotpluggable=yes + thread-id='895058' + qemu-id='4' + type='Broadwell-x86_64-cpu' +@@ -26,6 +34,8 @@ + qom_path='/machine/peripheral/vcpu3' + topology: socket='3' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='4'] ++ online=yes ++ hotpluggable=yes + thread-id='895059' + qemu-id='5' + type='Broadwell-x86_64-cpu' +@@ -33,6 +43,8 @@ + qom_path='/machine/peripheral/vcpu4' + topology: socket='4' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='5'] ++ online=yes ++ hotpluggable=yes + thread-id='895060' + qemu-id='6' + type='Broadwell-x86_64-cpu' +@@ -40,6 +52,8 @@ + qom_path='/machine/peripheral/vcpu5' + topology: socket='5' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='6'] ++ online=yes ++ hotpluggable=yes + thread-id='895061' + qemu-id='7' + type='Broadwell-x86_64-cpu' +@@ -47,6 +61,8 @@ + qom_path='/machine/peripheral/vcpu6' + topology: socket='6' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='7'] ++ online=yes ++ hotpluggable=yes + thread-id='895062' + qemu-id='8' + type='Broadwell-x86_64-cpu' +@@ -54,6 +70,8 @@ + qom_path='/machine/peripheral/vcpu7' + topology: socket='7' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='8'] ++ online=yes ++ hotpluggable=yes + thread-id='895063' + qemu-id='9' + type='Broadwell-x86_64-cpu' +@@ -61,6 +79,8 @@ + qom_path='/machine/peripheral/vcpu8' + topology: socket='8' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='9'] ++ online=yes ++ hotpluggable=yes + thread-id='895064' + qemu-id='10' + type='Broadwell-x86_64-cpu' +@@ -68,6 +88,8 @@ + qom_path='/machine/peripheral/vcpu9' + topology: socket='9' core='0' thread='0' vcpus='1' + [vcpu libvirt-id='10'] ++ online=yes ++ hotpluggable=yes + thread-id='895065' + qemu-id='11' + type='Broadwell-x86_64-cpu' +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 0410630..e418557 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -2357,6 +2357,9 @@ testQemuMonitorCPUInfoFormat(qemuMonitorCPUInfoPtr vcpus, + virBufferAsprintf(&buf, "[vcpu libvirt-id='%zu']\n", i); + virBufferAdjustIndent(&buf, 4); + ++ virBufferAsprintf(&buf, "online=%s\n", vcpu->online ? "yes" : "no"); ++ virBufferAsprintf(&buf, "hotpluggable=%s\n", vcpu->hotpluggable ? "yes" : "no"); ++ + if (vcpu->tid) + virBufferAsprintf(&buf, "thread-id='%llu'\n", + (unsigned long long) vcpu->tid); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Extract-QOM-path-from-query-cpus-reply.patch b/SOURCES/libvirt-qemu-monitor-Extract-QOM-path-from-query-cpus-reply.patch new file mode 100644 index 0000000..3829845 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Extract-QOM-path-from-query-cpus-reply.patch @@ -0,0 +1,154 @@ +From 06dad6304cfc9e14c505f4ea24e8e995776091e2 Mon Sep 17 00:00:00 2001 +Message-Id: <06dad6304cfc9e14c505f4ea24e8e995776091e2@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:22 -0400 +Subject: [PATCH] qemu: monitor: Extract QOM path from query-cpus reply + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +To allow matching up the data returned by query-cpus to entries in the +query-hotpluggable-cpus reply for CPU hotplug it's necessary to extract +the QOM path as it's the only link between the two. + +(cherry picked from commit c91be16b9ff0bfb8f6db400db4ae36c8a47842fc) +--- + src/qemu/qemu_monitor.c | 7 ++++++- + src/qemu/qemu_monitor.h | 1 + + src/qemu/qemu_monitor_json.c | 16 ++++++++++++++-- + tests/qemumonitorjsontest.c | 14 +++++++++----- + 4 files changed, 30 insertions(+), 8 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index d5af7d1..573c94a 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1663,11 +1663,16 @@ qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr cpus, + + void + qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, +- size_t nentries ATTRIBUTE_UNUSED) ++ size_t nentries) + { ++ size_t i; ++ + if (!entries) + return; + ++ for (i = 0; i < nentries; i++) ++ VIR_FREE(entries[i].qom_path); ++ + VIR_FREE(entries); + } + +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 2269d60..83396a4 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -392,6 +392,7 @@ int qemuMonitorSystemPowerdown(qemuMonitorPtr mon); + + struct qemuMonitorQueryCpusEntry { + pid_t tid; ++ char *qom_path; + }; + void qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, + size_t nentries); +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index 8243b52..a59b195 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -1325,8 +1325,16 @@ int qemuMonitorJSONSystemReset(qemuMonitorPtr mon) + + + /* +- * [ { "CPU": 0, "current": true, "halted": false, "pc": 3227107138 }, +- * { "CPU": 1, "current": false, "halted": true, "pc": 7108165 } ] ++ * ++ * [{ "arch": "x86", ++ * "current": true, ++ * "CPU": 0, ++ * "qom_path": "/machine/unattached/device[0]", ++ * "pc": -2130415978, ++ * "halted": true, ++ * "thread_id": 2631237}, ++ * {...} ++ * ] + */ + static int + qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data, +@@ -1347,6 +1355,7 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data, + for (i = 0; i < ncpus; i++) { + virJSONValuePtr entry = virJSONValueArrayGet(data, i); + int thread = 0; ++ const char *qom_path; + if (!entry) { + ret = -2; + goto cleanup; +@@ -1355,8 +1364,11 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data, + /* Some older qemu versions don't report the thread_id so treat this as + * non-fatal, simply returning no data */ + ignore_value(virJSONValueObjectGetNumberInt(entry, "thread_id", &thread)); ++ qom_path = virJSONValueObjectGetString(entry, "qom_path"); + + cpus[i].tid = thread; ++ if (VIR_STRDUP(cpus[i].qom_path, qom_path) < 0) ++ goto cleanup; + } + + VIR_STEAL_PTR(*entries, cpus); +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 3fd4eb6..8c31005 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -1205,7 +1205,8 @@ static bool + testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct qemuMonitorQueryCpusEntry *a, + struct qemuMonitorQueryCpusEntry *b) + { +- if (a->tid != b->tid) ++ if (a->tid != b->tid || ++ STRNEQ_NULLABLE(a->qom_path, b->qom_path)) + return false; + + return true; +@@ -1220,10 +1221,10 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + int ret = -1; + struct qemuMonitorQueryCpusEntry *cpudata = NULL; + struct qemuMonitorQueryCpusEntry expect[] = { +- {17622}, +- {17624}, +- {17626}, +- {17628}, ++ {17622, (char *) "/machine/unattached/device[0]"}, ++ {17624, (char *) "/machine/unattached/device[1]"}, ++ {17626, (char *) "/machine/unattached/device[2]"}, ++ {17628, NULL}, + }; + size_t ncpudata = 0; + size_t i; +@@ -1237,6 +1238,7 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + " {" + " \"current\": true," + " \"CPU\": 0," ++ " \"qom_path\": \"/machine/unattached/device[0]\"," + " \"pc\": -2130530478," + " \"halted\": true," + " \"thread_id\": 17622" +@@ -1244,6 +1246,7 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + " {" + " \"current\": false," + " \"CPU\": 1," ++ " \"qom_path\": \"/machine/unattached/device[1]\"," + " \"pc\": -2130530478," + " \"halted\": true," + " \"thread_id\": 17624" +@@ -1251,6 +1254,7 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + " {" + " \"current\": false," + " \"CPU\": 2," ++ " \"qom_path\": \"/machine/unattached/device[2]\"," + " \"pc\": -2130530478," + " \"halted\": true," + " \"thread_id\": 17626" +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Rename-qemuMonitor-JSON-Text-GetCPUInfo.patch b/SOURCES/libvirt-qemu-monitor-Rename-qemuMonitor-JSON-Text-GetCPUInfo.patch new file mode 100644 index 0000000..d4398c5 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Rename-qemuMonitor-JSON-Text-GetCPUInfo.patch @@ -0,0 +1,133 @@ +From 6a13af86bfba6f91cb86c4c2ff3a8f3e2edde275 Mon Sep 17 00:00:00 2001 +Message-Id: <6a13af86bfba6f91cb86c4c2ff3a8f3e2edde275@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:07 -0400 +Subject: [PATCH] qemu: monitor: Rename qemuMonitor(JSON|Text)GetCPUInfo + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Use a name that contains the command used to get the information. + +(cherry picked from commit 5965fa759c1b97be7e00369eff285f0af3eb2b15) +--- + src/qemu/qemu_monitor.c | 4 ++-- + src/qemu/qemu_monitor_json.c | 5 +++-- + src/qemu/qemu_monitor_json.h | 4 ++-- + src/qemu/qemu_monitor_text.c | 5 +++-- + src/qemu/qemu_monitor_text.h | 4 ++-- + tests/qemumonitorjsontest.c | 6 +++--- + 6 files changed, 15 insertions(+), 13 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 65e7a11..8a558ca 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1667,9 +1667,9 @@ qemuMonitorGetCPUInfo(qemuMonitorPtr mon, + QEMU_CHECK_MONITOR(mon); + + if (mon->json) +- return qemuMonitorJSONGetCPUInfo(mon, pids); ++ return qemuMonitorJSONQueryCPUs(mon, pids); + else +- return qemuMonitorTextGetCPUInfo(mon, pids); ++ return qemuMonitorTextQueryCPUs(mon, pids); + } + + +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index fae589f..a45772e 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -1382,8 +1382,9 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr reply, + } + + +-int qemuMonitorJSONGetCPUInfo(qemuMonitorPtr mon, +- int **pids) ++int ++qemuMonitorJSONQueryCPUs(qemuMonitorPtr mon, ++ int **pids) + { + int ret = -1; + virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("query-cpus", +diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h +index 3fe5cf1..ef198b4 100644 +--- a/src/qemu/qemu_monitor_json.h ++++ b/src/qemu/qemu_monitor_json.h +@@ -58,8 +58,8 @@ int qemuMonitorJSONGetStatus(qemuMonitorPtr mon, + int qemuMonitorJSONSystemPowerdown(qemuMonitorPtr mon); + int qemuMonitorJSONSystemReset(qemuMonitorPtr mon); + +-int qemuMonitorJSONGetCPUInfo(qemuMonitorPtr mon, +- int **pids); ++int qemuMonitorJSONQueryCPUs(qemuMonitorPtr mon, ++ int **pids); + int qemuMonitorJSONGetVirtType(qemuMonitorPtr mon, + virDomainVirtType *virtType); + int qemuMonitorJSONUpdateVideoMemorySize(qemuMonitorPtr mon, +diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c +index 9295219..0b05587 100644 +--- a/src/qemu/qemu_monitor_text.c ++++ b/src/qemu/qemu_monitor_text.c +@@ -500,8 +500,9 @@ int qemuMonitorTextSystemReset(qemuMonitorPtr mon) + } + + +-int qemuMonitorTextGetCPUInfo(qemuMonitorPtr mon, +- int **pids) ++int ++qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, ++ int **pids) + { + char *qemucpus = NULL; + char *line; +diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h +index eeaca52..b7f0cab 100644 +--- a/src/qemu/qemu_monitor_text.h ++++ b/src/qemu/qemu_monitor_text.h +@@ -49,8 +49,8 @@ int qemuMonitorTextGetStatus(qemuMonitorPtr mon, + int qemuMonitorTextSystemPowerdown(qemuMonitorPtr mon); + int qemuMonitorTextSystemReset(qemuMonitorPtr mon); + +-int qemuMonitorTextGetCPUInfo(qemuMonitorPtr mon, +- int **pids); ++int qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, ++ int **pids); + int qemuMonitorTextGetVirtType(qemuMonitorPtr mon, + virDomainVirtType *virtType); + int qemuMonitorTextGetBalloonInfo(qemuMonitorPtr mon, +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index f698c14..1d245d0 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -1203,7 +1203,7 @@ GEN_TEST_FUNC(qemuMonitorJSONDetachCharDev, "serial1") + + + static int +-testQemuMonitorJSONqemuMonitorJSONGetCPUInfo(const void *data) ++testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + { + virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data; + qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, xmlopt); +@@ -1252,7 +1252,7 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUInfo(const void *data) + "}") < 0) + goto cleanup; + +- ncpupids = qemuMonitorJSONGetCPUInfo(qemuMonitorTestGetMonitor(test), &cpupids); ++ ncpupids = qemuMonitorJSONQueryCPUs(qemuMonitorTestGetMonitor(test), &cpupids); + + if (ncpupids != 4) { + virReportError(VIR_ERR_INTERNAL_ERROR, +@@ -2420,7 +2420,7 @@ mymain(void) + DO_TEST(qemuMonitorJSONSetBlockIoThrottle); + DO_TEST(qemuMonitorJSONGetTargetArch); + DO_TEST(qemuMonitorJSONGetMigrationCapability); +- DO_TEST(qemuMonitorJSONGetCPUInfo); ++ DO_TEST(qemuMonitorJSONQueryCPUs); + DO_TEST(qemuMonitorJSONGetVirtType); + DO_TEST(qemuMonitorJSONSendKey); + DO_TEST(qemuMonitorJSONGetDumpGuestMemoryCapability); +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Return-struct-from-qemuMonitor-Text-Json-QueryCPUs.patch b/SOURCES/libvirt-qemu-monitor-Return-struct-from-qemuMonitor-Text-Json-QueryCPUs.patch new file mode 100644 index 0000000..c4a369f --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Return-struct-from-qemuMonitor-Text-Json-QueryCPUs.patch @@ -0,0 +1,418 @@ +From ea8dd0fe977164f2530c8e87c31c2adb732d4239 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:18 -0400 +Subject: [PATCH] qemu: monitor: Return struct from + qemuMonitor(Text|Json)QueryCPUs + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Prepare to extract more data by returning an array of structs rather than +just an array of thread ids. Additionally report fatal errors separately +from qemu not being able to produce data. + +(cherry picked from commit b3180425ce0ac01948cd997d56b4af21a5380438) +--- + src/qemu/qemu_monitor.c | 31 ++++++++++++------ + src/qemu/qemu_monitor.h | 6 ++++ + src/qemu/qemu_monitor_json.c | 77 +++++++++++++++++++++++--------------------- + src/qemu/qemu_monitor_json.h | 3 +- + src/qemu/qemu_monitor_text.c | 41 +++++++++++------------ + src/qemu/qemu_monitor_text.h | 3 +- + tests/qemumonitorjsontest.c | 39 +++++++++++++++------- + 7 files changed, 121 insertions(+), 79 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index c3b9f41..d5af7d1 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1661,6 +1661,16 @@ qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr cpus, + VIR_FREE(cpus); + } + ++void ++qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, ++ size_t nentries ATTRIBUTE_UNUSED) ++{ ++ if (!entries) ++ return; ++ ++ VIR_FREE(entries); ++} ++ + + /** + * qemuMonitorGetCPUInfo: +@@ -1681,7 +1691,8 @@ qemuMonitorGetCPUInfo(qemuMonitorPtr mon, + size_t maxvcpus) + { + qemuMonitorCPUInfoPtr info = NULL; +- int *pids = NULL; ++ struct qemuMonitorQueryCpusEntry *cpuentries = NULL; ++ size_t ncpuentries = 0; + size_t i; + int ret = -1; + int rc; +@@ -1692,26 +1703,28 @@ qemuMonitorGetCPUInfo(qemuMonitorPtr mon, + return -1; + + if (mon->json) +- rc = qemuMonitorJSONQueryCPUs(mon, &pids); ++ rc = qemuMonitorJSONQueryCPUs(mon, &cpuentries, &ncpuentries); + else +- rc = qemuMonitorTextQueryCPUs(mon, &pids); ++ rc = qemuMonitorTextQueryCPUs(mon, &cpuentries, &ncpuentries); + + if (rc < 0) { +- virResetLastError(); +- VIR_STEAL_PTR(*vcpus, info); +- ret = 0; ++ if (rc == -2) { ++ VIR_STEAL_PTR(*vcpus, info); ++ ret = 0; ++ } ++ + goto cleanup; + } + +- for (i = 0; i < rc; i++) +- info[i].tid = pids[i]; ++ for (i = 0; i < ncpuentries; i++) ++ info[i].tid = cpuentries[i].tid; + + VIR_STEAL_PTR(*vcpus, info); + ret = 0; + + cleanup: + qemuMonitorCPUInfoFree(info, maxvcpus); +- VIR_FREE(pids); ++ qemuMonitorQueryCpusFree(cpuentries, ncpuentries); + return ret; + } + +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 3ab3f08..5ec2101 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -390,6 +390,12 @@ int qemuMonitorGetStatus(qemuMonitorPtr mon, + int qemuMonitorSystemReset(qemuMonitorPtr mon); + int qemuMonitorSystemPowerdown(qemuMonitorPtr mon); + ++struct qemuMonitorQueryCpusEntry { ++ pid_t tid; ++}; ++void qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries, ++ size_t nentries); ++ + + struct _qemuMonitorCPUInfo { + pid_t tid; +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index a45772e..5836e1e 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -1329,69 +1329,69 @@ int qemuMonitorJSONSystemReset(qemuMonitorPtr mon) + * { "CPU": 1, "current": false, "halted": true, "pc": 7108165 } ] + */ + static int +-qemuMonitorJSONExtractCPUInfo(virJSONValuePtr reply, +- int **pids) ++qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data, ++ struct qemuMonitorQueryCpusEntry **entries, ++ size_t *nentries) + { +- virJSONValuePtr data; ++ struct qemuMonitorQueryCpusEntry *cpus = NULL; + int ret = -1; + size_t i; +- int *threads = NULL; + ssize_t ncpus; + +- if (!(data = virJSONValueObjectGetArray(reply, "return"))) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("cpu reply was missing return data")); +- goto cleanup; +- } ++ if ((ncpus = virJSONValueArraySize(data)) <= 0) ++ return -2; + +- if ((ncpus = virJSONValueArraySize(data)) <= 0) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("cpu information was empty")); +- goto cleanup; +- } +- +- if (VIR_ALLOC_N(threads, ncpus) < 0) ++ if (VIR_ALLOC_N(cpus, ncpus) < 0) + goto cleanup; + + for (i = 0; i < ncpus; i++) { + virJSONValuePtr entry = virJSONValueArrayGet(data, i); +- int thread; ++ int thread = 0; + if (!entry) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("cpu information was missing an array element")); ++ ret = -2; + goto cleanup; + } + +- if (virJSONValueObjectGetNumberInt(entry, "thread_id", &thread) < 0) { +- /* Some older qemu versions don't report the thread_id, +- * so treat this as non-fatal, simply returning no data */ +- ret = 0; +- goto cleanup; +- } ++ /* Some older qemu versions don't report the thread_id so treat this as ++ * non-fatal, simply returning no data */ ++ ignore_value(virJSONValueObjectGetNumberInt(entry, "thread_id", &thread)); + +- threads[i] = thread; ++ cpus[i].tid = thread; + } + +- *pids = threads; +- threads = NULL; +- ret = ncpus; ++ VIR_STEAL_PTR(*entries, cpus); ++ *nentries = ncpus; ++ ret = 0; + + cleanup: +- VIR_FREE(threads); ++ qemuMonitorQueryCpusFree(cpus, ncpus); + return ret; + } + + ++/** ++ * qemuMonitorJSONQueryCPUs: ++ * ++ * @mon: monitor object ++ * @entries: filled with detected entries on success ++ * @nentries: number of entries returned ++ * ++ * Queries qemu for cpu-related information. Failure to execute the command or ++ * extract results does not produce an error as libvirt can continue without ++ * this information. ++ * ++ * Returns 0 on success success, -1 on a fatal error (oom ...) and -2 if the ++ * query failed gracefully. ++ */ + int + qemuMonitorJSONQueryCPUs(qemuMonitorPtr mon, +- int **pids) ++ struct qemuMonitorQueryCpusEntry **entries, ++ size_t *nentries) + { + int ret = -1; +- virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("query-cpus", +- NULL); ++ virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("query-cpus", NULL); + virJSONValuePtr reply = NULL; +- +- *pids = NULL; ++ virJSONValuePtr data; + + if (!cmd) + return -1; +@@ -1399,10 +1399,13 @@ qemuMonitorJSONQueryCPUs(qemuMonitorPtr mon, + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + +- if (qemuMonitorJSONCheckError(cmd, reply) < 0) ++ if (!(data = virJSONValueObjectGetArray(reply, "return"))) { ++ ret = -2; + goto cleanup; ++ } ++ ++ ret = qemuMonitorJSONExtractCPUInfo(data, entries, nentries); + +- ret = qemuMonitorJSONExtractCPUInfo(reply, pids); + cleanup: + virJSONValueFree(cmd); + virJSONValueFree(reply); +diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h +index ef198b4..2a439da 100644 +--- a/src/qemu/qemu_monitor_json.h ++++ b/src/qemu/qemu_monitor_json.h +@@ -59,7 +59,8 @@ int qemuMonitorJSONSystemPowerdown(qemuMonitorPtr mon); + int qemuMonitorJSONSystemReset(qemuMonitorPtr mon); + + int qemuMonitorJSONQueryCPUs(qemuMonitorPtr mon, +- int **pids); ++ struct qemuMonitorQueryCpusEntry **entries, ++ size_t *nentries); + int qemuMonitorJSONGetVirtType(qemuMonitorPtr mon, + virDomainVirtType *virtType); + int qemuMonitorJSONUpdateVideoMemorySize(qemuMonitorPtr mon, +diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c +index 0b05587..e29acfc 100644 +--- a/src/qemu/qemu_monitor_text.c ++++ b/src/qemu/qemu_monitor_text.c +@@ -502,12 +502,15 @@ int qemuMonitorTextSystemReset(qemuMonitorPtr mon) + + int + qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, +- int **pids) ++ struct qemuMonitorQueryCpusEntry **entries, ++ size_t *nentries) + { + char *qemucpus = NULL; + char *line; +- pid_t *cpupids = NULL; +- size_t ncpupids = 0; ++ struct qemuMonitorQueryCpusEntry *cpus = NULL; ++ size_t ncpus = 0; ++ struct qemuMonitorQueryCpusEntry cpu = {0}; ++ int ret = -2; /* -2 denotes a non-fatal error to get the data */ + + if (qemuMonitorHMPCommand(mon, "info cpus", &qemucpus) < 0) + return -1; +@@ -529,15 +532,19 @@ qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, + + /* Extract host Thread ID */ + if ((offset = strstr(line, "thread_id=")) == NULL) +- goto error; ++ goto cleanup; + + if (virStrToLong_i(offset + strlen("thread_id="), &end, 10, &tid) < 0) +- goto error; ++ goto cleanup; + if (end == NULL || !c_isspace(*end)) +- goto error; ++ goto cleanup; + +- if (VIR_APPEND_ELEMENT_COPY(cpupids, ncpupids, tid) < 0) +- goto error; ++ cpu.tid = tid; ++ ++ if (VIR_APPEND_ELEMENT_COPY(cpus, ncpus, cpu) < 0) { ++ ret = -1; ++ goto cleanup; ++ } + + VIR_DEBUG("tid=%d", tid); + +@@ -547,20 +554,14 @@ qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, + line = strchr(offset, '\n'); + } while (line != NULL); + +- /* Validate we got data for all VCPUs we expected */ +- VIR_FREE(qemucpus); +- *pids = cpupids; +- return ncpupids; ++ VIR_STEAL_PTR(*entries, cpus); ++ *nentries = ncpus; ++ ret = 0; + +- error: ++ cleanup: ++ qemuMonitorQueryCpusFree(cpus, ncpus); + VIR_FREE(qemucpus); +- VIR_FREE(cpupids); +- +- /* Returning 0 to indicate non-fatal failure, since +- * older QEMU does not have VCPU<->PID mapping and +- * we don't want to fail on that +- */ +- return 0; ++ return ret; + } + + +diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h +index b7f0cab..86f43e7 100644 +--- a/src/qemu/qemu_monitor_text.h ++++ b/src/qemu/qemu_monitor_text.h +@@ -50,7 +50,8 @@ int qemuMonitorTextSystemPowerdown(qemuMonitorPtr mon); + int qemuMonitorTextSystemReset(qemuMonitorPtr mon); + + int qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, +- int **pids); ++ struct qemuMonitorQueryCpusEntry **entries, ++ size_t *nentries); + int qemuMonitorTextGetVirtType(qemuMonitorPtr mon, + virDomainVirtType *virtType); + int qemuMonitorTextGetBalloonInfo(qemuMonitorPtr mon, +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 1d245d0..3fd4eb6 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -1201,6 +1201,16 @@ GEN_TEST_FUNC(qemuMonitorJSONNBDServerStart, "localhost", 12345) + GEN_TEST_FUNC(qemuMonitorJSONNBDServerAdd, "vda", true) + GEN_TEST_FUNC(qemuMonitorJSONDetachCharDev, "serial1") + ++static bool ++testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct qemuMonitorQueryCpusEntry *a, ++ struct qemuMonitorQueryCpusEntry *b) ++{ ++ if (a->tid != b->tid) ++ return false; ++ ++ return true; ++} ++ + + static int + testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) +@@ -1208,9 +1218,14 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data; + qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, xmlopt); + int ret = -1; +- pid_t *cpupids = NULL; +- pid_t expected_cpupids[] = {17622, 17624, 17626, 17628}; +- int ncpupids; ++ struct qemuMonitorQueryCpusEntry *cpudata = NULL; ++ struct qemuMonitorQueryCpusEntry expect[] = { ++ {17622}, ++ {17624}, ++ {17626}, ++ {17628}, ++ }; ++ size_t ncpudata = 0; + size_t i; + + if (!test) +@@ -1252,19 +1267,21 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + "}") < 0) + goto cleanup; + +- ncpupids = qemuMonitorJSONQueryCPUs(qemuMonitorTestGetMonitor(test), &cpupids); ++ if (qemuMonitorJSONQueryCPUs(qemuMonitorTestGetMonitor(test), ++ &cpudata, &ncpudata) < 0) ++ goto cleanup; + +- if (ncpupids != 4) { ++ if (ncpudata != 4) { + virReportError(VIR_ERR_INTERNAL_ERROR, +- "Expecting ncpupids = 4 but got %d", ncpupids); ++ "Expecting ncpupids = 4 but got %zu", ncpudata); + goto cleanup; + } + +- for (i = 0; i < ncpupids; i++) { +- if (cpupids[i] != expected_cpupids[i]) { ++ for (i = 0; i < ncpudata; i++) { ++ if (!testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(cpudata + i, ++ expect + i)) { + virReportError(VIR_ERR_INTERNAL_ERROR, +- "Expecting cpupids[%zu] = %d but got %d", +- i, expected_cpupids[i], cpupids[i]); ++ "vcpu entry %zu does not match expected data", i); + goto cleanup; + } + } +@@ -1272,7 +1289,7 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) + ret = 0; + + cleanup: +- VIR_FREE(cpupids); ++ qemuMonitorQueryCpusFree(cpudata, ncpudata); + qemuMonitorTestFree(test); + return ret; + } +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Return-structures-from-qemuMonitorGetCPUInfo.patch b/SOURCES/libvirt-qemu-monitor-Return-structures-from-qemuMonitorGetCPUInfo.patch new file mode 100644 index 0000000..d423bb1 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Return-structures-from-qemuMonitorGetCPUInfo.patch @@ -0,0 +1,185 @@ +From 69f7fb4615fb51ea9913650552b9d4937f2ad12b Mon Sep 17 00:00:00 2001 +Message-Id: <69f7fb4615fb51ea9913650552b9d4937f2ad12b@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:17 -0400 +Subject: [PATCH] qemu: monitor: Return structures from qemuMonitorGetCPUInfo + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +The function will gradually add more returned data. Return a struct for +every vCPU containing the data. + +(cherry picked from commit 5b5f494a1bc5af7d162ca23cdb6527d15620e851) +--- + src/qemu/qemu_domain.c | 25 +++++++++------------- + src/qemu/qemu_monitor.c | 57 +++++++++++++++++++++++++++++++++++++++++++------ + src/qemu/qemu_monitor.h | 13 ++++++++++- + 3 files changed, 72 insertions(+), 23 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 9cbf938..52e9c1e 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5687,10 +5687,11 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + int asyncJob) + { + virDomainVcpuDefPtr vcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ qemuMonitorCPUInfoPtr info = NULL; + size_t maxvcpus = virDomainDefGetVcpusMax(vm->def); +- pid_t *cpupids = NULL; +- int ncpupids; + size_t i; ++ int rc; + int ret = -1; + + /* +@@ -5726,32 +5727,26 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; +- ncpupids = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &cpupids); ++ ++ rc = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &info, maxvcpus); ++ + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; + +- /* failure to get the VCPU <-> PID mapping or to execute the query +- * command will not be treated fatal as some versions of qemu don't +- * support this command */ +- if (ncpupids <= 0) { +- virResetLastError(); +- ret = 0; ++ if (rc < 0) + goto cleanup; +- } + + for (i = 0; i < maxvcpus; i++) { + vcpu = virDomainDefGetVcpu(vm->def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); + +- if (i < ncpupids) +- QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = cpupids[i]; +- else +- QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = 0; ++ vcpupriv->tid = info[i].tid; + } + + ret = 0; + + cleanup: +- VIR_FREE(cpupids); ++ qemuMonitorCPUInfoFree(info, maxvcpus); + return ret; + } + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 8a558ca..c3b9f41 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1651,25 +1651,68 @@ qemuMonitorSystemReset(qemuMonitorPtr mon) + } + + ++void ++qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr cpus, ++ size_t ncpus ATTRIBUTE_UNUSED) ++{ ++ if (!cpus) ++ return; ++ ++ VIR_FREE(cpus); ++} ++ ++ + /** + * qemuMonitorGetCPUInfo: + * @mon: monitor +- * @pids: returned array of thread ids corresponding to the vCPUs ++ * @vcpus: pointer filled by array of qemuMonitorCPUInfo structures ++ * @maxvcpus: total possible number of vcpus + * +- * Detects the vCPU thread ids. Returns count of detected vCPUs on success, +- * 0 if qemu didn't report thread ids (does not report libvirt error), +- * -1 on error (reports libvirt error). ++ * Detects VCPU information. If qemu doesn't support or fails reporting ++ * information this function will return success as other parts of libvirt ++ * are able to cope with that. ++ * ++ * Returns 0 on success (including if qemu didn't report any data) and ++ * -1 on error (reports libvirt error). + */ + int + qemuMonitorGetCPUInfo(qemuMonitorPtr mon, +- int **pids) ++ qemuMonitorCPUInfoPtr *vcpus, ++ size_t maxvcpus) + { ++ qemuMonitorCPUInfoPtr info = NULL; ++ int *pids = NULL; ++ size_t i; ++ int ret = -1; ++ int rc; ++ + QEMU_CHECK_MONITOR(mon); + ++ if (VIR_ALLOC_N(info, maxvcpus) < 0) ++ return -1; ++ + if (mon->json) +- return qemuMonitorJSONQueryCPUs(mon, pids); ++ rc = qemuMonitorJSONQueryCPUs(mon, &pids); + else +- return qemuMonitorTextQueryCPUs(mon, pids); ++ rc = qemuMonitorTextQueryCPUs(mon, &pids); ++ ++ if (rc < 0) { ++ virResetLastError(); ++ VIR_STEAL_PTR(*vcpus, info); ++ ret = 0; ++ goto cleanup; ++ } ++ ++ for (i = 0; i < rc; i++) ++ info[i].tid = pids[i]; ++ ++ VIR_STEAL_PTR(*vcpus, info); ++ ret = 0; ++ ++ cleanup: ++ qemuMonitorCPUInfoFree(info, maxvcpus); ++ VIR_FREE(pids); ++ return ret; + } + + +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index b2f20e9..3ab3f08 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -390,8 +390,19 @@ int qemuMonitorGetStatus(qemuMonitorPtr mon, + int qemuMonitorSystemReset(qemuMonitorPtr mon); + int qemuMonitorSystemPowerdown(qemuMonitorPtr mon); + ++ ++struct _qemuMonitorCPUInfo { ++ pid_t tid; ++}; ++typedef struct _qemuMonitorCPUInfo qemuMonitorCPUInfo; ++typedef qemuMonitorCPUInfo *qemuMonitorCPUInfoPtr; ++ ++void qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr list, ++ size_t nitems); + int qemuMonitorGetCPUInfo(qemuMonitorPtr mon, +- int **pids); ++ qemuMonitorCPUInfoPtr *vcpus, ++ size_t maxvcpus); ++ + int qemuMonitorGetVirtType(qemuMonitorPtr mon, + virDomainVirtType *virtType); + int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon, +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-Use-a-more-obvious-iterator-name.patch b/SOURCES/libvirt-qemu-monitor-Use-a-more-obvious-iterator-name.patch new file mode 100644 index 0000000..927c187 --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-Use-a-more-obvious-iterator-name.patch @@ -0,0 +1,63 @@ +From 5baee3e1d886f59e18e18c8c585dd74565945531 Mon Sep 17 00:00:00 2001 +Message-Id: <5baee3e1d886f59e18e18c8c585dd74565945531@dist-git> +From: Peter Krempa +Date: Wed, 14 Sep 2016 13:04:20 +0200 +Subject: [PATCH] qemu: monitor: Use a more obvious iterator name + +https://bugzilla.redhat.com/show_bug.cgi?id=1375783 + +The algorithm that matches data from query-cpus and +query-hotpluggable-cpus is quite complex. Start using descriptive +iterator names to avoid confusion. + +(cherry picked from commit 03376b6da0c1e1774513048b6c992d9836600aac) +--- + src/qemu/qemu_monitor.c | 23 ++++++++++++----------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 699dd7d..3ddd019 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1767,6 +1767,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + char *tmp; + int order = 1; + size_t totalvcpus = 0; ++ size_t mastervcpu; /* this iterator is used for iterating hotpluggable entities */ + size_t i; + size_t j; + +@@ -1807,19 +1808,19 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + /* transfer appropriate data from the hotpluggable list to corresponding + * entries. the entries returned by qemu may in fact describe multiple + * logical vcpus in the guest */ +- j = 0; ++ mastervcpu = 0; + for (i = 0; i < nhotplugvcpus; i++) { +- vcpus[j].socket_id = hotplugvcpus[i].socket_id; +- vcpus[j].core_id = hotplugvcpus[i].core_id; +- vcpus[j].thread_id = hotplugvcpus[i].thread_id; +- vcpus[j].vcpus = hotplugvcpus[i].vcpus; +- VIR_STEAL_PTR(vcpus[j].qom_path, hotplugvcpus[i].qom_path); +- VIR_STEAL_PTR(vcpus[j].alias, hotplugvcpus[i].alias); +- VIR_STEAL_PTR(vcpus[j].type, hotplugvcpus[i].type); +- vcpus[j].id = hotplugvcpus[i].enable_id; ++ vcpus[mastervcpu].socket_id = hotplugvcpus[i].socket_id; ++ vcpus[mastervcpu].core_id = hotplugvcpus[i].core_id; ++ vcpus[mastervcpu].thread_id = hotplugvcpus[i].thread_id; ++ vcpus[mastervcpu].vcpus = hotplugvcpus[i].vcpus; ++ VIR_STEAL_PTR(vcpus[mastervcpu].qom_path, hotplugvcpus[i].qom_path); ++ VIR_STEAL_PTR(vcpus[mastervcpu].alias, hotplugvcpus[i].alias); ++ VIR_STEAL_PTR(vcpus[mastervcpu].type, hotplugvcpus[i].type); ++ vcpus[mastervcpu].id = hotplugvcpus[i].enable_id; + +- /* skip over vcpu entries covered by this hotpluggable entry */ +- j += hotplugvcpus[i].vcpus; ++ /* calculate next master vcpu (hotpluggable unit) entry */ ++ mastervcpu += hotplugvcpus[i].vcpus; + } + + /* match entries from query cpus to the output array taking into account +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-monitor-qemuMonitorGetCPUInfoHotplug-Add-iterator-anycpu.patch b/SOURCES/libvirt-qemu-monitor-qemuMonitorGetCPUInfoHotplug-Add-iterator-anycpu.patch new file mode 100644 index 0000000..63cf08c --- /dev/null +++ b/SOURCES/libvirt-qemu-monitor-qemuMonitorGetCPUInfoHotplug-Add-iterator-anycpu.patch @@ -0,0 +1,67 @@ +From c3ae7baaaf353b9d4f71600456f4636030f9d788 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 14 Sep 2016 13:04:21 +0200 +Subject: [PATCH] qemu: monitor: qemuMonitorGetCPUInfoHotplug: Add iterator + 'anycpu' + +https://bugzilla.redhat.com/show_bug.cgi?id=1375783 + +Add separate iterator for iterating all the entries + +(cherry picked from commit 66da0356cd62398b1e06de317458e8883cb32db6) +--- + src/qemu/qemu_monitor.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 3ddd019..b88b0de 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1768,6 +1768,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + int order = 1; + size_t totalvcpus = 0; + size_t mastervcpu; /* this iterator is used for iterating hotpluggable entities */ ++ size_t anyvcpu; /* this iterator is used for any vcpu entry in the result */ + size_t i; + size_t j; + +@@ -1827,27 +1828,27 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + * multi-vcpu objects */ + for (j = 0; j < ncpuentries; j++) { + /* find the correct entry or beginning of group of entries */ +- for (i = 0; i < maxvcpus; i++) { +- if (cpuentries[j].qom_path && vcpus[i].qom_path && +- STREQ(cpuentries[j].qom_path, vcpus[i].qom_path)) ++ for (anyvcpu = 0; anyvcpu < maxvcpus; anyvcpu++) { ++ if (cpuentries[j].qom_path && vcpus[anyvcpu].qom_path && ++ STREQ(cpuentries[j].qom_path, vcpus[anyvcpu].qom_path)) + break; + } + +- if (i == maxvcpus) { ++ if (anyvcpu == maxvcpus) { + VIR_DEBUG("too many query-cpus entries for a given " + "query-hotpluggable-cpus entry"); + return -1; + } + +- if (vcpus[i].vcpus != 1) { ++ if (vcpus[anyvcpu].vcpus != 1) { + /* find a possibly empty vcpu thread for core granularity systems */ +- for (; i < maxvcpus; i++) { +- if (vcpus[i].tid == 0) ++ for (; anyvcpu < maxvcpus; anyvcpu++) { ++ if (vcpus[anyvcpu].tid == 0) + break; + } + } + +- vcpus[i].tid = cpuentries[j].tid; ++ vcpus[anyvcpu].tid = cpuentries[j].tid; + } + + return 0; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-move-the-guest-status-check-before-agent-config-and-status-check.patch b/SOURCES/libvirt-qemu-move-the-guest-status-check-before-agent-config-and-status-check.patch deleted file mode 100644 index 77ca72f..0000000 --- a/SOURCES/libvirt-qemu-move-the-guest-status-check-before-agent-config-and-status-check.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 80c40537679e42b440f88e97007136aca748d613 Mon Sep 17 00:00:00 2001 -Message-Id: <80c40537679e42b440f88e97007136aca748d613@dist-git> -From: Luyao Huang -Date: Fri, 10 Jul 2015 09:25:23 +0200 -Subject: [PATCH] qemu: move the guest status check before agent config and - status check - -https://bugzilla.redhat.com/show_bug.cgi?id=1240979 - -When use setvcpus command with --guest option to a offline vm, -we will get error: - - # virsh setvcpus test3 1 --guest - error: Guest agent is not responding: QEMU guest agent is not connected - -However guest is not running, agent status could not be connected. -In this case, report domain is not running will be better than agent is -not connected. Move the guest status check more early to output error to -point out guest status is not right. - -Also from the logic, a running vm is a basic requirement to use -agent, we cannot use agent if vm is not running. - -Signed-off-by: Luyao Huang -Signed-off-by: Michal Privoznik -(cherry picked from commit 0b3fcfb1eac845ba24ac2ad6eefb969d5f7b8395) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index e3793bd..c247737 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3076,6 +3076,13 @@ qemuDomainAgentAvailable(virDomainObjPtr vm, - { - qemuDomainObjPrivatePtr priv = vm->privateData; - -+ if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) { -+ if (reportError) { -+ virReportError(VIR_ERR_OPERATION_INVALID, "%s", -+ _("domain is not running")); -+ } -+ return false; -+ } - if (priv->agentError) { - if (reportError) { - virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s", -@@ -3099,13 +3106,6 @@ qemuDomainAgentAvailable(virDomainObjPtr vm, - return false; - } - } -- if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) { -- if (reportError) { -- virReportError(VIR_ERR_OPERATION_INVALID, "%s", -- _("domain is not running")); -- } -- return false; -- } - return true; - } - --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-ppc64-Align-memory-sizes-to-256MiB-blocks.patch b/SOURCES/libvirt-qemu-ppc64-Align-memory-sizes-to-256MiB-blocks.patch deleted file mode 100644 index 745017e..0000000 --- a/SOURCES/libvirt-qemu-ppc64-Align-memory-sizes-to-256MiB-blocks.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 7b6d887931845fb14f04bdfd997d61de940a0cff Mon Sep 17 00:00:00 2001 -Message-Id: <7b6d887931845fb14f04bdfd997d61de940a0cff@dist-git> -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:47 +0200 -Subject: [PATCH] qemu: ppc64: Align memory sizes to 256MiB blocks - -For some machine types ppc64 machines now require that memory sizes are -aligned to 256MiB increments (due to the dynamically reconfigurable -memory). As now we treat existing configs reasonably in regards to -migration, we can round all the sizes unconditionally. The only drawback -will be that the memory size of a VM can potentially increase by -(256MiB - 1byte) * number_of_NUMA_nodes. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1249006 -(cherry picked from commit bd874b6c422283ff9c07ee28b042b424e85a2398) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_domain.c | 7 ++++++- - tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args | 2 +- - 2 files changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 77f3d6a..a47535e 100644 ---- a/src/qemu/qemu_domain.c -+++ b/src/qemu/qemu_domain.c -@@ -3159,8 +3159,13 @@ qemuDomainAgentAvailable(virDomainObjPtr vm, - - - static unsigned long long --qemuDomainGetMemorySizeAlignment(virDomainDefPtr def ATTRIBUTE_UNUSED) -+qemuDomainGetMemorySizeAlignment(virDomainDefPtr def) - { -+ /* PPC requires the memory sizes to be rounded to 256MiB increments, so -+ * round them to the size always. */ -+ if (ARCH_IS_PPC64(def->os.arch)) -+ return 256 * 1024; -+ - /* Align memory size. QEMU requires rounding to next 4KiB block. - * We'll take the "traditional" path and round it to 1MiB*/ - -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args -index 64df406..305e924 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args -@@ -1,7 +1,7 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \ - QEMU_AUDIO_DRV=none /usr/bin/qemu-system-ppc64 -S -M pseries \ - -cpu host,compat=power7 \ ---m 214 -smp 4 -nographic -nodefconfig -nodefaults \ -+-m 256 -smp 4 -nographic -nodefconfig -nodefaults \ - -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \ - -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb \ - -chardev pty,id=charserial0 \ --- -2.5.3 - diff --git a/SOURCES/libvirt-qemu-process-Copy-final-vcpu-order-information-into-the-vcpu-definition.patch b/SOURCES/libvirt-qemu-process-Copy-final-vcpu-order-information-into-the-vcpu-definition.patch new file mode 100644 index 0000000..11ea1ac --- /dev/null +++ b/SOURCES/libvirt-qemu-process-Copy-final-vcpu-order-information-into-the-vcpu-definition.patch @@ -0,0 +1,98 @@ +From 6e807be3ce7a6a2ca3ea4ad8e853b953a052739d Mon Sep 17 00:00:00 2001 +Message-Id: <6e807be3ce7a6a2ca3ea4ad8e853b953a052739d@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:36 -0400 +Subject: [PATCH] qemu: process: Copy final vcpu order information into the + vcpu definition + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +The vcpu order information is extracted only for hotpluggable entities, +while vcpu definitions belonging to the same hotpluggable entity need +to all share the order information. + +We also can't overwrite it right away in the vcpu info detection code as +the order is necessary to add the hotpluggable vcpus enabled on boot in +the correct order. + +The helper will store the order information in places where we are +certain that it's necessary. + +(cherry picked from commit 20ef1232ec9b51dc498d270f7c279235b6842d25) +--- + src/qemu/qemu_domain.c | 34 ++++++++++++++++++++++++++++++++++ + src/qemu/qemu_domain.h | 3 +++ + src/qemu/qemu_process.c | 2 ++ + 3 files changed, 39 insertions(+) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 07c42a0..959b551 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -5949,3 +5949,37 @@ qemuDomainVcpuHotplugIsInOrder(virDomainDefPtr def) + + return seenonlinevcpus == virDomainDefGetVcpus(def); + } ++ ++ ++/** ++ * qemuDomainVcpuPersistOrder: ++ * @def: domain definition ++ * ++ * Saves the order of vcpus detected from qemu to the domain definition. ++ * The private data note the order only for the entry describing the ++ * hotpluggable entity. This function copies the order into the definition part ++ * of all sub entities. ++ */ ++void ++qemuDomainVcpuPersistOrder(virDomainDefPtr def) ++{ ++ size_t maxvcpus = virDomainDefGetVcpusMax(def); ++ virDomainVcpuDefPtr vcpu; ++ qemuDomainVcpuPrivatePtr vcpupriv; ++ unsigned int prevorder = 0; ++ size_t i; ++ ++ for (i = 0; i < maxvcpus; i++) { ++ vcpu = virDomainDefGetVcpu(def, i); ++ vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); ++ ++ if (!vcpu->online) { ++ vcpu->order = 0; ++ } else { ++ if (vcpupriv->enable_id != 0) ++ prevorder = vcpupriv->enable_id; ++ ++ vcpu->order = prevorder; ++ } ++ } ++} +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index 3a80769..cc7bd51 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -727,4 +727,7 @@ int qemuDomainPrepareChannel(virDomainChrDefPtr chr, + bool qemuDomainVcpuHotplugIsInOrder(virDomainDefPtr def) + ATTRIBUTE_NONNULL(1); + ++void qemuDomainVcpuPersistOrder(virDomainDefPtr def) ++ ATTRIBUTE_NONNULL(1); ++ + #endif /* __QEMU_DOMAIN_H__ */ +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 1726608..c94eed4 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -5202,6 +5202,8 @@ qemuProcessLaunch(virConnectPtr conn, + if (qemuDomainValidateVcpuInfo(vm) < 0) + goto cleanup; + ++ qemuDomainVcpuPersistOrder(vm->def); ++ + VIR_DEBUG("Detecting IOThread PIDs"); + if (qemuProcessDetectIOThreadPIDs(driver, vm, asyncJob) < 0) + goto cleanup; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-process-Fix-start-with-unpluggable-vcpus-with-NUMA-pinning.patch b/SOURCES/libvirt-qemu-process-Fix-start-with-unpluggable-vcpus-with-NUMA-pinning.patch new file mode 100644 index 0000000..24041ff --- /dev/null +++ b/SOURCES/libvirt-qemu-process-Fix-start-with-unpluggable-vcpus-with-NUMA-pinning.patch @@ -0,0 +1,53 @@ +From b917728ea6ae2e11c9ce5a46de1eedcdbe366748 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 7 Sep 2016 16:12:14 +0200 +Subject: [PATCH] qemu: process: Fix start with unpluggable vcpus with NUMA + pinning + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 + +Similarly to vcpu hotplug the emulator thread cgroup numa mapping needs +to be relaxed while hot-adding vcpus so that the threads can allocate +data in the DMA zone. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1370084 +(cherry picked from commit 68115fe0abf833a5d1dfb3a00aa216c332e84acb) +--- + src/qemu/qemu_process.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 9583506..0777c0c 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -4823,6 +4823,8 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver, + qemuDomainAsyncJob asyncJob) + { + unsigned int maxvcpus = virDomainDefGetVcpusMax(vm->def); ++ qemuDomainObjPrivatePtr priv = vm->privateData; ++ qemuCgroupEmulatorAllNodesDataPtr emulatorCgroup = NULL; + virDomainVcpuDefPtr vcpu; + qemuDomainVcpuPrivatePtr vcpupriv; + virJSONValuePtr vcpuprops = NULL; +@@ -4855,6 +4857,9 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver, + qsort(bootHotplug, nbootHotplug, sizeof(*bootHotplug), + qemuProcessVcpusSortOrder); + ++ if (qemuCgroupEmulatorAllNodesAllow(priv->cgroup, &emulatorCgroup) < 0) ++ goto cleanup; ++ + for (i = 0; i < nbootHotplug; i++) { + vcpu = bootHotplug[i]; + +@@ -4879,6 +4884,7 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver, + ret = 0; + + cleanup: ++ qemuCgrouEmulatorAllNodesRestore(emulatorCgroup); + VIR_FREE(bootHotplug); + virJSONValueFree(vcpuprops); + return ret; +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-process-Improve-update-of-maximum-balloon-state-at-startup.patch b/SOURCES/libvirt-qemu-process-Improve-update-of-maximum-balloon-state-at-startup.patch deleted file mode 100644 index 47508eb..0000000 --- a/SOURCES/libvirt-qemu-process-Improve-update-of-maximum-balloon-state-at-startup.patch +++ /dev/null @@ -1,102 +0,0 @@ -From e2860c4cd200424d09be581bc5c0b206dcffb629 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 14 Jul 2015 15:02:58 +0200 -Subject: [PATCH] qemu: process: Improve update of maximum balloon state at - startup - -https://bugzilla.redhat.com/show_bug.cgi?id=1242940 - -In commit 641a145d73fdc3dd9350fd57b3d3247abf101c05 I've added code that -resets the balloon memory value to full size prior to resuming the vCPUs -since the size certainly was not reduced at that point. - -Since qemuProcessStart is used also in code paths with already booted -up guests (migration, save/restore) the assumption is not entirely true -since the guest might already been running before. - -This patch adds a function that queries the monitor rather than using -the full size since a balloon event would not be reissued in case we are -recovering a saved migration state. - -Additionally the new function is used also when reconnecting to a VM -after libvirtd restart since we might have missed a few balloon events -while libvirtd was not running. - -(cherry picked from commit c212e0c77986b0592f63e02d9ecd816aaf7aac18) - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 40 ++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 38 insertions(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index e05be54..35b6513 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -2116,6 +2116,38 @@ qemuProcessReconnectRefreshChannelVirtioState(virQEMUDriverPtr driver, - - - static int -+qemuProcessRefreshBalloonState(virQEMUDriverPtr driver, -+ virDomainObjPtr vm, -+ int asyncJob) -+{ -+ unsigned long long balloon; -+ int rc; -+ -+ /* if no ballooning is available, the current size equals to the current -+ * full memory size */ -+ if (!vm->def->memballoon || -+ vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE) { -+ vm->def->mem.cur_balloon = virDomainDefGetMemoryActual(vm->def); -+ return 0; -+ } -+ -+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) -+ return -1; -+ -+ rc = qemuMonitorGetBalloonInfo(qemuDomainGetMonitor(vm), &balloon); -+ if (qemuDomainObjExitMonitor(driver, vm) < 0) -+ rc = -1; -+ -+ if (rc < 0) -+ return -1; -+ -+ vm->def->mem.cur_balloon = balloon; -+ -+ return 0; -+} -+ -+ -+static int - qemuProcessWaitForMonitor(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, -@@ -3830,6 +3862,9 @@ qemuProcessReconnect(void *opaque) - if (qemuProcessReconnectRefreshChannelVirtioState(driver, obj) < 0) - goto error; - -+ if (qemuProcessRefreshBalloonState(driver, obj, QEMU_ASYNC_JOB_NONE) < 0) -+ goto error; -+ - if (qemuProcessRecoverJob(driver, obj, conn, &oldjob) < 0) - goto error; - -@@ -4970,10 +5005,11 @@ int qemuProcessStart(virConnectPtr conn, - goto cleanup; - } - -- /* Since CPUs were not started yet, the ballon could not return the memory -+ /* Since CPUs were not started yet, the balloon could not return the memory - * to the host and thus cur_balloon needs to be updated so that GetXMLdesc - * and friends return the correct size in case they can't grab the job */ -- vm->def->mem.cur_balloon = virDomainDefGetMemoryActual(vm->def); -+ if (qemuProcessRefreshBalloonState(driver, vm, asyncJob) < 0) -+ goto cleanup; - - VIR_DEBUG("Detecting actual memory size for video device"); - if (qemuProcessUpdateVideoRamSize(driver, vm, asyncJob) < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-remove-deadcode-in-qemuDomain-HelperGetVcpus-GetIOThreadsLive.patch b/SOURCES/libvirt-qemu-remove-deadcode-in-qemuDomain-HelperGetVcpus-GetIOThreadsLive.patch deleted file mode 100644 index c9e14f0..0000000 --- a/SOURCES/libvirt-qemu-remove-deadcode-in-qemuDomain-HelperGetVcpus-GetIOThreadsLive.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 967db74af2bc58af78339a40a079759ec265b8ad Mon Sep 17 00:00:00 2001 -Message-Id: <967db74af2bc58af78339a40a079759ec265b8ad@dist-git> -From: Luyao Huang -Date: Wed, 5 Aug 2015 18:18:06 +0200 -Subject: [PATCH] qemu: remove deadcode in - qemuDomain{HelperGetVcpus|GetIOThreadsLive} - -We set @hostcpus variable but not use it. - -Signed-off-by: Luyao Huang -(cherry picked from commit 3b2b4114da4341feaf477cec7bc20556810e11e7) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index c59186d..8f5e4fb 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -1427,13 +1427,9 @@ static int - qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo, - unsigned char *cpumaps, int maplen) - { -- int hostcpus; - size_t i, v; - qemuDomainObjPrivatePtr priv = vm->privateData; - -- if ((hostcpus = nodeGetCPUCount()) < 0) -- return -1; -- - if (priv->vcpupids == NULL) { - virReportError(VIR_ERR_OPERATION_INVALID, - "%s", _("cpu affinity is not supported")); -@@ -5599,7 +5595,6 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver, - qemuMonitorIOThreadInfoPtr *iothreads = NULL; - virDomainIOThreadInfoPtr *info_ret = NULL; - int niothreads = 0; -- int hostcpus; - size_t i; - int ret = -1; - -@@ -5632,9 +5627,6 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver, - goto endjob; - } - -- if ((hostcpus = nodeGetCPUCount()) < 0) -- goto endjob; -- - if (VIR_ALLOC_N(info_ret, niothreads) < 0) - goto endjob; - --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu-report-error-for-non-existing-disk-in-blockjobinfo.patch b/SOURCES/libvirt-qemu-report-error-for-non-existing-disk-in-blockjobinfo.patch deleted file mode 100644 index 81374ec..0000000 --- a/SOURCES/libvirt-qemu-report-error-for-non-existing-disk-in-blockjobinfo.patch +++ /dev/null @@ -1,45 +0,0 @@ -From aa35a16bdc42e64f646b5fa09cdf5809b98e507f Mon Sep 17 00:00:00 2001 -Message-Id: -From: Luyao Huang -Date: Fri, 10 Jul 2015 09:27:56 +0200 -Subject: [PATCH] qemu: report error for non-existing disk in blockjobinfo - -Before: - - # virsh blockjob r7 vdc - error: An error occurred, but the cause is unknown - -After: - - # virsh blockjob r7 vdc - error: Disk 'vdc' not found in the domain - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1241355 - -Signed-off-by: Luyao Huang -(cherry picked from commit b5c2245b0cddbb605fece8d8f3c7075d269e3302) -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index b3e9e63..063bedb 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -16515,8 +16515,11 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom, - if (qemuDomainSupportsBlockJobs(vm, NULL) < 0) - goto endjob; - -- if (!(disk = virDomainDiskByName(vm->def, path, true))) -+ if (!(disk = virDomainDiskByName(vm->def, path, true))) { -+ virReportError(VIR_ERR_INVALID_ARG, -+ _("disk %s not found in the domain"), path); - goto endjob; -+ } - - qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorGetBlockJobInfo(qemuDomainGetMonitor(vm), --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu-setcpus-Report-better-errors.patch b/SOURCES/libvirt-qemu-setcpus-Report-better-errors.patch new file mode 100644 index 0000000..01734ba --- /dev/null +++ b/SOURCES/libvirt-qemu-setcpus-Report-better-errors.patch @@ -0,0 +1,89 @@ +From f613684014782419a1e4951443658403193f458f Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:12 -0400 +Subject: [PATCH] qemu: setcpus: Report better errors + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Mention whether it was the live or persistent definition which caused an +error reported and explicitly error out in case when attempting to set +maximum vcpu count for a live domain. + +(cherry picked from commit e96041ff1ac270b719e43bf0e3d5a224fe61c26a) +--- + src/qemu/qemu_driver.c | 43 ++++++++++++++++++++++++++++--------------- + 1 file changed, 28 insertions(+), 15 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 1011bb8..4e703ae 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4770,7 +4770,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + virDomainDefPtr def; + virDomainDefPtr persistentDef; + int ret = -1; +- unsigned int maxvcpus = 0; + virQEMUDriverConfigPtr cfg = NULL; + qemuDomainObjPrivatePtr priv; + size_t i; +@@ -4806,6 +4805,34 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) + goto endjob; + ++ if (def) { ++ if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { ++ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", ++ _("maximum vcpu count of a live domain can't be " ++ "modified")); ++ goto endjob; ++ } ++ ++ if (nvcpus > virDomainDefGetVcpusMax(def)) { ++ virReportError(VIR_ERR_INVALID_ARG, ++ _("requested vcpus is greater than max allowable" ++ " vcpus for the live domain: %u > %u"), ++ nvcpus, virDomainDefGetVcpusMax(def)); ++ goto endjob; ++ } ++ } ++ ++ if (persistentDef) { ++ if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM) && ++ nvcpus > virDomainDefGetVcpusMax(persistentDef)) { ++ virReportError(VIR_ERR_INVALID_ARG, ++ _("requested vcpus is greater than max allowable" ++ " vcpus for the persistent domain: %u > %u"), ++ nvcpus, virDomainDefGetVcpusMax(persistentDef)); ++ goto endjob; ++ } ++ } ++ + if (def && virNumaIsAvailable() && + virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { + if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, +@@ -4823,20 +4850,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + goto endjob; + } + +- if (def) +- maxvcpus = virDomainDefGetVcpusMax(def); +- if (persistentDef) { +- if (!maxvcpus || maxvcpus > virDomainDefGetVcpusMax(persistentDef)) +- maxvcpus = virDomainDefGetVcpusMax(persistentDef); +- } +- if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM) && nvcpus > maxvcpus) { +- virReportError(VIR_ERR_INVALID_ARG, +- _("requested vcpus is greater than max allowable" +- " vcpus for the domain: %d > %d"), +- nvcpus, maxvcpus); +- goto endjob; +- } +- + if (def) { + if (nvcpus > virDomainDefGetVcpus(def)) { + for (i = virDomainDefGetVcpus(def); i < nvcpus; i++) { +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu-setvcpus-Extract-setting-of-maximum-vcpu-count.patch b/SOURCES/libvirt-qemu-setvcpus-Extract-setting-of-maximum-vcpu-count.patch new file mode 100644 index 0000000..c4ce9fb --- /dev/null +++ b/SOURCES/libvirt-qemu-setvcpus-Extract-setting-of-maximum-vcpu-count.patch @@ -0,0 +1,120 @@ +From 1df0ec24ac710cd5ebeb4c3eb1fd589246e17e78 Mon Sep 17 00:00:00 2001 +Message-Id: <1df0ec24ac710cd5ebeb4c3eb1fd589246e17e78@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:13 -0400 +Subject: [PATCH] qemu: setvcpus: Extract setting of maximum vcpu count + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Setting of the maximum vcpu count is slightly semantically different +thus split it into a self-contained func. + +(cherry picked from commit f10da2f55331afee5b302283518b6593e2dc706e) +--- + src/qemu/qemu_driver.c | 67 +++++++++++++++++++++++++++++++++----------------- + 1 file changed, 44 insertions(+), 23 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 4e703ae..520a628 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4762,6 +4762,42 @@ qemuDomainSetVcpusAgent(virDomainObjPtr vm, + + + static int ++qemuDomainSetVcpusMax(virQEMUDriverPtr driver, ++ virDomainDefPtr def, ++ virDomainDefPtr persistentDef, ++ unsigned int nvcpus) ++{ ++ virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); ++ int ret = -1; ++ ++ if (def) { ++ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", ++ _("maximum vcpu count of a live domain can't be modified")); ++ goto cleanup; ++ } ++ ++ if (virDomainNumaGetCPUCountTotal(persistentDef->numa) > nvcpus) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("Number of CPUs in exceeds the desired " ++ "maximum vcpu count")); ++ goto cleanup; ++ } ++ ++ if (virDomainDefSetVcpusMax(persistentDef, nvcpus, driver->xmlopt) < 0) ++ goto cleanup; ++ ++ if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ ++ cleanup: ++ virObjectUnref(cfg); ++ return ret; ++} ++ ++ ++static int + qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + unsigned int flags) + { +@@ -4805,14 +4841,12 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) + goto endjob; + +- if (def) { +- if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { +- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", +- _("maximum vcpu count of a live domain can't be " +- "modified")); +- goto endjob; +- } ++ if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { ++ ret = qemuDomainSetVcpusMax(driver, def, persistentDef, nvcpus); ++ goto endjob; ++ } + ++ if (def) { + if (nvcpus > virDomainDefGetVcpusMax(def)) { + virReportError(VIR_ERR_INVALID_ARG, + _("requested vcpus is greater than max allowable" +@@ -4823,8 +4857,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + } + + if (persistentDef) { +- if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM) && +- nvcpus > virDomainDefGetVcpusMax(persistentDef)) { ++ if (nvcpus > virDomainDefGetVcpusMax(persistentDef)) { + virReportError(VIR_ERR_INVALID_ARG, + _("requested vcpus is greater than max allowable" + " vcpus for the persistent domain: %u > %u"), +@@ -4868,20 +4901,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, + } + + if (persistentDef) { +- if (flags & VIR_DOMAIN_VCPU_MAXIMUM) { +- if (virDomainNumaGetCPUCountTotal(persistentDef->numa) > nvcpus) { +- virReportError(VIR_ERR_INVALID_ARG, "%s", +- _("Number of CPUs in exceeds the desired " +- "maximum vcpu count")); +- goto endjob; +- } +- +- if (virDomainDefSetVcpusMax(persistentDef, nvcpus, driver->xmlopt) < 0) +- goto endjob; +- } else { +- if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0) +- goto endjob; +- } ++ if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0) ++ goto endjob; + + if (virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef) < 0) +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemuBuildCpuCommandLine-Don-t-leak-buf.patch b/SOURCES/libvirt-qemuBuildCpuCommandLine-Don-t-leak-buf.patch new file mode 100644 index 0000000..b84ae62 --- /dev/null +++ b/SOURCES/libvirt-qemuBuildCpuCommandLine-Don-t-leak-buf.patch @@ -0,0 +1,49 @@ +From 6add0a541a003a6ba45ddf5aa7412e2ded98dcac Mon Sep 17 00:00:00 2001 +Message-Id: <6add0a541a003a6ba45ddf5aa7412e2ded98dcac@dist-git> +From: Michal Privoznik +Date: Wed, 24 Aug 2016 16:10:57 -0400 +Subject: [PATCH] qemuBuildCpuCommandLine: Don't leak @buf + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Just like every other qemuBuild*CommandLine() function, this uses +a buffer to hold partial cmd line strings too. However, if +there's an error, the control jumps to 'cleanup' label leaving +the buffer behind and thus leaking it. + +==2013== 1,006 bytes in 1 blocks are definitely lost in loss record 701 of 711 +==2013== at 0x4C29F80: malloc (vg_replace_malloc.c:296) +==2013== by 0x4C2C32F: realloc (vg_replace_malloc.c:692) +==2013== by 0xAD925A8: virReallocN (viralloc.c:245) +==2013== by 0xAD95EA8: virBufferGrow (virbuffer.c:130) +==2013== by 0xAD95F78: virBufferAdd (virbuffer.c:165) +==2013== by 0x5097F5: qemuBuildCpuModelArgStr (qemu_command.c:6339) +==2013== by 0x509CC3: qemuBuildCpuCommandLine (qemu_command.c:6437) +==2013== by 0x51142C: qemuBuildCommandLine (qemu_command.c:9174) +==2013== by 0x47CA3A: qemuProcessCreatePretendCmd (qemu_process.c:5546) +==2013== by 0x433698: testCompareXMLToArgvFiles (qemuxml2argvtest.c:332) +==2013== by 0x4339AC: testCompareXMLToArgvHelper (qemuxml2argvtest.c:413) +==2013== by 0x446E7A: virTestRun (testutils.c:179) + +Signed-off-by: Michal Privoznik +(cherry picked from commit 87df945240dcd9769d6fd6dbddfb2bb5601b349d) +--- + src/qemu/qemu_command.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 9832a6a..57b04ee 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -6841,6 +6841,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, + + cleanup: + VIR_FREE(cpu); ++ virBufferFreeAndReset(&buf); + return ret; + } + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemuBuildMachineCommandLine-Follow-our-pattern.patch b/SOURCES/libvirt-qemuBuildMachineCommandLine-Follow-our-pattern.patch new file mode 100644 index 0000000..9ba5b6a --- /dev/null +++ b/SOURCES/libvirt-qemuBuildMachineCommandLine-Follow-our-pattern.patch @@ -0,0 +1,137 @@ +From bb29aaf4fd23afd3e51227f415816707d28cfadb Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Privoznik +Date: Fri, 5 Aug 2016 14:35:24 +0200 +Subject: [PATCH] qemuBuildMachineCommandLine: Follow our pattern + +https://bugzilla.redhat.com/show_bug.cgi?id=1304483 + +We use 'goto cleanup' for a reason. If a function can exit at +many places but doesn't follow the pattern, it has to copy the +free code in multiple places. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 90b42f0fad5ee3395cf26c0cfc0a8bd1ad1753bb) +Signed-off-by: Michal Privoznik +--- + src/qemu/qemu_command.c | 39 ++++++++++++++++++--------------------- + 1 file changed, 18 insertions(+), 21 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index b6a7798..1a5c6dc 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -6956,7 +6956,9 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) + { ++ virBuffer buf = VIR_BUFFER_INITIALIZER; + bool obsoleteAccel = false; ++ int ret = -1; + + /* This should *never* be NULL, since we always provide + * a machine in the capabilities data for QEMU. So this +@@ -6981,7 +6983,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disable shared memory is not available " + "with this QEMU binary")); +- return -1; ++ return -1; + } + + obsoleteAccel = true; +@@ -6993,7 +6995,6 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + return -1; + } + } else { +- virBuffer buf = VIR_BUFFER_INITIALIZER; + virTristateSwitch vmport = def->features[VIR_DOMAIN_FEATURE_VMPORT]; + + virCommandAddArg(cmd, "-machine"); +@@ -7017,8 +7018,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("vmport is not available " + "with this QEMU binary")); +- virBufferFreeAndReset(&buf); +- return -1; ++ goto cleanup; + } + + virBufferAsprintf(&buf, ",vmport=%s", +@@ -7030,8 +7030,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("dump-guest-core is not available " + "with this QEMU binary")); +- virBufferFreeAndReset(&buf); +- return -1; ++ goto cleanup; + } + + virBufferAsprintf(&buf, ",dump-guest-core=%s", +@@ -7039,22 +7038,19 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + } + + if (def->mem.nosharepages) { +- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MEM_MERGE)) { +- virBufferAddLit(&buf, ",mem-merge=off"); +- } else { ++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MEM_MERGE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disable shared memory is not available " + "with this QEMU binary")); +- virBufferFreeAndReset(&buf); +- return -1; ++ goto cleanup; + } ++ ++ virBufferAddLit(&buf, ",mem-merge=off"); + } + + if (def->keywrap && +- !qemuAppendKeyWrapMachineParms(&buf, qemuCaps, def->keywrap)) { +- virBufferFreeAndReset(&buf); +- return -1; +- } ++ !qemuAppendKeyWrapMachineParms(&buf, qemuCaps, def->keywrap)) ++ goto cleanup; + + if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON) { + if (def->gic_version != VIR_GIC_VERSION_NONE) { +@@ -7062,8 +7058,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("gic-version option is available " + "only for ARM virt machine")); +- virBufferFreeAndReset(&buf); +- return -1; ++ goto cleanup; + } + + /* The default GIC version should not be specified on the +@@ -7074,8 +7069,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("gic-version option is not available " + "with this QEMU binary")); +- virBufferFreeAndReset(&buf); +- return -1; ++ goto cleanup; + } + + virBufferAsprintf(&buf, ",gic-version=%s", +@@ -7089,9 +7083,12 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, + + if (obsoleteAccel && + qemuBuildObsoleteAccelArg(cmd, def, qemuCaps) < 0) +- return -1; ++ goto cleanup; + +- return 0; ++ ret = 0; ++ cleanup: ++ virBufferFreeAndReset(&buf); ++ return ret; + } + + static int +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemuDomainGetJobStatsInternal-Support-migration-events.patch b/SOURCES/libvirt-qemuDomainGetJobStatsInternal-Support-migration-events.patch deleted file mode 100644 index 1c9cd26..0000000 --- a/SOURCES/libvirt-qemuDomainGetJobStatsInternal-Support-migration-events.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 891e04fccd80d2773e177858da80210800ebbad5 Mon Sep 17 00:00:00 2001 -Message-Id: <891e04fccd80d2773e177858da80210800ebbad5@dist-git> -From: Jiri Denemark -Date: Tue, 26 May 2015 13:42:06 +0200 -Subject: [PATCH] qemuDomainGetJobStatsInternal: Support migration events - -When QEMU supports migration events the qemuDomainJobInfo structure will -no longer be updated with migration statistics. We have to enter a job -and explicitly ask QEMU every time virDomainGetJob{Info,Stats} is -called. - -Signed-off-by: Jiri Denemark -(cherry picked from commit 66c95964a5706c223f4857e55396318c857abb6f) - -https://bugzilla.redhat.com/show_bug.cgi?id=1212077 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 27 +++++++++++++++++++++++---- - 1 file changed, 23 insertions(+), 4 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 6dafbec..b3e9e63 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -13021,15 +13021,27 @@ qemuConnectBaselineCPU(virConnectPtr conn ATTRIBUTE_UNUSED, - - - static int --qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, -+qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver, - virDomainObjPtr vm, - bool completed, - qemuDomainJobInfoPtr jobInfo) - { - qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainJobInfoPtr info; -+ bool fetch = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); - int ret = -1; - -+ if (completed) -+ fetch = false; -+ -+ /* Do not ask QEMU if migration is not even running yet */ -+ if (!priv->job.current || !priv->job.current->status.status) -+ fetch = false; -+ -+ if (fetch && -+ qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0) -+ return -1; -+ - if (!completed && - !virDomainObjIsActive(vm)) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", -@@ -13050,12 +13062,19 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, - *jobInfo = *info; - - if (jobInfo->type == VIR_DOMAIN_JOB_BOUNDED || -- jobInfo->type == VIR_DOMAIN_JOB_UNBOUNDED) -- ret = qemuDomainJobInfoUpdateTime(jobInfo); -- else -+ jobInfo->type == VIR_DOMAIN_JOB_UNBOUNDED) { -+ if (fetch) -+ ret = qemuMigrationFetchJobStatus(driver, vm, QEMU_ASYNC_JOB_NONE, -+ jobInfo); -+ else -+ ret = qemuDomainJobInfoUpdateTime(jobInfo); -+ } else { - ret = 0; -+ } - - cleanup: -+ if (fetch) -+ qemuDomainObjEndJob(driver, vm); - return ret; - } - --- -2.4.5 - diff --git a/SOURCES/libvirt-qemuDomainSetInterfaceParameters-Use-new-functions-to-update-bandwidth.patch b/SOURCES/libvirt-qemuDomainSetInterfaceParameters-Use-new-functions-to-update-bandwidth.patch deleted file mode 100644 index 88f09f0..0000000 --- a/SOURCES/libvirt-qemuDomainSetInterfaceParameters-Use-new-functions-to-update-bandwidth.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 97db8e9056749a76419e87339d2d368b29a9098a Mon Sep 17 00:00:00 2001 -Message-Id: <97db8e9056749a76419e87339d2d368b29a9098a@dist-git> -From: Michal Privoznik -Date: Fri, 14 Aug 2015 16:06:33 +0200 -Subject: [PATCH] qemuDomainSetInterfaceParameters: Use new functions to update - bandwidth - -https://bugzilla.redhat.com/show_bug.cgi?id=1252473 - -As sketched in previous commits, imagine the following scenario: - - virsh # domiftune gentoo vnet0 - inbound.average: 100 - inbound.peak : 0 - inbound.burst : 0 - outbound.average: 100 - outbound.peak : 0 - outbound.burst : 0 - - virsh # domiftune gentoo vnet0 --inbound 0 - - virsh # shutdown gentoo - Domain gentoo is being shutdown - - virsh # list --all - error: Failed to list domains - error: Cannot recv data: Connection reset by peer - - Program received signal SIGSEGV, Segmentation fault. - 0x00007fffe80ea221 in networkUnplugBandwidth (net=0x7fff9400c1a0, iface=0x7fff940ea3e0) at network/bridge_driver.c:4881 - 4881 net->floor_sum -= ifaceBand->in->floor; - -This is rather unfortunate. We should not SIGSEGV here. The -problem is, that while in the second step the inbound QoS was -cleared out, the network part of it was not updated (moreover, we -don't report that vnet0 had inbound.floor set). Internal -structure therefore still had some fragments left (e.g. -class_id). So when qemuProcessStop() started to clean up the -environment it got to networkUnplugBandwidth(). Here, class_id is -set therefore function assumes that there is an inbound QoS. This -actually is a fair assumption to make, there's no need for a -special QoS box in network's QoS when there's no QoS to set. -Anyway, the problem is not the networkUnplugBandwidth() rather -than qemuDomainSetInterfaceParameters() which completely forgot -about QoS being disperse (some parts are set directly on -interface itself, some on bridge the interface is plugged into). - -Signed-off-by: Michal Privoznik -(cherry picked from commit 5ee6d243fc5f2ba840ba43e4c9bd85cb5cb745a0) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index ec61bb5..e1ceb98 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -100,6 +100,7 @@ - #include "vircgroup.h" - #include "virnuma.h" - #include "dirname.h" -+#include "network/bridge_driver.h" - - #define VIR_FROM_THIS VIR_FROM_QEMU - -@@ -11323,7 +11324,11 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom, - sizeof(*newBandwidth->out)); - } - -- if (virNetDevBandwidthSet(net->ifname, newBandwidth, false) < 0) { -+ if (!networkBandwidthChangeAllowed(net, newBandwidth)) -+ goto endjob; -+ -+ if (virNetDevBandwidthSet(net->ifname, newBandwidth, false) < 0 || -+ networkBandwidthUpdate(net, newBandwidth) < 0) { - ignore_value(virNetDevBandwidthSet(net->ifname, - net->bandwidth, - false)); --- -2.5.0 - diff --git a/SOURCES/libvirt-qemuDomainSetNumaParamsLive-Check-for-NUMA-mode-more-wisely.patch b/SOURCES/libvirt-qemuDomainSetNumaParamsLive-Check-for-NUMA-mode-more-wisely.patch deleted file mode 100644 index 2b00b9b..0000000 --- a/SOURCES/libvirt-qemuDomainSetNumaParamsLive-Check-for-NUMA-mode-more-wisely.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 5804052866cb35179f3520d1b21238b49ee19018 Mon Sep 17 00:00:00 2001 -Message-Id: <5804052866cb35179f3520d1b21238b49ee19018@dist-git> -From: Michal Privoznik -Date: Tue, 14 Jul 2015 11:20:26 +0200 -Subject: [PATCH] qemuDomainSetNumaParamsLive: Check for NUMA mode more wisely - -https://bugzilla.redhat.com/show_bug.cgi?id=1232663 - -In one of my previous ptaches (bcd9a564) I've tried to fix the problem -that we blindly assumed strict NUMA mode for guests. This led to -several problems like us pinning a domain onto a nodeset via libnuma -among with CGroups. Once the nodeset was changed by user, well, it did -not result in desired effect. See the original commit for more info. -But, the commit I wrote had a bug: when NUMA parameters are changed on -a running domain we require domain to be strictly pinned onto a -nodeset. Due to a typo a condition was mis-evaluated. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 1cf25f633414dd844601965174b81bc9eb207d6b) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_driver.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index fb42dae..47889d9 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -10036,7 +10036,7 @@ qemuDomainSetNumaParamsLive(virDomainObjPtr vm, - size_t i = 0; - int ret = -1; - -- if (virDomainNumatuneGetMode(vm->def->numa, -1, &mode) < 0 || -+ if (virDomainNumatuneGetMode(vm->def->numa, -1, &mode) == 0 && - mode != VIR_DOMAIN_NUMATUNE_MEM_STRICT) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("change of nodeset for running domain " --- -2.5.0 - diff --git a/SOURCES/libvirt-qemuProcessHandleMigrationStatus-Update-migration-status-more-frequently.patch b/SOURCES/libvirt-qemuProcessHandleMigrationStatus-Update-migration-status-more-frequently.patch deleted file mode 100644 index 8090b4f..0000000 --- a/SOURCES/libvirt-qemuProcessHandleMigrationStatus-Update-migration-status-more-frequently.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 8aa9a7056bc7d9510819b67a7a082ad661d9dc99 Mon Sep 17 00:00:00 2001 -Message-Id: <8aa9a7056bc7d9510819b67a7a082ad661d9dc99@dist-git> -From: Michal Privoznik -Date: Mon, 13 Jul 2015 15:26:04 +0200 -Subject: [PATCH] qemuProcessHandleMigrationStatus: Update migration status - more frequently - -https://bugzilla.redhat.com/show_bug.cgi?id=1212077 - -After Jirka's migration patches libvirt is listening on migration -events from qemu instead of actively polling on the monitor. There is, -however, a little regression (introduced in 6d2edb6a42d0d41). The -problem is, the current status of migration job is updated in -qemuProcessHandleMigrationStatus if and only if migration job was -started. But eventually every asynchronous job may result in -migration. Therefore, since this job is not strictly a -migration job, internal state was not updated and later checks failed: - - virsh # save fedora22 /tmp/fedora22_ble.save - error: Failed to save domain fedora22 to /tmp/fedora22_ble.save - error: operation failed: domain save job: is not active - -Signed-off-by: Michal Privoznik -(cherry picked from commit 45cc2fca5c97d7e6d6e00389c6f459b5660d0f1f) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 91ff5f8..e05be54 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -1532,8 +1532,7 @@ qemuProcessHandleMigrationStatus(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - qemuMonitorMigrationStatusTypeToString(status)); - - priv = vm->privateData; -- if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT && -- priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_IN) { -+ if (priv->job.asyncJob == QEMU_ASYNC_JOB_NONE) { - VIR_DEBUG("got MIGRATION event without a migration job"); - goto cleanup; - } --- -2.5.0 - diff --git a/SOURCES/libvirt-qemu_capabilities-Introduce-virtio-net-.rx_queue_size.patch b/SOURCES/libvirt-qemu_capabilities-Introduce-virtio-net-.rx_queue_size.patch new file mode 100644 index 0000000..2fe7433 --- /dev/null +++ b/SOURCES/libvirt-qemu_capabilities-Introduce-virtio-net-.rx_queue_size.patch @@ -0,0 +1,57 @@ +From a0030cf0bbaaa714d9bb245ca2a2a6c6b77deea6 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Privoznik +Date: Sat, 10 Sep 2016 08:25:11 +0200 +Subject: [PATCH] qemu_capabilities: Introduce virtio-net-*.rx_queue_size + +https://bugzilla.redhat.com/show_bug.cgi?id=1366989 + +Just like in the previous commit, teach qemu driver to detect +whether qemu supports this configuration knob or not. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 06d09696557a4cea547ca13bd6d5bc85d7f17818) +Signed-off-by: Michal Privoznik +--- + src/qemu/qemu_capabilities.c | 3 +++ + src/qemu/qemu_capabilities.h | 3 +++ + 2 files changed, 6 insertions(+) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 5b68271..2c49109 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -340,6 +340,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, + "intel-iommu", + "smm", + "query-hotpluggable-cpus", ++ ++ "virtio-net.rx_queue_size", /* 235 */ + ); + + +@@ -1579,6 +1581,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = { + static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioNet[] = { + { "tx", QEMU_CAPS_VIRTIO_TX_ALG }, + { "event_idx", QEMU_CAPS_VIRTIO_NET_EVENT_IDX }, ++ { "rx_queue_size", QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE }, + }; + + static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioSCSI[] = { +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index e05c178..6949ec8 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -374,6 +374,9 @@ typedef enum { + QEMU_CAPS_MACHINE_SMM_OPT, /* -machine xxx,smm=on/off/auto */ + QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS, /* qmp command query-hotpluggable-cpus */ + ++ /* 235 */ ++ QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE, /* virtio-net-*.rx_queue_size */ ++ + QEMU_CAPS_LAST /* this must always be the last item */ + } virQEMUCapsFlags; + +-- +2.10.0 + diff --git a/SOURCES/libvirt-qemu_command-don-t-modify-heads-for-graphics-device.patch b/SOURCES/libvirt-qemu_command-don-t-modify-heads-for-graphics-device.patch new file mode 100644 index 0000000..16ae588 --- /dev/null +++ b/SOURCES/libvirt-qemu_command-don-t-modify-heads-for-graphics-device.patch @@ -0,0 +1,36 @@ +From 60309df2aa2cafabf213a3eedfa5825d3b3e87c7 Mon Sep 17 00:00:00 2001 +Message-Id: <60309df2aa2cafabf213a3eedfa5825d3b3e87c7@dist-git> +From: Pavel Hrdina +Date: Mon, 15 Aug 2016 12:58:31 +0200 +Subject: [PATCH] qemu_command: don't modify heads for graphics device + +Setting heads to 0 in case that *max_outputs* is not supported while building +command line doesn't have any real effect. It only removes *heads* attribute +from live XML, but after restarting libvirt the default value is restored. + +Signed-off-by: Pavel Hrdina +(cherry picked from commit ef11e770da543c171f044bbd579e482febcd9b63) + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1366119 + +Signed-off-by: Pavel Hrdina +--- + src/qemu/qemu_command.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 6be16cc..4ce86bb 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -4301,8 +4301,6 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, + virQEMUCapsGet(qemuCaps, QEMU_CAPS_QXL_MAX_OUTPUTS))) { + if (video->heads) + virBufferAsprintf(&buf, ",max_outputs=%u", video->heads); +- } else { +- video->heads = 0; + } + } else if (video->vram && + ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA && +-- +2.9.2 + diff --git a/SOURCES/libvirt-qemu_hotplug-try-harder-to-eject-media.patch b/SOURCES/libvirt-qemu_hotplug-try-harder-to-eject-media.patch deleted file mode 100644 index bfea4fe..0000000 --- a/SOURCES/libvirt-qemu_hotplug-try-harder-to-eject-media.patch +++ /dev/null @@ -1,169 +0,0 @@ -From cc6d958b1ba9efb26ca5b28c575369e335b1e7a0 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Pavel Hrdina -Date: Fri, 10 Jul 2015 12:39:32 +0200 -Subject: [PATCH] qemu_hotplug: try harder to eject media - -Some guests lock the tray and QEMU eject command will simply fail to -eject the media. But the guest OS can handle this attempt to eject the -media and can unlock the tray and open it. In this case, we should try -again to actually eject the media. - -If the first attempt fails to detect a tray_open we will fail with -error, from monitor. If we receive that event, we know, that the guest -properly reacted to the eject request, unlocked the tray and opened it. -In this case, we need to run the command again to actually eject the -media from the device. The reason to call it again is, that QEMU -doesn't wait for the guest to react and report an error, that the tray -is locked. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1147471 - -Signed-off-by: Pavel Hrdina -(cherry picked from commit 28554080ecbcd1e57266b29734feb76799c2ee48) -Signed-off-by: Pavel Hrdina -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_hotplug.c | 73 +++++++++++++++++++++++-------------------------- - src/qemu/qemu_process.c | 2 ++ - 2 files changed, 36 insertions(+), 39 deletions(-) - -diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c -index 79338cf..1ea397f 100644 ---- a/src/qemu/qemu_hotplug.c -+++ b/src/qemu/qemu_hotplug.c -@@ -59,7 +59,7 @@ - - VIR_LOG_INIT("qemu.qemu_hotplug"); - --#define CHANGE_MEDIA_RETRIES 10 -+#define CHANGE_MEDIA_TIMEOUT 5000 - - /* Wait up to 5 seconds for device removal to finish. */ - unsigned long long qemuDomainRemoveDeviceWaitTime = 1000ull * 5; -@@ -166,12 +166,13 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, - virStorageSourcePtr newsrc, - bool force) - { -- int ret = -1; -+ int ret = -1, rc; - char *driveAlias = NULL; - qemuDomainObjPrivatePtr priv = vm->privateData; -- int retries = CHANGE_MEDIA_RETRIES; - const char *format = NULL; - char *sourcestr = NULL; -+ bool ejectRetry = false; -+ unsigned long long now; - - if (!disk->info.alias) { - virReportError(VIR_ERR_INTERNAL_ERROR, -@@ -193,36 +194,31 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, - if (!(driveAlias = qemuDeviceDriveHostAlias(disk, priv->qemuCaps))) - goto error; - -- qemuDomainObjEnterMonitor(driver, vm); -- ret = qemuMonitorEjectMedia(priv->mon, driveAlias, force); -- if (qemuDomainObjExitMonitor(driver, vm) < 0) { -- ret = -1; -- goto cleanup; -- } -+ do { -+ qemuDomainObjEnterMonitor(driver, vm); -+ rc = qemuMonitorEjectMedia(priv->mon, driveAlias, force); -+ if (qemuDomainObjExitMonitor(driver, vm) < 0) -+ goto cleanup; - -- if (ret < 0) -- goto error; -+ if (rc == -2) { -+ /* we've already tried, error out */ -+ if (ejectRetry) -+ goto error; -+ VIR_DEBUG("tray is locked, wait for the guest to unlock " -+ "the tray and try to eject it again"); -+ ejectRetry = true; -+ } else if (rc < 0) { -+ goto error; -+ } - -- virObjectRef(vm); -- /* we don't want to report errors from media tray_open polling */ -- while (retries) { -- if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) -- break; -+ if (virTimeMillisNow(&now) < 0) -+ goto error; - -- retries--; -- virObjectUnlock(vm); -- VIR_DEBUG("Waiting 500ms for tray to open. Retries left %d", retries); -- usleep(500 * 1000); /* sleep 500ms */ -- virObjectLock(vm); -- } -- virObjectUnref(vm); -- -- if (retries <= 0) { -- virReportError(VIR_ERR_OPERATION_FAILED, "%s", -- _("Unable to eject media")); -- ret = -1; -- goto error; -- } -+ while (disk->tray_status != VIR_DOMAIN_DISK_TRAY_OPEN) { -+ if (virDomainObjWaitUntil(vm, now + CHANGE_MEDIA_TIMEOUT) != 0) -+ goto error; -+ } -+ } while (ejectRetry && rc != 0); - - if (!virStorageSourceIsEmpty(newsrc)) { - if (qemuGetDriveSourceString(newsrc, conn, &sourcestr) < 0) -@@ -237,19 +233,17 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, - } - } - qemuDomainObjEnterMonitor(driver, vm); -- ret = qemuMonitorChangeMedia(priv->mon, -- driveAlias, -- sourcestr, -- format); -- if (qemuDomainObjExitMonitor(driver, vm) < 0) { -- ret = -1; -+ rc = qemuMonitorChangeMedia(priv->mon, -+ driveAlias, -+ sourcestr, -+ format); -+ if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; -- } - } - -- virDomainAuditDisk(vm, disk->src, newsrc, "update", ret >= 0); -+ virDomainAuditDisk(vm, disk->src, newsrc, "update", rc >= 0); - -- if (ret < 0) -+ if (rc < 0) - goto error; - - /* remove the old source from shared device list */ -@@ -259,6 +253,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, - virStorageSourceFree(disk->src); - disk->src = newsrc; - newsrc = NULL; -+ ret = 0; - - cleanup: - VIR_FREE(driveAlias); -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 9f1ae5a..c5f467b 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -1155,6 +1155,8 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - VIR_WARN("Unable to save status on vm %s after tray moved event", - vm->def->name); - } -+ -+ virDomainObjBroadcast(vm); - } - - virObjectUnlock(vm); --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu_monitor-Wire-up-MIGRATION-event.patch b/SOURCES/libvirt-qemu_monitor-Wire-up-MIGRATION-event.patch deleted file mode 100644 index c687212..0000000 --- a/SOURCES/libvirt-qemu_monitor-Wire-up-MIGRATION-event.patch +++ /dev/null @@ -1,164 +0,0 @@ -From a72b20b3cb4837a87cdeb50fd625ccfe7a6c76a7 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Jiri Denemark -Date: Thu, 28 May 2015 13:35:52 +0200 -Subject: [PATCH] qemu_monitor: Wire up MIGRATION event - -Thanks to Juan's work QEMU finally emits an event whenever migration -state changes. - -Signed-off-by: Jiri Denemark -(cherry picked from commit a60ee613c499c255faf7c36e7cd8582b5a79ca57) - -https://bugzilla.redhat.com/show_bug.cgi?id=1212077 - -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_capabilities.c | 2 ++ - src/qemu/qemu_capabilities.h | 1 + - src/qemu/qemu_monitor.c | 14 ++++++++++++++ - src/qemu/qemu_monitor.h | 8 ++++++++ - src/qemu/qemu_monitor_json.c | 23 +++++++++++++++++++++++ - 5 files changed, 48 insertions(+) - -diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c -index 89d63e5..b4a6961 100644 ---- a/src/qemu/qemu_capabilities.c -+++ b/src/qemu/qemu_capabilities.c -@@ -287,6 +287,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, - "aarch64-off", - - "vhost-user-multiqueue", /* 190 */ -+ "migration-event", - ); - - -@@ -1506,6 +1507,7 @@ struct virQEMUCapsStringFlags virQEMUCapsEvents[] = { - { "BALLOON_CHANGE", QEMU_CAPS_BALLOON_EVENT }, - { "SPICE_MIGRATE_COMPLETED", QEMU_CAPS_SEAMLESS_MIGRATION }, - { "DEVICE_DELETED", QEMU_CAPS_DEVICE_DEL_EVENT }, -+ { "MIGRATION", QEMU_CAPS_MIGRATION_EVENT }, - }; - - struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { -diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h -index 30aa504..f77bd06 100644 ---- a/src/qemu/qemu_capabilities.h -+++ b/src/qemu/qemu_capabilities.h -@@ -230,6 +230,7 @@ typedef enum { - QEMU_CAPS_DEVICE_PCI_SERIAL = 188, /* -device pci-serial */ - QEMU_CAPS_CPU_AARCH64_OFF = 189, /* -cpu ...,aarch64=off */ - QEMU_CAPS_VHOSTUSER_MULTIQUEUE = 190, /* vhost-user with -netdev queues= */ -+ QEMU_CAPS_MIGRATION_EVENT = 191, /* MIGRATION event */ - - QEMU_CAPS_LAST, /* this must always be the last item */ - } virQEMUCapsFlags; -diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c -index 9c70211..dd742cf 100644 ---- a/src/qemu/qemu_monitor.c -+++ b/src/qemu/qemu_monitor.c -@@ -1498,6 +1498,20 @@ qemuMonitorEmitSpiceMigrated(qemuMonitorPtr mon) - - - int -+qemuMonitorEmitMigrationStatus(qemuMonitorPtr mon, -+ int status) -+{ -+ int ret = -1; -+ VIR_DEBUG("mon=%p, status=%s", -+ mon, NULLSTR(qemuMonitorMigrationStatusTypeToString(status))); -+ -+ QEMU_MONITOR_CALLBACK(mon, ret, domainMigrationStatus, mon->vm, status); -+ -+ return ret; -+} -+ -+ -+int - qemuMonitorSetCapabilities(qemuMonitorPtr mon) - { - QEMU_CHECK_MONITOR(mon); -diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h -index 87167e3..d2b2f94 100644 ---- a/src/qemu/qemu_monitor.h -+++ b/src/qemu/qemu_monitor.h -@@ -186,6 +186,11 @@ typedef int (*qemuMonitorDomainSpiceMigratedCallback)(qemuMonitorPtr mon, - virDomainObjPtr vm, - void *opaque); - -+typedef int (*qemuMonitorDomainMigrationStatusCallback)(qemuMonitorPtr mon, -+ virDomainObjPtr vm, -+ int status, -+ void *opaque); -+ - typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks; - typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr; - struct _qemuMonitorCallbacks { -@@ -214,6 +219,7 @@ struct _qemuMonitorCallbacks { - qemuMonitorDomainNicRxFilterChangedCallback domainNicRxFilterChanged; - qemuMonitorDomainSerialChangeCallback domainSerialChange; - qemuMonitorDomainSpiceMigratedCallback domainSpiceMigrated; -+ qemuMonitorDomainMigrationStatusCallback domainMigrationStatus; - }; - - char *qemuMonitorEscapeArg(const char *in); -@@ -313,6 +319,8 @@ int qemuMonitorEmitSerialChange(qemuMonitorPtr mon, - const char *devAlias, - bool connected); - int qemuMonitorEmitSpiceMigrated(qemuMonitorPtr mon); -+int qemuMonitorEmitMigrationStatus(qemuMonitorPtr mon, -+ int status); - - int qemuMonitorStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn); -diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c -index 065c7fe..4323c2a 100644 ---- a/src/qemu/qemu_monitor_json.c -+++ b/src/qemu/qemu_monitor_json.c -@@ -84,6 +84,7 @@ static void qemuMonitorJSONHandleDeviceDeleted(qemuMonitorPtr mon, virJSONValueP - static void qemuMonitorJSONHandleNicRxFilterChanged(qemuMonitorPtr mon, virJSONValuePtr data); - static void qemuMonitorJSONHandleSerialChange(qemuMonitorPtr mon, virJSONValuePtr data); - static void qemuMonitorJSONHandleSpiceMigrated(qemuMonitorPtr mon, virJSONValuePtr data); -+static void qemuMonitorJSONHandleMigrationStatus(qemuMonitorPtr mon, virJSONValuePtr data); - - typedef struct { - const char *type; -@@ -99,6 +100,7 @@ static qemuEventHandler eventHandlers[] = { - { "DEVICE_DELETED", qemuMonitorJSONHandleDeviceDeleted, }, - { "DEVICE_TRAY_MOVED", qemuMonitorJSONHandleTrayChange, }, - { "GUEST_PANICKED", qemuMonitorJSONHandleGuestPanic, }, -+ { "MIGRATION", qemuMonitorJSONHandleMigrationStatus, }, - { "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, }, - { "POWERDOWN", qemuMonitorJSONHandlePowerdown, }, - { "RESET", qemuMonitorJSONHandleReset, }, -@@ -990,6 +992,27 @@ qemuMonitorJSONHandleSpiceMigrated(qemuMonitorPtr mon, - } - - -+static void -+qemuMonitorJSONHandleMigrationStatus(qemuMonitorPtr mon, -+ virJSONValuePtr data) -+{ -+ const char *str; -+ int status; -+ -+ if (!(str = virJSONValueObjectGetString(data, "status"))) { -+ VIR_WARN("missing status in migration event"); -+ return; -+ } -+ -+ if ((status = qemuMonitorMigrationStatusTypeFromString(str)) == -1) { -+ VIR_WARN("unknown status '%s' in migration event", str); -+ return; -+ } -+ -+ qemuMonitorEmitMigrationStatus(mon, status); -+} -+ -+ - int - qemuMonitorJSONHumanCommandWithFd(qemuMonitorPtr mon, - const char *cmd_str, --- -2.4.5 - diff --git a/SOURCES/libvirt-qemu_monitor_json-add-support-to-search-QOM-device-path-by-device-alias.patch b/SOURCES/libvirt-qemu_monitor_json-add-support-to-search-QOM-device-path-by-device-alias.patch new file mode 100644 index 0000000..00c1f17 --- /dev/null +++ b/SOURCES/libvirt-qemu_monitor_json-add-support-to-search-QOM-device-path-by-device-alias.patch @@ -0,0 +1,211 @@ +From 85a402fb00157daedc875f1047a2e4fe54db601a Mon Sep 17 00:00:00 2001 +Message-Id: <85a402fb00157daedc875f1047a2e4fe54db601a@dist-git> +From: Pavel Hrdina +Date: Mon, 25 Jul 2016 16:26:51 +0200 +Subject: [PATCH] qemu_monitor_json: add support to search QOM device path by + device alias + +Commit ce745914 introduced detection of actual video ram sizes to fix migration +if QEMU decide to modify the values provided by libvirt. This works perfectly +for domains with number of video devices up to two. + +If there are more than two video devices in the guest all the secondary devices +in the XML will have the same memory values. This is because our current code +search for QOM device path only by the device type name and all the secondary +video devices has the same name "qxl". + +This patch introduces a new search function that will try to search a QOM device +path using also device's alias if the alias is available. After that it will +fallback to the old recursive code if the alias search found no results. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1358728 + +Signed-off-by: Pavel Hrdina +(cherry picked from commit 4a585a884fc8cfd11f6206cd6f1a7db824395e86) +Signed-off-by: Pavel Hrdina +--- + src/qemu/qemu_monitor.c | 11 ++++--- + src/qemu/qemu_monitor_json.c | 77 ++++++++++++++++++++++++++++++++++++++------ + src/qemu/qemu_monitor_json.h | 3 +- + 3 files changed, 77 insertions(+), 14 deletions(-) + +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index 1d3d98a..e3a5e0b 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1084,10 +1084,11 @@ qemuMonitorInitBalloonObjectPath(qemuMonitorPtr mon) + } + mon->ballooninit = true; + +- flp_ret = qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-pci", &path); ++ flp_ret = qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-pci", NULL, &path); + if (flp_ret == -2) { + /* pci object was not found retry search for ccw object */ +- if (qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-ccw", &path) < 0) ++ if (qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-ccw", ++ NULL, &path) < 0) + return; + } else if (flp_ret < 0) { + return; +@@ -1138,7 +1139,8 @@ qemuMonitorUpdateVideoMemorySize(qemuMonitorPtr mon, + QEMU_CHECK_MONITOR(mon); + + if (mon->json) { +- ret = qemuMonitorJSONFindLinkPath(mon, videoName, &path); ++ ret = qemuMonitorJSONFindLinkPath(mon, videoName, ++ video->info.alias, &path); + if (ret < 0) { + if (ret == -2) + virReportError(VIR_ERR_INTERNAL_ERROR, +@@ -1173,7 +1175,8 @@ qemuMonitorUpdateVideoVram64Size(qemuMonitorPtr mon, + QEMU_CHECK_MONITOR(mon); + + if (mon->json) { +- ret = qemuMonitorJSONFindLinkPath(mon, videoName, &path); ++ ret = qemuMonitorJSONFindLinkPath(mon, videoName, ++ video->info.alias, &path); + if (ret < 0) { + if (ret == -2) + virReportError(VIR_ERR_INTERNAL_ERROR, +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index 2890872..74bbf75 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -6946,7 +6946,58 @@ qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon, + + + /** +- * Recursively search for a QOM object link. ++ * Search for a QOM object link by alias and name. ++ * ++ * For @alias and @name, this function tries to find QOM object named @name ++ * with id @alias in /machine/peripheral. ++ * ++ * Returns: ++ * 0 - Found ++ * -1 - Error - bail out ++ * -2 - Not found ++ */ ++static int ++qemuMonitorJSONFindObjectPathByAlias(qemuMonitorPtr mon, ++ const char *name, ++ const char *alias, ++ char **path) ++{ ++ qemuMonitorJSONListPathPtr *paths = NULL; ++ char *child = NULL; ++ int npaths; ++ int ret = -1; ++ size_t i; ++ ++ npaths = qemuMonitorJSONGetObjectListPaths(mon, "/machine/peripheral", &paths); ++ if (npaths < 0) ++ return -1; ++ ++ if (virAsprintf(&child, "child<%s>", name) < 0) ++ goto cleanup; ++ ++ for (i = 0; i < npaths; i++) { ++ if (STREQ(paths[i]->name, alias) && STREQ(paths[i]->type, child)) { ++ if (virAsprintf(path, "/machine/peripheral/%s", alias) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ goto cleanup; ++ } ++ } ++ ++ ret = -2; ++ ++ cleanup: ++ for (i = 0; i < npaths; i++) ++ qemuMonitorJSONListPathFree(paths[i]); ++ VIR_FREE(paths); ++ VIR_FREE(child); ++ return ret; ++} ++ ++ ++/** ++ * Recursively search for a QOM object link only by name. + * + * For @name, this function finds the first QOM object + * named @name, recursively going through all the "child<>" +@@ -6958,10 +7009,10 @@ qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon, + * -2 - Not found + */ + static int +-qemuMonitorJSONFindObjectPath(qemuMonitorPtr mon, +- const char *curpath, +- const char *name, +- char **path) ++qemuMonitorJSONFindObjectPathByName(qemuMonitorPtr mon, ++ const char *curpath, ++ const char *name, ++ char **path) + { + ssize_t i, npaths = 0; + int ret = -2; +@@ -6995,7 +7046,7 @@ qemuMonitorJSONFindObjectPath(qemuMonitorPtr mon, + goto cleanup; + } + +- ret = qemuMonitorJSONFindObjectPath(mon, nextpath, name, path); ++ ret = qemuMonitorJSONFindObjectPathByName(mon, nextpath, name, path); + VIR_FREE(nextpath); + } + } +@@ -7012,8 +7063,9 @@ qemuMonitorJSONFindObjectPath(qemuMonitorPtr mon, + /** + * Recursively search for a QOM object link. + * +- * For @name, this function finds the first QOM object +- * pointed to by a link in the form of 'link<@name>' ++ * For @name and @alias, this function finds the first QOM object. ++ * The search is done at first by @alias and @name and if nothing was found ++ * it continues recursively only with @name. + * + * Returns: + * 0 - Found +@@ -7023,15 +7075,22 @@ qemuMonitorJSONFindObjectPath(qemuMonitorPtr mon, + int + qemuMonitorJSONFindLinkPath(qemuMonitorPtr mon, + const char *name, ++ const char *alias, + char **path) + { + char *linkname = NULL; + int ret = -1; + ++ if (alias) { ++ ret = qemuMonitorJSONFindObjectPathByAlias(mon, name, alias, path); ++ if (ret == -1 || ret == 0) ++ return ret; ++ } ++ + if (virAsprintf(&linkname, "link<%s>", name) < 0) + return -1; + +- ret = qemuMonitorJSONFindObjectPath(mon, "/", linkname, path); ++ ret = qemuMonitorJSONFindObjectPathByName(mon, "/", linkname, path); + VIR_FREE(linkname); + return ret; + } +diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h +index c573ca2..114b567 100644 +--- a/src/qemu/qemu_monitor_json.h ++++ b/src/qemu/qemu_monitor_json.h +@@ -487,8 +487,9 @@ int qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon, + + int qemuMonitorJSONFindLinkPath(qemuMonitorPtr mon, + const char *name, ++ const char *alias, + char **path) +- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4); + + int qemuMonitorJSONMigrateIncoming(qemuMonitorPtr mon, + const char *uri) +-- +2.9.2 + diff --git a/SOURCES/libvirt-rpc-Add-virNetDaemonHasClients.patch b/SOURCES/libvirt-rpc-Add-virNetDaemonHasClients.patch deleted file mode 100644 index 2f1e913..0000000 --- a/SOURCES/libvirt-rpc-Add-virNetDaemonHasClients.patch +++ /dev/null @@ -1,69 +0,0 @@ -From ce2001d94e099b4d8e6279f70af6d355283279fb Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Wed, 15 Jul 2015 17:11:55 +0200 -Subject: [PATCH] rpc: Add virNetDaemonHasClients - -https://bugzilla.redhat.com/show_bug.cgi?id=1240283 - -So callers don't have to iterate over each server. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 699faeacb10459fed748d425eb044ef69697e804) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/libvirt_remote.syms | 1 + - src/rpc/virnetdaemon.c | 13 +++++++++++++ - src/rpc/virnetdaemon.h | 2 ++ - 3 files changed, 16 insertions(+) - -diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms -index e6ca041..6bfdcfa 100644 ---- a/src/libvirt_remote.syms -+++ b/src/libvirt_remote.syms -@@ -65,6 +65,7 @@ virNetDaemonAddSignalHandler; - virNetDaemonAutoShutdown; - virNetDaemonClose; - virNetDaemonGetServer; -+virNetDaemonHasClients; - virNetDaemonIsPrivileged; - virNetDaemonNew; - virNetDaemonNewPostExecRestart; -diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c -index 67dff14..6b13282 100644 ---- a/src/rpc/virnetdaemon.c -+++ b/src/rpc/virnetdaemon.c -@@ -747,3 +747,16 @@ virNetDaemonClose(virNetDaemonPtr dmn) - - virObjectUnlock(dmn); - } -+ -+bool -+virNetDaemonHasClients(virNetDaemonPtr dmn) -+{ -+ size_t i = 0; -+ -+ for (i = 0; i < dmn->nservers; i++) { -+ if (virNetServerHasClients(dmn->servers[i])) -+ return true; -+ } -+ -+ return false; -+} -diff --git a/src/rpc/virnetdaemon.h b/src/rpc/virnetdaemon.h -index 9e176d6..bb32053 100644 ---- a/src/rpc/virnetdaemon.h -+++ b/src/rpc/virnetdaemon.h -@@ -76,6 +76,8 @@ void virNetDaemonQuit(virNetDaemonPtr dmn); - - void virNetDaemonClose(virNetDaemonPtr dmn); - -+bool virNetDaemonHasClients(virNetDaemonPtr dmn); -+ - virNetServerPtr virNetDaemonGetServer(virNetDaemonPtr dmn, - int subServerID); - --- -2.5.0 - diff --git a/SOURCES/libvirt-rpc-Remove-keepalive_required-option.patch b/SOURCES/libvirt-rpc-Remove-keepalive_required-option.patch deleted file mode 100644 index 845384b..0000000 --- a/SOURCES/libvirt-rpc-Remove-keepalive_required-option.patch +++ /dev/null @@ -1,695 +0,0 @@ -From 62c256e02e63007860ca1fb4ef0d6d1121091e55 Mon Sep 17 00:00:00 2001 -Message-Id: <62c256e02e63007860ca1fb4ef0d6d1121091e55@dist-git> -From: Martin Kletzander -Date: Mon, 10 Aug 2015 13:55:19 +0200 -Subject: [PATCH] rpc: Remove keepalive_required option - -https://bugzilla.redhat.com/show_bug.cgi?id=1247087 - -Since its introduction in 2011 (particularly in commit f4324e329275), -the option doesn't work. It just effectively disables all incoming -connections. That's because the client private data that contain the -'keepalive_supported' boolean, are initialized to zeroes so the bool is -false and the only other place where the bool is used is when checking -whether the client supports keepalive. Thus, according to the server, -no client supports keepalive. - -Removing this instead of fixing it is better because a) apparently -nobody ever tried it since 2011 (4 years without one month) and b) we -cannot know whether the client supports keepalive until we get a ping or -pong keepalive packet. And that won't happen until after we dispatched -the ConnectOpen call. - -Another two reasons would be c) the keepalive_required was tracked on -the server level, but keepalive_supported was in private data of the -client as well as the check that was made in the remote layer, thus -making all other instances of virNetServer miss this feature unless they -all implemented it for themselves and d) we can always add it back in -case there is a request and a use-case for it. - -Signed-off-by: Martin Kletzander -(cherry picked from commit a8743c39389b76897811f60dcd8485cd51d76f02) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - daemon/libvirtd-config.c | 4 - - daemon/libvirtd-config.h | 2 - - daemon/libvirtd.c | 2 - - daemon/libvirtd.conf | 9 +- - daemon/libvirtd.h | 1 - - daemon/remote.c | 8 +- - daemon/test_libvirtd.aug.in | 2 +- - src/libvirt_remote.syms | 1 - - src/locking/lock_daemon.c | 2 +- - src/lxc/lxc_controller.c | 2 +- - src/rpc/virnetserver.c | 25 +---- - src/rpc/virnetserver.h | 3 - - tests/libvirtdconftest.c | 4 +- - .../input-data-no-keepalive-required.json | 124 +++++++++++++++++++++ - .../virnetdaemondata/output-data-admin-nomdns.json | 2 - - .../virnetdaemondata/output-data-anon-clients.json | 1 - - .../output-data-initial-nomdns.json | 1 - - tests/virnetdaemondata/output-data-initial.json | 1 - - .../output-data-no-keepalive-required.json | 124 +++++++++++++++++++++ - tests/virnetdaemontest.c | 2 +- - 20 files changed, 262 insertions(+), 58 deletions(-) - create mode 100644 tests/virnetdaemondata/input-data-no-keepalive-required.json - create mode 100644 tests/virnetdaemondata/output-data-no-keepalive-required.json - -diff --git a/daemon/libvirtd-config.c b/daemon/libvirtd-config.c -index 10dcc42..c31c8b2 100644 ---- a/daemon/libvirtd-config.c -+++ b/daemon/libvirtd-config.c -@@ -292,7 +292,6 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED) - - data->keepalive_interval = 5; - data->keepalive_count = 5; -- data->keepalive_required = 0; - - data->admin_min_workers = 5; - data->admin_max_workers = 20; -@@ -302,7 +301,6 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED) - - data->admin_keepalive_interval = 5; - data->admin_keepalive_count = 5; -- data->admin_keepalive_required = 0; - - localhost = virGetHostname(); - if (localhost == NULL) { -@@ -471,11 +469,9 @@ daemonConfigLoadOptions(struct daemonConfig *data, - - GET_CONF_INT(conf, filename, keepalive_interval); - GET_CONF_UINT(conf, filename, keepalive_count); -- GET_CONF_UINT(conf, filename, keepalive_required); - - GET_CONF_INT(conf, filename, admin_keepalive_interval); - GET_CONF_UINT(conf, filename, admin_keepalive_count); -- GET_CONF_UINT(conf, filename, admin_keepalive_required); - - return 0; - -diff --git a/daemon/libvirtd-config.h b/daemon/libvirtd-config.h -index 9cdae1a..3e1971d 100644 ---- a/daemon/libvirtd-config.h -+++ b/daemon/libvirtd-config.h -@@ -81,7 +81,6 @@ struct daemonConfig { - - int keepalive_interval; - unsigned int keepalive_count; -- int keepalive_required; - - int admin_min_workers; - int admin_max_workers; -@@ -91,7 +90,6 @@ struct daemonConfig { - - int admin_keepalive_interval; - unsigned int admin_keepalive_count; -- int admin_keepalive_required; - }; - - -diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c -index 654e7f4..2c27970 100644 ---- a/daemon/libvirtd.c -+++ b/daemon/libvirtd.c -@@ -1389,7 +1389,6 @@ int main(int argc, char **argv) { - config->max_anonymous_clients, - config->keepalive_interval, - config->keepalive_count, -- !!config->keepalive_required, - config->mdns_adv ? config->mdns_name : NULL, - remoteClientInitHook, - NULL, -@@ -1464,7 +1463,6 @@ int main(int argc, char **argv) { - 0, - config->admin_keepalive_interval, - config->admin_keepalive_count, -- !!config->admin_keepalive_required, - NULL, - remoteAdmClientInitHook, - NULL, -diff --git a/daemon/libvirtd.conf b/daemon/libvirtd.conf -index ac06cdd..514e6e4 100644 ---- a/daemon/libvirtd.conf -+++ b/daemon/libvirtd.conf -@@ -440,14 +440,15 @@ - # - #keepalive_interval = 5 - #keepalive_count = 5 -+ - # --# If set to 1, libvirtd will refuse to talk to clients that do not --# support keepalive protocol. Defaults to 0. -+# These configuration options are no longer used. There is no way to -+# restrict such clients from connecting since they first need to -+# connect in order to ask for keepalive. - # - #keepalive_required = 1 -+#admin_keepalive_required = 1 - - # Keepalive settings for the admin interface - #admin_keepalive_interval = 5 - #admin_keepalive_count = 5 --# --#admin_keepalive_required = 1 -diff --git a/daemon/libvirtd.h b/daemon/libvirtd.h -index 8c1a904..efd4823 100644 ---- a/daemon/libvirtd.h -+++ b/daemon/libvirtd.h -@@ -72,7 +72,6 @@ struct daemonClientPrivate { - virConnectPtr conn; - - daemonClientStreamPtr streams; -- bool keepalive_supported; - }; - - /* Separate private data for admin connection */ -diff --git a/daemon/remote.c b/daemon/remote.c -index e9e2dca..3a3eb09 100644 ---- a/daemon/remote.c -+++ b/daemon/remote.c -@@ -1290,7 +1290,7 @@ void *remoteClientInitHook(virNetServerClientPtr client, - /*----- Functions. -----*/ - - static int --remoteDispatchConnectOpen(virNetServerPtr server, -+remoteDispatchConnectOpen(virNetServerPtr server ATTRIBUTE_UNUSED, - virNetServerClientPtr client, - virNetMessagePtr msg ATTRIBUTE_UNUSED, - virNetMessageErrorPtr rerr, -@@ -1309,12 +1309,6 @@ remoteDispatchConnectOpen(virNetServerPtr server, - goto cleanup; - } - -- if (virNetServerKeepAliveRequired(server) && !priv->keepalive_supported) { -- virReportError(VIR_ERR_OPERATION_FAILED, "%s", -- _("keepalive support is required to connect")); -- goto cleanup; -- } -- - name = args->name ? *args->name : NULL; - - /* If this connection arrived on a readonly socket, force -diff --git a/daemon/test_libvirtd.aug.in b/daemon/test_libvirtd.aug.in -index 4921cbf..b0cb7eb 100644 ---- a/daemon/test_libvirtd.aug.in -+++ b/daemon/test_libvirtd.aug.in -@@ -58,6 +58,6 @@ module Test_libvirtd = - { "keepalive_interval" = "5" } - { "keepalive_count" = "5" } - { "keepalive_required" = "1" } -+ { "admin_keepalive_required" = "1" } - { "admin_keepalive_interval" = "5" } - { "admin_keepalive_count" = "5" } -- { "admin_keepalive_required" = "1" } -diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms -index 6bfdcfa..90a453c 100644 ---- a/src/libvirt_remote.syms -+++ b/src/libvirt_remote.syms -@@ -101,7 +101,6 @@ virNetServerAddProgram; - virNetServerAddService; - virNetServerClose; - virNetServerHasClients; --virNetServerKeepAliveRequired; - virNetServerNew; - virNetServerNewPostExecRestart; - virNetServerPreExecRestart; -diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c -index ecbe03a..c035024 100644 ---- a/src/locking/lock_daemon.c -+++ b/src/locking/lock_daemon.c -@@ -151,7 +151,7 @@ virLockDaemonNew(virLockDaemonConfigPtr config, bool privileged) - - if (!(lockd->srv = virNetServerNew(1, 1, 0, config->max_clients, - config->max_clients, -1, 0, -- false, NULL, -+ NULL, - virLockDaemonClientNew, - virLockDaemonClientPreExecRestart, - virLockDaemonClientFree, -diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c -index 27e2e3a..06ffee4 100644 ---- a/src/lxc/lxc_controller.c -+++ b/src/lxc/lxc_controller.c -@@ -910,7 +910,7 @@ static int virLXCControllerSetupServer(virLXCControllerPtr ctrl) - return -1; - - if (!(srv = virNetServerNew(0, 0, 0, 1, -- 0, -1, 0, false, -+ 0, -1, 0, - NULL, - virLXCControllerClientPrivateNew, - NULL, -diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c -index 60a9714..80b5588 100644 ---- a/src/rpc/virnetserver.c -+++ b/src/rpc/virnetserver.c -@@ -69,7 +69,6 @@ struct _virNetServer { - - int keepaliveInterval; - unsigned int keepaliveCount; -- bool keepaliveRequired; - - #ifdef WITH_GNUTLS - virNetTLSContextPtr tls; -@@ -312,7 +311,6 @@ virNetServerPtr virNetServerNew(size_t min_workers, - size_t max_anonymous_clients, - int keepaliveInterval, - unsigned int keepaliveCount, -- bool keepaliveRequired, - const char *mdnsGroupName, - virNetServerClientPrivNew clientPrivNew, - virNetServerClientPrivPreExecRestart clientPrivPreExecRestart, -@@ -338,7 +336,6 @@ virNetServerPtr virNetServerNew(size_t min_workers, - srv->nclients_unauth_max = max_anonymous_clients; - srv->keepaliveInterval = keepaliveInterval; - srv->keepaliveCount = keepaliveCount; -- srv->keepaliveRequired = keepaliveRequired; - srv->clientPrivNew = clientPrivNew; - srv->clientPrivPreExecRestart = clientPrivPreExecRestart; - srv->clientPrivFree = clientPrivFree; -@@ -380,7 +377,6 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object, - unsigned int max_anonymous_clients; - unsigned int keepaliveInterval; - unsigned int keepaliveCount; -- bool keepaliveRequired; - const char *mdnsGroupName = NULL; - - if (virJSONValueObjectGetNumberUint(object, "min_workers", &min_workers) < 0) { -@@ -423,11 +419,6 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object, - _("Missing keepaliveCount data in JSON document")); - goto error; - } -- if (virJSONValueObjectGetBoolean(object, "keepaliveRequired", &keepaliveRequired) < 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -- _("Missing keepaliveRequired data in JSON document")); -- goto error; -- } - - if (virJSONValueObjectHasKey(object, "mdnsGroupName") && - (!(mdnsGroupName = virJSONValueObjectGetString(object, "mdnsGroupName")))) { -@@ -440,7 +431,7 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object, - priority_workers, max_clients, - max_anonymous_clients, - keepaliveInterval, keepaliveCount, -- keepaliveRequired, mdnsGroupName, -+ mdnsGroupName, - clientPrivNew, clientPrivPreExecRestart, - clientPrivFree, clientPrivOpaque))) - goto error; -@@ -573,11 +564,6 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv) - _("Cannot set keepaliveCount data in JSON document")); - goto error; - } -- if (virJSONValueObjectAppendBoolean(object, "keepaliveRequired", srv->keepaliveRequired) < 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -- _("Cannot set keepaliveRequired data in JSON document")); -- goto error; -- } - - if (srv->mdnsGroupName && - virJSONValueObjectAppendString(object, "mdnsGroupName", srv->mdnsGroupName) < 0) { -@@ -786,15 +772,6 @@ void virNetServerClose(virNetServerPtr srv) - virObjectUnlock(srv); - } - --bool virNetServerKeepAliveRequired(virNetServerPtr srv) --{ -- bool required; -- virObjectLock(srv); -- required = srv->keepaliveRequired; -- virObjectUnlock(srv); -- return required; --} -- - static inline size_t - virNetServerTrackPendingAuthLocked(virNetServerPtr srv) - { -diff --git a/src/rpc/virnetserver.h b/src/rpc/virnetserver.h -index 0e16e8f..89d8db9 100644 ---- a/src/rpc/virnetserver.h -+++ b/src/rpc/virnetserver.h -@@ -41,7 +41,6 @@ virNetServerPtr virNetServerNew(size_t min_workers, - size_t max_anonymous_clients, - int keepaliveInterval, - unsigned int keepaliveCount, -- bool keepaliveRequired, - const char *mdnsGroupName, - virNetServerClientPrivNew clientPrivNew, - virNetServerClientPrivPreExecRestart clientPrivPreExecRestart, -@@ -74,8 +73,6 @@ int virNetServerSetTLSContext(virNetServerPtr srv, - virNetTLSContextPtr tls); - # endif - --bool virNetServerKeepAliveRequired(virNetServerPtr srv); -- - size_t virNetServerTrackPendingAuth(virNetServerPtr srv); - size_t virNetServerTrackCompletedAuth(virNetServerPtr srv); - -diff --git a/tests/libvirtdconftest.c b/tests/libvirtdconftest.c -index d589d51..61d861d 100644 ---- a/tests/libvirtdconftest.c -+++ b/tests/libvirtdconftest.c -@@ -227,7 +227,9 @@ mymain(void) - for (i = 0; params[i] != 0; i++) { - const struct testCorruptData data = { params, filedata, filename, i }; - /* Skip now ignored config param */ -- if (STRPREFIX(filedata + params[i], "log_buffer_size")) -+ if (STRPREFIX(filedata + params[i], "log_buffer_size") || -+ STRPREFIX(filedata + params[i], "keepalive_required") || -+ STRPREFIX(filedata + params[i], "admin_keepalive_required")) - continue; - if (virtTestRun("Test corruption", testCorrupt, &data) < 0) - ret = -1; -diff --git a/tests/virnetdaemondata/input-data-no-keepalive-required.json b/tests/virnetdaemondata/input-data-no-keepalive-required.json -new file mode 100644 -index 0000000..b5e4dc8 ---- /dev/null -+++ b/tests/virnetdaemondata/input-data-no-keepalive-required.json -@@ -0,0 +1,124 @@ -+{ -+ "servers": [ -+ { -+ "min_workers": 10, -+ "max_workers": 50, -+ "priority_workers": 5, -+ "max_clients": 100, -+ "keepaliveInterval": 120, -+ "keepaliveCount": 5, -+ "services": [ -+ { -+ "auth": 0, -+ "readonly": true, -+ "nrequests_client_max": 2, -+ "socks": [ -+ { -+ "fd": 100, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ }, -+ { -+ "auth": 2, -+ "readonly": false, -+ "nrequests_client_max": 5, -+ "socks": [ -+ { -+ "fd": 101, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ } -+ ], -+ "clients": [ -+ { -+ "auth": 1, -+ "readonly": true, -+ "nrequests_max": 15, -+ "sock": { -+ "fd": 102, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ }, -+ { -+ "auth": 2, -+ "readonly": true, -+ "nrequests_max": 66, -+ "sock": { -+ "fd": 103, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ } -+ ] -+ }, -+ { -+ "min_workers": 2, -+ "max_workers": 50, -+ "priority_workers": 5, -+ "max_clients": 100, -+ "keepaliveInterval": 120, -+ "keepaliveCount": 5, -+ "services": [ -+ { -+ "auth": 0, -+ "readonly": true, -+ "nrequests_client_max": 2, -+ "socks": [ -+ { -+ "fd": 100, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ }, -+ { -+ "auth": 2, -+ "readonly": false, -+ "nrequests_client_max": 5, -+ "socks": [ -+ { -+ "fd": 101, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ } -+ ], -+ "clients": [ -+ { -+ "auth": 1, -+ "readonly": true, -+ "nrequests_max": 15, -+ "sock": { -+ "fd": 102, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ }, -+ { -+ "auth": 2, -+ "readonly": true, -+ "nrequests_max": 66, -+ "sock": { -+ "fd": 103, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ } -+ ] -+ } -+ ] -+} -diff --git a/tests/virnetdaemondata/output-data-admin-nomdns.json b/tests/virnetdaemondata/output-data-admin-nomdns.json -index 5df71a0..a814aeb 100644 ---- a/tests/virnetdaemondata/output-data-admin-nomdns.json -+++ b/tests/virnetdaemondata/output-data-admin-nomdns.json -@@ -8,7 +8,6 @@ - "max_anonymous_clients": 100, - "keepaliveInterval": 120, - "keepaliveCount": 5, -- "keepaliveRequired": true, - "services": [ - { - "auth": 0, -@@ -70,7 +69,6 @@ - "max_anonymous_clients": 100, - "keepaliveInterval": 120, - "keepaliveCount": 5, -- "keepaliveRequired": true, - "services": [ - { - "auth": 0, -diff --git a/tests/virnetdaemondata/output-data-anon-clients.json b/tests/virnetdaemondata/output-data-anon-clients.json -index 4e43326..05fc0ae 100644 ---- a/tests/virnetdaemondata/output-data-anon-clients.json -+++ b/tests/virnetdaemondata/output-data-anon-clients.json -@@ -8,7 +8,6 @@ - "max_anonymous_clients": 10, - "keepaliveInterval": 120, - "keepaliveCount": 5, -- "keepaliveRequired": true, - "services": [ - { - "auth": 0, -diff --git a/tests/virnetdaemondata/output-data-initial-nomdns.json b/tests/virnetdaemondata/output-data-initial-nomdns.json -index bef54bf..400e47b 100644 ---- a/tests/virnetdaemondata/output-data-initial-nomdns.json -+++ b/tests/virnetdaemondata/output-data-initial-nomdns.json -@@ -8,7 +8,6 @@ - "max_anonymous_clients": 100, - "keepaliveInterval": 120, - "keepaliveCount": 5, -- "keepaliveRequired": true, - "services": [ - { - "auth": 0, -diff --git a/tests/virnetdaemondata/output-data-initial.json b/tests/virnetdaemondata/output-data-initial.json -index 9afa791..e875cff 100644 ---- a/tests/virnetdaemondata/output-data-initial.json -+++ b/tests/virnetdaemondata/output-data-initial.json -@@ -8,7 +8,6 @@ - "max_anonymous_clients": 100, - "keepaliveInterval": 120, - "keepaliveCount": 5, -- "keepaliveRequired": true, - "mdnsGroupName": "libvirtTest", - "services": [ - { -diff --git a/tests/virnetdaemondata/output-data-no-keepalive-required.json b/tests/virnetdaemondata/output-data-no-keepalive-required.json -new file mode 100644 -index 0000000..b5e4dc8 ---- /dev/null -+++ b/tests/virnetdaemondata/output-data-no-keepalive-required.json -@@ -0,0 +1,124 @@ -+{ -+ "servers": [ -+ { -+ "min_workers": 10, -+ "max_workers": 50, -+ "priority_workers": 5, -+ "max_clients": 100, -+ "keepaliveInterval": 120, -+ "keepaliveCount": 5, -+ "services": [ -+ { -+ "auth": 0, -+ "readonly": true, -+ "nrequests_client_max": 2, -+ "socks": [ -+ { -+ "fd": 100, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ }, -+ { -+ "auth": 2, -+ "readonly": false, -+ "nrequests_client_max": 5, -+ "socks": [ -+ { -+ "fd": 101, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ } -+ ], -+ "clients": [ -+ { -+ "auth": 1, -+ "readonly": true, -+ "nrequests_max": 15, -+ "sock": { -+ "fd": 102, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ }, -+ { -+ "auth": 2, -+ "readonly": true, -+ "nrequests_max": 66, -+ "sock": { -+ "fd": 103, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ } -+ ] -+ }, -+ { -+ "min_workers": 2, -+ "max_workers": 50, -+ "priority_workers": 5, -+ "max_clients": 100, -+ "keepaliveInterval": 120, -+ "keepaliveCount": 5, -+ "services": [ -+ { -+ "auth": 0, -+ "readonly": true, -+ "nrequests_client_max": 2, -+ "socks": [ -+ { -+ "fd": 100, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ }, -+ { -+ "auth": 2, -+ "readonly": false, -+ "nrequests_client_max": 5, -+ "socks": [ -+ { -+ "fd": 101, -+ "errfd": -1, -+ "pid": 0, -+ "isClient": false -+ } -+ ] -+ } -+ ], -+ "clients": [ -+ { -+ "auth": 1, -+ "readonly": true, -+ "nrequests_max": 15, -+ "sock": { -+ "fd": 102, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ }, -+ { -+ "auth": 2, -+ "readonly": true, -+ "nrequests_max": 66, -+ "sock": { -+ "fd": 103, -+ "errfd": -1, -+ "pid": -1, -+ "isClient": true -+ } -+ } -+ ] -+ } -+ ] -+} -diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c -index ef45018..fb8a6c0 100644 ---- a/tests/virnetdaemontest.c -+++ b/tests/virnetdaemontest.c -@@ -50,7 +50,7 @@ testCreateServer(const char *host, int family) - } - - if (!(srv = virNetServerNew(10, 50, 5, 100, 10, -- 120, 5, true, -+ 120, 5, - mdns_group, - NULL, - NULL, --- -2.5.0 - diff --git a/SOURCES/libvirt-rpc-Rework-timerActive-logic-in-daemon.patch b/SOURCES/libvirt-rpc-Rework-timerActive-logic-in-daemon.patch deleted file mode 100644 index 21f29d4..0000000 --- a/SOURCES/libvirt-rpc-Rework-timerActive-logic-in-daemon.patch +++ /dev/null @@ -1,63 +0,0 @@ -From c6ea8b7cb4d2b56f29b791a5f2ee492b4e2bc055 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Wed, 15 Jul 2015 17:11:56 +0200 -Subject: [PATCH] rpc: Rework timerActive logic in daemon - -Daemon used false logic for determining whether there were any clients. -When the timer was inactive, it was activated if at least one of the -servers did not have clients. So the bool was being flipped there and -back all the time in case there was one client, for example. - -Initially introduced by fa1420736882. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1240283 - -Signed-off-by: Martin Kletzander -(cherry picked from commit b7ea58c262194037042284a14fb1608c9cf31884) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/rpc/virnetdaemon.c | 24 +++++++++--------------- - 1 file changed, 9 insertions(+), 15 deletions(-) - -diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c -index 6b13282..910f266 100644 ---- a/src/rpc/virnetdaemon.c -+++ b/src/rpc/virnetdaemon.c -@@ -682,23 +682,17 @@ virNetDaemonRun(virNetDaemonPtr dmn) - */ - if (dmn->autoShutdownTimeout) { - if (timerActive) { -- for (i = 0; i < dmn->nservers; i++) { -- if (virNetServerHasClients(dmn->servers[i])) { -- VIR_DEBUG("Deactivating shutdown timer %d", timerid); -- virEventUpdateTimeout(timerid, -1); -- timerActive = false; -- break; -- } -+ if (virNetDaemonHasClients(dmn)) { -+ VIR_DEBUG("Deactivating shutdown timer %d", timerid); -+ virEventUpdateTimeout(timerid, -1); -+ timerActive = false; - } - } else { -- for (i = 0; i < dmn->nservers; i++) { -- if (!virNetServerHasClients(dmn->servers[i])) { -- VIR_DEBUG("Activating shutdown timer %d", timerid); -- virEventUpdateTimeout(timerid, -- dmn->autoShutdownTimeout * 1000); -- timerActive = true; -- break; -- } -+ if (!virNetDaemonHasClients(dmn)) { -+ VIR_DEBUG("Activating shutdown timer %d", timerid); -+ virEventUpdateTimeout(timerid, -+ dmn->autoShutdownTimeout * 1000); -+ timerActive = true; - } - } - } --- -2.5.0 - diff --git a/SOURCES/libvirt-rpc-virnetserver-Add-code-to-CheckLimits-to-handle-suspending-of-services.patch b/SOURCES/libvirt-rpc-virnetserver-Add-code-to-CheckLimits-to-handle-suspending-of-services.patch new file mode 100644 index 0000000..a059e3d --- /dev/null +++ b/SOURCES/libvirt-rpc-virnetserver-Add-code-to-CheckLimits-to-handle-suspending-of-services.patch @@ -0,0 +1,97 @@ +From 0ddfe33c33124b094bf701986c619380363d5f99 Mon Sep 17 00:00:00 2001 +Message-Id: <0ddfe33c33124b094bf701986c619380363d5f99@dist-git> +From: Erik Skultety +Date: Tue, 2 Aug 2016 15:20:52 +0200 +Subject: [PATCH] rpc: virnetserver: Add code to CheckLimits to handle + suspending of services + +So far, virNetServerCheckLimits was only used to possibly re-enable accepting +new clients that might have previously been disabled due to client limits +violation (max_clients, max_anonymous_clients). This patch refactors +virNetServerAddClient, which is currently the only place where the services get +disabled, in order to use the virNetServerCheckLimits helper instead of +checking the limits by itself. + +Signed-off-by: Erik Skultety +(cherry picked from commit 5b9f735f16b1d49b11610d40d36ab26e6b48926d) + +https://bugzilla.redhat.com/show_bug.cgi?id=1357776 +Signed-off-by: Erik Skultety +--- + src/rpc/virnetserver.c | 45 ++++++++++++++++++++++----------------------- + 1 file changed, 22 insertions(+), 23 deletions(-) + +diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c +index 0c502d9..c5caef3 100644 +--- a/src/rpc/virnetserver.c ++++ b/src/rpc/virnetserver.c +@@ -239,24 +239,35 @@ static int virNetServerDispatchNewMessage(virNetServerClientPtr client, + * @srv: server to check limits on + * + * Check if limits like max_clients or max_anonymous_clients +- * are satisfied and if so, re-enable accepting new clients. ++ * are satisfied. If so, re-enable accepting new clients. If these are violated ++ * however, temporarily disable accepting new clients. + * The @srv must be locked when this function is called. + */ + static void + virNetServerCheckLimits(virNetServerPtr srv) + { +- /* Enable services if we can accept a new client. +- * The new client can be accepted if both max_clients and +- * max_anonymous_clients wouldn't get overcommitted by +- * accepting it. */ +- VIR_DEBUG("Considering re-enabling services: " +- "nclients=%zu nclients_max=%zu " ++ VIR_DEBUG("Checking client-related limits to re-enable or temporarily " ++ "suspend services: nclients=%zu nclients_max=%zu " + "nclients_unauth=%zu nclients_unauth_max=%zu", + srv->nclients, srv->nclients_max, + srv->nclients_unauth, srv->nclients_unauth_max); +- if (srv->nclients < srv->nclients_max && +- (!srv->nclients_unauth_max || +- srv->nclients_unauth < srv->nclients_unauth_max)) { ++ ++ /* Check the max_anonymous_clients and max_clients limits so that we can ++ * decide whether the services should be temporarily suspended, thus not ++ * accepting any more clients for a while or re-enabling the previously ++ * suspended services in order to accept new clients again. ++ * A new client can only be accepted if both max_clients and ++ * max_anonymous_clients wouldn't get overcommitted by accepting it. ++ */ ++ if (srv->nclients >= srv->nclients_max || ++ (srv->nclients_unauth_max && ++ srv->nclients_unauth >= srv->nclients_unauth_max)) { ++ /* Temporarily stop accepting new clients */ ++ VIR_INFO("Temporarily suspending services"); ++ virNetServerUpdateServicesLocked(srv, false); ++ } else if (srv->nclients < srv->nclients_max && ++ (!srv->nclients_unauth_max || ++ srv->nclients_unauth < srv->nclients_unauth_max)) { + /* Now it makes sense to accept() a new client. */ + VIR_INFO("Re-enabling services"); + virNetServerUpdateServicesLocked(srv, true); +@@ -286,19 +297,7 @@ int virNetServerAddClient(virNetServerPtr srv, + if (virNetServerClientNeedAuth(client)) + virNetServerTrackPendingAuthLocked(srv); + +- if (srv->nclients_unauth_max && +- srv->nclients_unauth == srv->nclients_unauth_max) { +- /* Temporarily stop accepting new clients */ +- VIR_INFO("Temporarily suspending services " +- "due to max_anonymous_clients"); +- virNetServerUpdateServicesLocked(srv, false); +- } +- +- if (srv->nclients == srv->nclients_max) { +- /* Temporarily stop accepting new clients */ +- VIR_INFO("Temporarily suspending services due to max_clients"); +- virNetServerUpdateServicesLocked(srv, false); +- } ++ virNetServerCheckLimits(srv); + + virNetServerClientSetDispatcher(client, + virNetServerDispatchNewMessage, +-- +2.9.2 + diff --git a/SOURCES/libvirt-rpc-virnetserver-Move-virNetServerCheckLimits-which-is-static-up-in-the-file.patch b/SOURCES/libvirt-rpc-virnetserver-Move-virNetServerCheckLimits-which-is-static-up-in-the-file.patch new file mode 100644 index 0000000..1caf779 --- /dev/null +++ b/SOURCES/libvirt-rpc-virnetserver-Move-virNetServerCheckLimits-which-is-static-up-in-the-file.patch @@ -0,0 +1,102 @@ +From a2d0e5b5b488ccf76fdfb696250259a767c3a904 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Tue, 2 Aug 2016 15:20:51 +0200 +Subject: [PATCH] rpc: virnetserver: Move virNetServerCheckLimits which is + static up in the file + +Since virNetServerAddClient checks for the limits in order to temporarily +suspend the services, thus not accepting any more clients, there is no reason +why virNetServerCheckLimits, which is only responsible for re-enabling +previously disabled services according to the limits, could not do both. To be +able to do that however, it needs to be moved up in the file since it's static +(and because it's just a helper and there's only one caller it should remain + static). + +Signed-off-by: Erik Skultety +(cherry picked from commit 17bc333411d290c0cc985664a388ff561c1a72f1) + +https://bugzilla.redhat.com/show_bug.cgi?id=1357776 +Signed-off-by: Erik Skultety +--- + src/rpc/virnetserver.c | 57 +++++++++++++++++++++++++------------------------- + 1 file changed, 28 insertions(+), 29 deletions(-) + +diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c +index 13b5bd3..0c502d9 100644 +--- a/src/rpc/virnetserver.c ++++ b/src/rpc/virnetserver.c +@@ -234,6 +234,34 @@ static int virNetServerDispatchNewMessage(virNetServerClientPtr client, + return ret; + } + ++/** ++ * virNetServerCheckLimits: ++ * @srv: server to check limits on ++ * ++ * Check if limits like max_clients or max_anonymous_clients ++ * are satisfied and if so, re-enable accepting new clients. ++ * The @srv must be locked when this function is called. ++ */ ++static void ++virNetServerCheckLimits(virNetServerPtr srv) ++{ ++ /* Enable services if we can accept a new client. ++ * The new client can be accepted if both max_clients and ++ * max_anonymous_clients wouldn't get overcommitted by ++ * accepting it. */ ++ VIR_DEBUG("Considering re-enabling services: " ++ "nclients=%zu nclients_max=%zu " ++ "nclients_unauth=%zu nclients_unauth_max=%zu", ++ srv->nclients, srv->nclients_max, ++ srv->nclients_unauth, srv->nclients_unauth_max); ++ if (srv->nclients < srv->nclients_max && ++ (!srv->nclients_unauth_max || ++ srv->nclients_unauth < srv->nclients_unauth_max)) { ++ /* Now it makes sense to accept() a new client. */ ++ VIR_INFO("Re-enabling services"); ++ virNetServerUpdateServicesLocked(srv, true); ++ } ++} + + int virNetServerAddClient(virNetServerPtr srv, + virNetServerClientPtr client) +@@ -737,35 +765,6 @@ void virNetServerUpdateServices(virNetServerPtr srv, + virObjectUnlock(srv); + } + +-/** +- * virNetServerCheckLimits: +- * @srv: server to check limits on +- * +- * Check if limits like max_clients or max_anonymous_clients +- * are satisfied and if so, re-enable accepting new clients. +- * The @srv must be locked when this function is called. +- */ +-static void +-virNetServerCheckLimits(virNetServerPtr srv) +-{ +- /* Enable services if we can accept a new client. +- * The new client can be accepted if both max_clients and +- * max_anonymous_clients wouldn't get overcommitted by +- * accepting it. */ +- VIR_DEBUG("Considering re-enabling services: " +- "nclients=%zu nclients_max=%zu " +- "nclients_unauth=%zu nclients_unauth_max=%zu", +- srv->nclients, srv->nclients_max, +- srv->nclients_unauth, srv->nclients_unauth_max); +- if (srv->nclients < srv->nclients_max && +- (!srv->nclients_unauth_max || +- srv->nclients_unauth < srv->nclients_unauth_max)) { +- /* Now it makes sense to accept() a new client. */ +- VIR_INFO("Re-enabling services"); +- virNetServerUpdateServicesLocked(srv, true); +- } +-} +- + void virNetServerDispose(void *obj) + { + virNetServerPtr srv = obj; +-- +2.9.2 + diff --git a/SOURCES/libvirt-rpc-virnetserver-Remove-dead-code-checking-the-client-limits.patch b/SOURCES/libvirt-rpc-virnetserver-Remove-dead-code-checking-the-client-limits.patch new file mode 100644 index 0000000..e93dd7a --- /dev/null +++ b/SOURCES/libvirt-rpc-virnetserver-Remove-dead-code-checking-the-client-limits.patch @@ -0,0 +1,46 @@ +From cca396b2a3c1042a0825a3f624a71e06ed65a15b Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Tue, 2 Aug 2016 15:20:54 +0200 +Subject: [PATCH] rpc: virnetserver: Remove dead code checking the client + limits + +Prior to commit 2737aaaf, we allowed every client to connect successfully, +however, if accepting a client would eventually lead to an overcommit of the +limits, we would disconnect it immediately with "Too many active clients, +dropping connection from...". Recent changes refactored the code in a way, that +it is not possible for the client-related callback to be dispatched and the +client to be accepted if the limits wouldn't permit to do so, therefore a check +if a connection should be dropped due to limits violation has become a dead +code that could be removed. + +Signed-off-by: Erik Skultety +(cherry picked from commit 238b20b47f4be0299d364ec8907edf81e6b55183) + +https://bugzilla.redhat.com/show_bug.cgi?id=1357776 +Signed-off-by: Erik Skultety +--- + src/rpc/virnetserver.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c +index 5b6bc4a..f06643a 100644 +--- a/src/rpc/virnetserver.c ++++ b/src/rpc/virnetserver.c +@@ -279,13 +279,6 @@ int virNetServerAddClient(virNetServerPtr srv, + { + virObjectLock(srv); + +- if (srv->nclients >= srv->nclients_max) { +- virReportError(VIR_ERR_RPC, +- _("Too many active clients (%zu), dropping connection from %s"), +- srv->nclients_max, virNetServerClientRemoteAddrStringURI(client)); +- goto error; +- } +- + if (virNetServerClientInit(client) < 0) + goto error; + +-- +2.9.2 + diff --git a/SOURCES/libvirt-rpc-virnetserver-Rename-ClientSetProcessingControls-to-ClientSetLimits.patch b/SOURCES/libvirt-rpc-virnetserver-Rename-ClientSetProcessingControls-to-ClientSetLimits.patch new file mode 100644 index 0000000..f824915 --- /dev/null +++ b/SOURCES/libvirt-rpc-virnetserver-Rename-ClientSetProcessingControls-to-ClientSetLimits.patch @@ -0,0 +1,72 @@ +From 8bd8ba893d25a4d3f847e982de13f180b716b090 Mon Sep 17 00:00:00 2001 +Message-Id: <8bd8ba893d25a4d3f847e982de13f180b716b090@dist-git> +From: Erik Skultety +Date: Tue, 2 Aug 2016 15:20:50 +0200 +Subject: [PATCH] rpc: virnetserver: Rename ClientSetProcessingControls to + ClientSetLimits + +The original naming was just a leftover that should have been fixed in commit +8b1f0469. + +Signed-off-by: Erik Skultety +(cherry picked from commit 2e5417bc466b7a12d72136cdd5f406301ec101d0) + +https://bugzilla.redhat.com/show_bug.cgi?id=1357776 +Signed-off-by: Erik Skultety +--- + daemon/admin_server.c | 4 ++-- + src/rpc/virnetserver.c | 6 +++--- + src/rpc/virnetserver.h | 6 +++--- + 3 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/daemon/admin_server.c b/daemon/admin_server.c +index 5bbf229..d8a3323 100644 +--- a/daemon/admin_server.c ++++ b/daemon/admin_server.c +@@ -382,8 +382,8 @@ adminServerSetClientLimits(virNetServerPtr srv, + VIR_SERVER_CLIENTS_UNAUTH_MAX))) + maxClientsUnauth = param->value.ui; + +- if (virNetServerSetClientProcessingControls(srv, maxClients, +- maxClientsUnauth) < 0) ++ if (virNetServerSetClientLimits(srv, maxClients, ++ maxClientsUnauth) < 0) + return -1; + + return 0; +diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c +index 8c8af97..13b5bd3 100644 +--- a/src/rpc/virnetserver.c ++++ b/src/rpc/virnetserver.c +@@ -1046,9 +1046,9 @@ virNetServerGetClient(virNetServerPtr srv, + } + + int +-virNetServerSetClientProcessingControls(virNetServerPtr srv, +- long long int maxClients, +- long long int maxClientsUnauth) ++virNetServerSetClientLimits(virNetServerPtr srv, ++ long long int maxClients, ++ long long int maxClientsUnauth) + { + int ret = -1; + size_t max, max_unauth; +diff --git a/src/rpc/virnetserver.h b/src/rpc/virnetserver.h +index 38107b4..151bac8 100644 +--- a/src/rpc/virnetserver.h ++++ b/src/rpc/virnetserver.h +@@ -116,8 +116,8 @@ size_t virNetServerGetCurrentClients(virNetServerPtr srv); + size_t virNetServerGetMaxUnauthClients(virNetServerPtr srv); + size_t virNetServerGetCurrentUnauthClients(virNetServerPtr srv); + +-int virNetServerSetClientProcessingControls(virNetServerPtr srv, +- long long int maxClients, +- long long int maxClientsUnauth); ++int virNetServerSetClientLimits(virNetServerPtr srv, ++ long long int maxClients, ++ long long int maxClientsUnauth); + + #endif /* __VIR_NET_SERVER_H__ */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-security-Add-virSecurityDomainSetDirLabel.patch b/SOURCES/libvirt-security-Add-virSecurityDomainSetDirLabel.patch deleted file mode 100644 index 28c560e..0000000 --- a/SOURCES/libvirt-security-Add-virSecurityDomainSetDirLabel.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 47dd73a795f67459851f20af3f9dded334f3a941 Mon Sep 17 00:00:00 2001 -Message-Id: <47dd73a795f67459851f20af3f9dded334f3a941@dist-git> -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:47 +0200 -Subject: [PATCH] security: Add virSecurityDomainSetDirLabel - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -That function can be used for setting security labels on arbitrary -directories. - -Signed-off-by: Martin Kletzander -(cherry picked from commit f65a2a12f4b9ab6144a979774f0486cdc4f7a60a) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/security/security_driver.h | 5 +++++ - src/security/security_manager.c | 17 +++++++++++++++++ - src/security/security_manager.h | 4 ++++ - 4 files changed, 27 insertions(+) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index be85c6b..434bbf3 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1022,6 +1022,7 @@ virSecurityDriverLookup; - # security/security_manager.h - virSecurityManagerCheckAllLabel; - virSecurityManagerClearSocketLabel; -+virSecurityManagerDomainSetDirLabel; - virSecurityManagerGenLabel; - virSecurityManagerGetBaseLabel; - virSecurityManagerGetDOI; -diff --git a/src/security/security_driver.h b/src/security/security_driver.h -index f0dca09..784b0de 100644 ---- a/src/security/security_driver.h -+++ b/src/security/security_driver.h -@@ -118,6 +118,9 @@ typedef int (*virSecurityDomainSetImageLabel) (virSecurityManagerPtr mgr, - typedef int (*virSecurityDomainRestoreImageLabel) (virSecurityManagerPtr mgr, - virDomainDefPtr def, - virStorageSourcePtr src); -+typedef int (*virSecurityDomainSetDirLabel) (virSecurityManagerPtr mgr, -+ virDomainDefPtr def, -+ const char *path); - - - struct _virSecurityDriver { -@@ -168,6 +171,8 @@ struct _virSecurityDriver { - virSecurityDomainSetHugepages domainSetSecurityHugepages; - - virSecurityDriverGetBaseLabel getBaseLabel; -+ -+ virSecurityDomainSetDirLabel domainSetDirLabel; - }; - - virSecurityDriverPtr virSecurityDriverLookup(const char *name, -diff --git a/src/security/security_manager.c b/src/security/security_manager.c -index b0cd9e8..1098558 100644 ---- a/src/security/security_manager.c -+++ b/src/security/security_manager.c -@@ -991,3 +991,20 @@ virSecurityManagerSetHugepages(virSecurityManagerPtr mgr, - - return 0; - } -+ -+ -+int -+virSecurityManagerDomainSetDirLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr vm, -+ const char *path) -+{ -+ if (mgr->drv->domainSetDirLabel) { -+ int ret; -+ virObjectLock(mgr); -+ ret = mgr->drv->domainSetDirLabel(mgr, vm, path); -+ virObjectUnlock(mgr); -+ return ret; -+ } -+ -+ return 0; -+} -diff --git a/src/security/security_manager.h b/src/security/security_manager.h -index 13468db..78f34a0 100644 ---- a/src/security/security_manager.h -+++ b/src/security/security_manager.h -@@ -150,4 +150,8 @@ int virSecurityManagerRestoreImageLabel(virSecurityManagerPtr mgr, - virDomainDefPtr vm, - virStorageSourcePtr src); - -+int virSecurityManagerDomainSetDirLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr vm, -+ const char *path); -+ - #endif /* VIR_SECURITY_MANAGER_H__ */ --- -2.5.1 - diff --git a/SOURCES/libvirt-security_dac-Add-SetDirLabel-support.patch b/SOURCES/libvirt-security_dac-Add-SetDirLabel-support.patch deleted file mode 100644 index d14f69e..0000000 --- a/SOURCES/libvirt-security_dac-Add-SetDirLabel-support.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 34526e81d64c72c7a562774d110c552eb864dba0 Mon Sep 17 00:00:00 2001 -Message-Id: <34526e81d64c72c7a562774d110c552eb864dba0@dist-git> -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:50 +0200 -Subject: [PATCH] security_dac: Add SetDirLabel support - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit f4c60dfbf2ec606a5fc148b4c6ff1cd17ffd79ec) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/security/security_dac.c | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/src/security/security_dac.c b/src/security/security_dac.c -index bed23c3..864d75b 100644 ---- a/src/security/security_dac.c -+++ b/src/security/security_dac.c -@@ -1394,6 +1394,24 @@ virSecurityDACGetBaseLabel(virSecurityManagerPtr mgr, - return priv->baselabel; - } - -+static int -+virSecurityDACDomainSetDirLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr def, -+ const char *path) -+{ -+ virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr); -+ virSecurityLabelDefPtr seclabel; -+ uid_t user; -+ gid_t group; -+ -+ seclabel = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME); -+ -+ if (virSecurityDACGetIds(seclabel, priv, &user, &group, NULL, NULL) < 0) -+ return -1; -+ -+ return virSecurityDACSetOwnership(path, user, group); -+} -+ - virSecurityDriver virSecurityDriverDAC = { - .privateDataLen = sizeof(virSecurityDACData), - .name = SECURITY_DAC_NAME, -@@ -1441,4 +1459,6 @@ virSecurityDriver virSecurityDriverDAC = { - .domainGetSecurityMountOptions = virSecurityDACGetMountOptions, - - .getBaseLabel = virSecurityDACGetBaseLabel, -+ -+ .domainSetDirLabel = virSecurityDACDomainSetDirLabel, - }; --- -2.5.1 - diff --git a/SOURCES/libvirt-security_dac-Label-non-listening-sockets.patch b/SOURCES/libvirt-security_dac-Label-non-listening-sockets.patch deleted file mode 100644 index 33cb939..0000000 --- a/SOURCES/libvirt-security_dac-Label-non-listening-sockets.patch +++ /dev/null @@ -1,50 +0,0 @@ -From fa6359064ef72968c212581e4f0011a15d809f42 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:46 +0200 -Subject: [PATCH] security_dac: Label non-listening sockets - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -SELinux security driver already does that, but DAC driver somehow missed -the memo. Let's fix it so it works the same way. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 7b6953bc2256200a5ff4b985c431bfe3c3e0cfb1) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/security/security_dac.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/security/security_dac.c b/src/security/security_dac.c -index deb6980..bed23c3 100644 ---- a/src/security/security_dac.c -+++ b/src/security/security_dac.c -@@ -789,6 +789,15 @@ virSecurityDACSetChardevLabel(virSecurityManagerPtr mgr, - ret = 0; - break; - -+ case VIR_DOMAIN_CHR_TYPE_UNIX: -+ if (!dev_source->data.nix.listen) { -+ if (virSecurityDACSetOwnership(dev_source->data.nix.path, -+ user, group) < 0) -+ goto done; -+ } -+ ret = 0; -+ break; -+ - case VIR_DOMAIN_CHR_TYPE_SPICEPORT: - case VIR_DOMAIN_CHR_TYPE_NULL: - case VIR_DOMAIN_CHR_TYPE_VC: -@@ -796,7 +805,6 @@ virSecurityDACSetChardevLabel(virSecurityManagerPtr mgr, - case VIR_DOMAIN_CHR_TYPE_STDIO: - case VIR_DOMAIN_CHR_TYPE_UDP: - case VIR_DOMAIN_CHR_TYPE_TCP: -- case VIR_DOMAIN_CHR_TYPE_UNIX: - case VIR_DOMAIN_CHR_TYPE_SPICEVMC: - case VIR_DOMAIN_CHR_TYPE_NMDM: - case VIR_DOMAIN_CHR_TYPE_LAST: --- -2.5.1 - diff --git a/SOURCES/libvirt-security_selinux-Add-SetDirLabel-support.patch b/SOURCES/libvirt-security_selinux-Add-SetDirLabel-support.patch deleted file mode 100644 index 0d43744..0000000 --- a/SOURCES/libvirt-security_selinux-Add-SetDirLabel-support.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 07bbdd7925cc66eb30284de1d592b1a1c0889313 Mon Sep 17 00:00:00 2001 -Message-Id: <07bbdd7925cc66eb30284de1d592b1a1c0889313@dist-git> -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:49 +0200 -Subject: [PATCH] security_selinux: Add SetDirLabel support - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 3f48345f7ec0c44b8ce2371cab454d2118f830b4) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/security/security_selinux.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index a37f8c1..d4bfee7 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -2505,6 +2505,21 @@ virSecuritySELinuxGetSecurityMountOptions(virSecurityManagerPtr mgr, - return opts; - } - -+static char * -+virSecuritySELinuxDomainSetDirLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr def, -+ const char *path) -+{ -+ virSecurityLabelDefPtr seclabel; -+ int ret = -1; -+ -+ seclabel = virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX_NAME); -+ if (!seclabel || !seclabel->relabel) -+ return 0; -+ -+ return virSecuritySELinuxSetFilecon(path, seclabel->imagelabel); -+} -+ - virSecurityDriver virSecurityDriverSELinux = { - .privateDataLen = sizeof(virSecuritySELinuxData), - .name = SECURITY_SELINUX_NAME, -@@ -2549,4 +2564,6 @@ virSecurityDriver virSecurityDriverSELinux = { - - .domainGetSecurityMountOptions = virSecuritySELinuxGetSecurityMountOptions, - .getBaseLabel = virSecuritySELinuxGetBaseLabel, -+ -+ .domainSetDirLabel = virSecuritySELinuxDomainSetDirLabel, - }; --- -2.5.1 - diff --git a/SOURCES/libvirt-security_selinux-Replace-SELinuxSCSICallbackData-with-proper-struct.patch b/SOURCES/libvirt-security_selinux-Replace-SELinuxSCSICallbackData-with-proper-struct.patch deleted file mode 100644 index 4179929..0000000 --- a/SOURCES/libvirt-security_selinux-Replace-SELinuxSCSICallbackData-with-proper-struct.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 51b7b21a435d66f4c33cbe0c29cc7e5ee7d498ae Mon Sep 17 00:00:00 2001 -Message-Id: <51b7b21a435d66f4c33cbe0c29cc7e5ee7d498ae@dist-git> -From: Michal Privoznik -Date: Tue, 15 Sep 2015 11:51:22 +0200 -Subject: [PATCH] security_selinux: Replace SELinuxSCSICallbackData with proper - struct - -https://bugzilla.redhat.com/show_bug.cgi?id=1124841 - -We have plenty of callbacks in the driver. Some of these -callbacks require more than one argument to be passed. For that -we currently have a data type (struct) per each callback. Well, -so far for only one - SELinuxSCSICallbackData. But lets turn it -into more general name so it can be reused in other callbacks too -instead of each one introducing a new, duplicate data type. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 276c409163fb94b0c325900d6e2581eaa3e3ada6) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/security/security_selinux.c | 15 +++++++++------ - 1 file changed, 9 insertions(+), 6 deletions(-) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index 46080bf..c6da6b0 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -68,15 +68,18 @@ struct _virSecuritySELinuxData { - #endif - }; - --#define SECURITY_SELINUX_VOID_DOI "0" --#define SECURITY_SELINUX_NAME "selinux" -+/* Data structure to pass to various callbacks so we have everything we need */ -+typedef struct _virSecuritySELinuxCallbackData virSecuritySELinuxCallbackData; -+typedef virSecuritySELinuxCallbackData *virSecuritySELinuxCallbackDataPtr; - --/* Data structure to pass to *FileIterate so we have everything we need */ --struct SELinuxSCSICallbackData { -+struct _virSecuritySELinuxCallbackData { - virSecurityManagerPtr mgr; - virDomainDefPtr def; - }; - -+#define SECURITY_SELINUX_VOID_DOI "0" -+#define SECURITY_SELINUX_NAME "selinux" -+ - static int - virSecuritySELinuxRestoreSecurityTPMFileLabelInt(virSecurityManagerPtr mgr, - virDomainDefPtr def, -@@ -1319,7 +1322,7 @@ virSecuritySELinuxSetSecuritySCSILabel(virSCSIDevicePtr dev, - const char *file, void *opaque) - { - virSecurityLabelDefPtr secdef; -- struct SELinuxSCSICallbackData *ptr = opaque; -+ virSecuritySELinuxCallbackDataPtr ptr = opaque; - virSecurityManagerPtr mgr = ptr->mgr; - virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(mgr); - -@@ -1400,7 +1403,7 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, - - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { - virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; -- struct SELinuxSCSICallbackData data = {.mgr = mgr, .def = def}; -+ virSecuritySELinuxCallbackData data = {.mgr = mgr, .def = def}; - - virSCSIDevicePtr scsi = - virSCSIDeviceNew(NULL, --- -2.5.3 - diff --git a/SOURCES/libvirt-security_selinux-Take-privileged-into-account.patch b/SOURCES/libvirt-security_selinux-Take-privileged-into-account.patch deleted file mode 100644 index 635ae2c..0000000 --- a/SOURCES/libvirt-security_selinux-Take-privileged-into-account.patch +++ /dev/null @@ -1,403 +0,0 @@ -From 3306e7bb963713b01f31a12b61f7166d8412126c Mon Sep 17 00:00:00 2001 -Message-Id: <3306e7bb963713b01f31a12b61f7166d8412126c@dist-git> -From: Michal Privoznik -Date: Tue, 15 Sep 2015 11:51:24 +0200 -Subject: [PATCH] security_selinux: Take @privileged into account - -https://bugzilla.redhat.com/show_bug.cgi?id=1124841 - -If running in session mode it may happen that we fail to set -correct SELinux label, but the image may still be readable to -the qemu process. Take this into account. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 00e5b967168bab252ea2bef977ad40b4155f08df) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/security/security_selinux.c | 126 +++++++++++++++++++++++++--------------- - 1 file changed, 78 insertions(+), 48 deletions(-) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index c6da6b0..c2464c2 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -886,7 +886,8 @@ virSecuritySELinuxGetSecurityProcessLabel(virSecurityManagerPtr mgr ATTRIBUTE_UN - * return 1 if labelling was not possible. Otherwise, require a label - * change, and return 0 for success, -1 for failure. */ - static int --virSecuritySELinuxSetFileconHelper(const char *path, char *tcon, bool optional) -+virSecuritySELinuxSetFileconHelper(const char *path, char *tcon, -+ bool optional, bool privileged) - { - security_context_t econ; - -@@ -915,7 +916,10 @@ virSecuritySELinuxSetFileconHelper(const char *path, char *tcon, bool optional) - virReportSystemError(setfilecon_errno, - _("unable to set security context '%s' on '%s'"), - tcon, path); -- if (security_getenforce() == 1) -+ /* However, don't claim error if SELinux is in Enforcing mode and -+ * we are running as unprivileged user and we really did see EPERM. -+ * Otherwise we want to return error if SELinux is Enforcing. */ -+ if (security_getenforce() == 1 && (setfilecon_errno != EPERM || privileged)) - return -1; - } else { - const char *msg; -@@ -939,15 +943,19 @@ virSecuritySELinuxSetFileconHelper(const char *path, char *tcon, bool optional) - } - - static int --virSecuritySELinuxSetFileconOptional(const char *path, char *tcon) -+virSecuritySELinuxSetFileconOptional(virSecurityManagerPtr mgr, -+ const char *path, char *tcon) - { -- return virSecuritySELinuxSetFileconHelper(path, tcon, true); -+ bool privileged = virSecurityManagerGetPrivileged(mgr); -+ return virSecuritySELinuxSetFileconHelper(path, tcon, true, privileged); - } - - static int --virSecuritySELinuxSetFilecon(const char *path, char *tcon) -+virSecuritySELinuxSetFilecon(virSecurityManagerPtr mgr, -+ const char *path, char *tcon) - { -- return virSecuritySELinuxSetFileconHelper(path, tcon, false); -+ bool privileged = virSecurityManagerGetPrivileged(mgr); -+ return virSecuritySELinuxSetFileconHelper(path, tcon, false, privileged); - } - - static int -@@ -1037,7 +1045,7 @@ virSecuritySELinuxRestoreSecurityFileLabel(virSecurityManagerPtr mgr, - VIR_WARN("cannot lookup default selinux label for %s", newpath); - rc = 0; - } else { -- rc = virSecuritySELinuxSetFilecon(newpath, fcon); -+ rc = virSecuritySELinuxSetFilecon(mgr, newpath, fcon); - } - - err: -@@ -1064,12 +1072,13 @@ virSecuritySELinuxSetSecurityTPMFileLabel(virSecurityManagerPtr mgr, - switch (tpm->type) { - case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: - tpmdev = tpm->data.passthrough.source.data.file.path; -- rc = virSecuritySELinuxSetFilecon(tpmdev, seclabel->imagelabel); -+ rc = virSecuritySELinuxSetFilecon(mgr, tpmdev, seclabel->imagelabel); - if (rc < 0) - return -1; - - if ((cancel_path = virTPMCreateCancelPath(tpmdev)) != NULL) { -- rc = virSecuritySELinuxSetFilecon(cancel_path, -+ rc = virSecuritySELinuxSetFilecon(mgr, -+ cancel_path, - seclabel->imagelabel); - VIR_FREE(cancel_path); - if (rc < 0) { -@@ -1223,22 +1232,26 @@ virSecuritySELinuxSetSecurityImageLabelInternal(virSecurityManagerPtr mgr, - return 0; - - if (disk_seclabel && disk_seclabel->relabel && disk_seclabel->label) { -- ret = virSecuritySELinuxSetFilecon(src->path, disk_seclabel->label); -+ ret = virSecuritySELinuxSetFilecon(mgr, src->path, disk_seclabel->label); - } else if (first) { - if (src->shared) { -- ret = virSecuritySELinuxSetFileconOptional(src->path, -+ ret = virSecuritySELinuxSetFileconOptional(mgr, -+ src->path, - data->file_context); - } else if (src->readonly) { -- ret = virSecuritySELinuxSetFileconOptional(src->path, -+ ret = virSecuritySELinuxSetFileconOptional(mgr, -+ src->path, - data->content_context); - } else if (secdef->imagelabel) { -- ret = virSecuritySELinuxSetFileconOptional(src->path, -+ ret = virSecuritySELinuxSetFileconOptional(mgr, -+ src->path, - secdef->imagelabel); - } else { - ret = 0; - } - } else { -- ret = virSecuritySELinuxSetFileconOptional(src->path, -+ ret = virSecuritySELinuxSetFileconOptional(mgr, -+ src->path, - data->content_context); - } - -@@ -1290,17 +1303,18 @@ virSecuritySELinuxSetSecurityDiskLabel(virSecurityManagerPtr mgr, - return 0; - } - -- - static int - virSecuritySELinuxSetSecurityHostdevLabelHelper(const char *file, void *opaque) - { - virSecurityLabelDefPtr secdef; -- virDomainDefPtr def = opaque; -+ virSecuritySELinuxCallbackDataPtr data = opaque; -+ virSecurityManagerPtr mgr = data->mgr; -+ virDomainDefPtr def = data->def; - - secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX_NAME); - if (secdef == NULL) - return 0; -- return virSecuritySELinuxSetFilecon(file, secdef->imagelabel); -+ return virSecuritySELinuxSetFilecon(mgr, file, secdef->imagelabel); - } - - static int -@@ -1331,13 +1345,14 @@ virSecuritySELinuxSetSecuritySCSILabel(virSCSIDevicePtr dev, - return 0; - - if (virSCSIDeviceGetShareable(dev)) -- return virSecuritySELinuxSetFileconOptional(file, -+ return virSecuritySELinuxSetFileconOptional(mgr, file, - data->file_context); - else if (virSCSIDeviceGetReadonly(dev)) -- return virSecuritySELinuxSetFileconOptional(file, -+ return virSecuritySELinuxSetFileconOptional(mgr, file, - data->content_context); - else -- return virSecuritySELinuxSetFileconOptional(file, secdef->imagelabel); -+ return virSecuritySELinuxSetFileconOptional(mgr, file, -+ secdef->imagelabel); - } - - static int -@@ -1350,6 +1365,8 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, - virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; - virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; - virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; -+ virSecuritySELinuxCallbackData data = {.mgr = mgr, .def = def}; -+ - int ret = -1; - - /* Like virSecuritySELinuxSetSecurityImageLabelInternal() for a networked -@@ -1372,7 +1389,7 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, - if (!usb) - goto done; - -- ret = virUSBDeviceFileIterate(usb, virSecuritySELinuxSetSecurityUSBLabel, def); -+ ret = virUSBDeviceFileIterate(usb, virSecuritySELinuxSetSecurityUSBLabel, &data); - virUSBDeviceFree(usb); - break; - } -@@ -1392,10 +1409,10 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, - virPCIDeviceFree(pci); - goto done; - } -- ret = virSecuritySELinuxSetSecurityPCILabel(pci, vfioGroupDev, def); -+ ret = virSecuritySELinuxSetSecurityPCILabel(pci, vfioGroupDev, &data); - VIR_FREE(vfioGroupDev); - } else { -- ret = virPCIDeviceFileIterate(pci, virSecuritySELinuxSetSecurityPCILabel, def); -+ ret = virPCIDeviceFileIterate(pci, virSecuritySELinuxSetSecurityPCILabel, &data); - } - virPCIDeviceFree(pci); - break; -@@ -1403,7 +1420,6 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, - - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { - virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; -- virSecuritySELinuxCallbackData data = {.mgr = mgr, .def = def}; - - virSCSIDevicePtr scsi = - virSCSIDeviceNew(NULL, -@@ -1433,7 +1449,8 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, - - - static int --virSecuritySELinuxSetSecurityHostdevCapsLabel(virDomainDefPtr def, -+virSecuritySELinuxSetSecurityHostdevCapsLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr def, - virDomainHostdevDefPtr dev, - const char *vroot) - { -@@ -1455,7 +1472,7 @@ virSecuritySELinuxSetSecurityHostdevCapsLabel(virDomainDefPtr def, - if (VIR_STRDUP(path, dev->source.caps.u.storage.block) < 0) - return -1; - } -- ret = virSecuritySELinuxSetFilecon(path, secdef->imagelabel); -+ ret = virSecuritySELinuxSetFilecon(mgr, path, secdef->imagelabel); - VIR_FREE(path); - break; - } -@@ -1469,7 +1486,7 @@ virSecuritySELinuxSetSecurityHostdevCapsLabel(virDomainDefPtr def, - if (VIR_STRDUP(path, dev->source.caps.u.misc.chardev) < 0) - return -1; - } -- ret = virSecuritySELinuxSetFilecon(path, secdef->imagelabel); -+ ret = virSecuritySELinuxSetFilecon(mgr, path, secdef->imagelabel); - VIR_FREE(path); - break; - } -@@ -1502,7 +1519,8 @@ virSecuritySELinuxSetSecurityHostdevLabel(virSecurityManagerPtr mgr, - dev, vroot); - - case VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES: -- return virSecuritySELinuxSetSecurityHostdevCapsLabel(def, dev, vroot); -+ return virSecuritySELinuxSetSecurityHostdevCapsLabel(mgr, def, -+ dev, vroot); - - default: - return 0; -@@ -1707,7 +1725,8 @@ virSecuritySELinuxRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr, - - - static int --virSecuritySELinuxSetSecurityChardevLabel(virDomainDefPtr def, -+virSecuritySELinuxSetSecurityChardevLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr def, - virDomainChrDefPtr dev, - virDomainChrSourceDefPtr dev_source) - -@@ -1737,13 +1756,15 @@ virSecuritySELinuxSetSecurityChardevLabel(virDomainDefPtr def, - switch (dev_source->type) { - case VIR_DOMAIN_CHR_TYPE_DEV: - case VIR_DOMAIN_CHR_TYPE_FILE: -- ret = virSecuritySELinuxSetFilecon(dev_source->data.file.path, -+ ret = virSecuritySELinuxSetFilecon(mgr, -+ dev_source->data.file.path, - imagelabel); - break; - - case VIR_DOMAIN_CHR_TYPE_UNIX: - if (!dev_source->data.nix.listen) { -- if (virSecuritySELinuxSetFilecon(dev_source->data.nix.path, -+ if (virSecuritySELinuxSetFilecon(mgr, -+ dev_source->data.nix.path, - imagelabel) < 0) - goto done; - } -@@ -1755,11 +1776,12 @@ virSecuritySELinuxSetSecurityChardevLabel(virDomainDefPtr def, - (virAsprintf(&out, "%s.out", dev_source->data.file.path) < 0)) - goto done; - if (virFileExists(in) && virFileExists(out)) { -- if ((virSecuritySELinuxSetFilecon(in, imagelabel) < 0) || -- (virSecuritySELinuxSetFilecon(out, imagelabel) < 0)) { -+ if ((virSecuritySELinuxSetFilecon(mgr, in, imagelabel) < 0) || -+ (virSecuritySELinuxSetFilecon(mgr, out, imagelabel) < 0)) { - goto done; - } -- } else if (virSecuritySELinuxSetFilecon(dev_source->data.file.path, -+ } else if (virSecuritySELinuxSetFilecon(mgr, -+ dev_source->data.file.path, - imagelabel) < 0) { - goto done; - } -@@ -2000,7 +2022,7 @@ virSecuritySELinuxReleaseSecurityLabel(virSecurityManagerPtr mgr, - - - static int --virSecuritySELinuxSetSavedStateLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED, -+virSecuritySELinuxSetSavedStateLabel(virSecurityManagerPtr mgr, - virDomainDefPtr def, - const char *savefile) - { -@@ -2010,7 +2032,7 @@ virSecuritySELinuxSetSavedStateLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED, - if (!secdef || !secdef->relabel) - return 0; - -- return virSecuritySELinuxSetFilecon(savefile, secdef->imagelabel); -+ return virSecuritySELinuxSetFilecon(mgr, savefile, secdef->imagelabel); - } - - -@@ -2242,14 +2264,16 @@ virSecuritySELinuxClearSecuritySocketLabel(virSecurityManagerPtr mgr ATTRIBUTE_U - static int - virSecuritySELinuxSetSecurityChardevCallback(virDomainDefPtr def, - virDomainChrDefPtr dev, -- void *opaque ATTRIBUTE_UNUSED) -+ void *opaque) - { -+ virSecurityManagerPtr mgr = opaque; -+ - /* This is taken care of by processing of def->serials */ - if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE && - dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) - return 0; - -- return virSecuritySELinuxSetSecurityChardevLabel(def, dev, &dev->source); -+ return virSecuritySELinuxSetSecurityChardevLabel(mgr, def, dev, &dev->source); - } - - -@@ -2270,10 +2294,11 @@ virSecuritySELinuxSetSecuritySmartcardCallback(virDomainDefPtr def, - database = dev->data.cert.database; - if (!database) - database = VIR_DOMAIN_SMARTCARD_DEFAULT_DATABASE; -- return virSecuritySELinuxSetFilecon(database, data->content_context); -+ return virSecuritySELinuxSetFilecon(mgr, database, data->content_context); - - case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: -- return virSecuritySELinuxSetSecurityChardevLabel(def, NULL, &dev->data.passthru); -+ return virSecuritySELinuxSetSecurityChardevLabel(mgr, def, NULL, -+ &dev->data.passthru); - - default: - virReportError(VIR_ERR_INTERNAL_ERROR, -@@ -2330,7 +2355,7 @@ virSecuritySELinuxSetSecurityAllLabel(virSecurityManagerPtr mgr, - if (virDomainChrDefForeach(def, - true, - virSecuritySELinuxSetSecurityChardevCallback, -- NULL) < 0) -+ mgr) < 0) - return -1; - - if (virDomainSmartcardDefForeach(def, -@@ -2343,23 +2368,28 @@ virSecuritySELinuxSetSecurityAllLabel(virSecurityManagerPtr mgr, - * is really a disk, qemu can read and write to it. */ - if (def->os.loader && def->os.loader->nvram && - secdef && secdef->imagelabel && -- virSecuritySELinuxSetFilecon(def->os.loader->nvram, secdef->imagelabel) < 0) -+ virSecuritySELinuxSetFilecon(mgr, def->os.loader->nvram, -+ secdef->imagelabel) < 0) - return -1; - - if (def->os.kernel && -- virSecuritySELinuxSetFilecon(def->os.kernel, data->content_context) < 0) -+ virSecuritySELinuxSetFilecon(mgr, def->os.kernel, -+ data->content_context) < 0) - return -1; - - if (def->os.initrd && -- virSecuritySELinuxSetFilecon(def->os.initrd, data->content_context) < 0) -+ virSecuritySELinuxSetFilecon(mgr, def->os.initrd, -+ data->content_context) < 0) - return -1; - - if (def->os.dtb && -- virSecuritySELinuxSetFilecon(def->os.dtb, data->content_context) < 0) -+ virSecuritySELinuxSetFilecon(mgr, def->os.dtb, -+ data->content_context) < 0) - return -1; - - if (stdin_path && -- virSecuritySELinuxSetFilecon(stdin_path, data->content_context) < 0) -+ virSecuritySELinuxSetFilecon(mgr, stdin_path, -+ data->content_context) < 0) - return -1; - - return 0; -@@ -2507,7 +2537,7 @@ virSecuritySELinuxGetSecurityMountOptions(virSecurityManagerPtr mgr, - } - - static int --virSecuritySELinuxDomainSetDirLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED, -+virSecuritySELinuxDomainSetDirLabel(virSecurityManagerPtr mgr, - virDomainDefPtr def, - const char *path) - { -@@ -2517,7 +2547,7 @@ virSecuritySELinuxDomainSetDirLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED, - if (!seclabel || !seclabel->relabel) - return 0; - -- return virSecuritySELinuxSetFilecon(path, seclabel->imagelabel); -+ return virSecuritySELinuxSetFilecon(mgr, path, seclabel->imagelabel); - } - - virSecurityDriver virSecurityDriverSELinux = { --- -2.5.3 - diff --git a/SOURCES/libvirt-security_selinux-Use-proper-structure-to-access-socket-data.patch b/SOURCES/libvirt-security_selinux-Use-proper-structure-to-access-socket-data.patch deleted file mode 100644 index d096c5c..0000000 --- a/SOURCES/libvirt-security_selinux-Use-proper-structure-to-access-socket-data.patch +++ /dev/null @@ -1,37 +0,0 @@ -From e0e54b182c8ab8ba5be114d70e8a1ad17767bf4e Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:45 +0200 -Subject: [PATCH] security_selinux: Use proper structure to access socket data - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -In virSecuritySELinuxSetSecurityChardevLabel() we are labelling unix -socket path, but accessing another structure of the union. This does -not pose a problem currently as both paths are at the same offset, but -this should be fixed for the future. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 4ac6ce38d3bc60f45491509ede4fc8437348048c) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/security/security_selinux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index 6e67a86..a37f8c1 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -1740,7 +1740,7 @@ virSecuritySELinuxSetSecurityChardevLabel(virDomainDefPtr def, - - case VIR_DOMAIN_CHR_TYPE_UNIX: - if (!dev_source->data.nix.listen) { -- if (virSecuritySELinuxSetFilecon(dev_source->data.file.path, -+ if (virSecuritySELinuxSetFilecon(dev_source->data.nix.path, - imagelabel) < 0) - goto done; - } --- -2.5.1 - diff --git a/SOURCES/libvirt-security_stack-Add-SetDirLabel-support.patch b/SOURCES/libvirt-security_stack-Add-SetDirLabel-support.patch deleted file mode 100644 index a4643c3..0000000 --- a/SOURCES/libvirt-security_stack-Add-SetDirLabel-support.patch +++ /dev/null @@ -1,55 +0,0 @@ -From f2cbaf777e1a5808944bce8b14899be93f253d4b Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:48 +0200 -Subject: [PATCH] security_stack: Add SetDirLabel support - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 99cf04e32d94025a8a969057fba4451eb416a56e) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/security/security_stack.c | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/src/security/security_stack.c b/src/security/security_stack.c -index 1ded57b..8d9560d 100644 ---- a/src/security/security_stack.c -+++ b/src/security/security_stack.c -@@ -599,6 +599,24 @@ virSecurityStackRestoreSecurityImageLabel(virSecurityManagerPtr mgr, - return rc; - } - -+static int -+virSecurityStackDomainSetDirLabel(virSecurityManagerPtr mgr, -+ virDomainDefPtr vm, -+ const char *path) -+{ -+ virSecurityStackDataPtr priv = virSecurityManagerGetPrivateData(mgr); -+ virSecurityStackItemPtr item = priv->itemsHead; -+ int rc = 0; -+ -+ for (; item; item = item->next) { -+ if (virSecurityManagerDomainSetDirLabel(item->securityManager, -+ vm, path) < 0) -+ rc = -1; -+ } -+ -+ return rc; -+} -+ - virSecurityDriver virSecurityDriverStack = { - .privateDataLen = sizeof(virSecurityStackData), - .name = "stack", -@@ -648,4 +666,6 @@ virSecurityDriver virSecurityDriverStack = { - .domainSetSecurityHugepages = virSecurityStackSetHugepages, - - .getBaseLabel = virSecurityStackGetBaseLabel, -+ -+ .domainSetDirLabel = virSecurityStackDomainSetDirLabel, - }; --- -2.5.1 - diff --git a/SOURCES/libvirt-selinux-fix-compile-errors.patch b/SOURCES/libvirt-selinux-fix-compile-errors.patch deleted file mode 100644 index 7f7ab25..0000000 --- a/SOURCES/libvirt-selinux-fix-compile-errors.patch +++ /dev/null @@ -1,48 +0,0 @@ -From b6cd6d4baa1d07833321e06d0faff41a44b061a9 Mon Sep 17 00:00:00 2001 -Message-Id: -From: =?UTF-8?q?Guido=20G=C3=BCnther?= -Date: Thu, 3 Sep 2015 15:44:53 +0200 -Subject: [PATCH] selinux: fix compile errors - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Remove unused variable, tag unused parameter and adjust return type. - -introduced by 3f48345f7ec0c44b8ce2371cab454d2118f830b4 - -CC security/libvirt_security_manager_la-security_selinux.lo -security/security_selinux.c: In function 'virSecuritySELinuxDomainSetDirLabel': -security/security_selinux.c:2520:5: error: return makes pointer from integer without a cast [-Werror] -security/security_selinux.c:2514:9: error: unused variable 'ret' [-Werror=unused-variable] -security/security_selinux.c:2509:59: error: unused parameter 'mgr' [-Werror=unused-parameter] - -(cherry picked from commit 4d4c90dfd5475c100c6fd3fb705011e0d90d793e) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/security/security_selinux.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index d4bfee7..d2e5aa2 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -2505,13 +2505,12 @@ virSecuritySELinuxGetSecurityMountOptions(virSecurityManagerPtr mgr, - return opts; - } - --static char * --virSecuritySELinuxDomainSetDirLabel(virSecurityManagerPtr mgr, -+static int -+virSecuritySELinuxDomainSetDirLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED, - virDomainDefPtr def, - const char *path) - { - virSecurityLabelDefPtr seclabel; -- int ret = -1; - - seclabel = virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX_NAME); - if (!seclabel || !seclabel->relabel) --- -2.5.1 - diff --git a/SOURCES/libvirt-storage-Add-extra-failure-condition-for-luks-volume-creation.patch b/SOURCES/libvirt-storage-Add-extra-failure-condition-for-luks-volume-creation.patch new file mode 100644 index 0000000..47e3527 --- /dev/null +++ b/SOURCES/libvirt-storage-Add-extra-failure-condition-for-luks-volume-creation.patch @@ -0,0 +1,47 @@ +From dbc094900f3de46bb9ef9250ae314c2b52e79297 Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:43:05 -0400 +Subject: [PATCH] storage: Add extra failure condition for luks volume creation + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Commit id '5e46d7d6' did not take into account that usage of a luks +volume will require usage of the master key encrypted passphrase for +a QEMU environment. So rather than allow creation of something that +won't be usable, just fail the creation. + +(cherry picked from commit 30d27f24d8ab262ad93b663002a0e1d5edf95fa0) +Signed-off-by: John Ferlan +--- + src/storage/storage_backend.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index d0eaaf9..8faafa4 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -56,6 +56,7 @@ + #include "internal.h" + #include "secret_conf.h" + #include "secret_util.h" ++#include "vircrypto.h" + #include "viruuid.h" + #include "virstoragefile.h" + #include "storage_backend.h" +@@ -1065,6 +1066,12 @@ virStorageBackendCreateQemuImgCheckEncryption(int format, + _("no secret provided for luks encryption")); + return -1; + } ++ if (!virCryptoHaveCipher(VIR_CRYPTO_CIPHER_AES256CBC)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("luks encryption usage requires encrypted " ++ "secret generation to be supported")); ++ return -1; ++ } + } else { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("volume encryption unsupported with format %s"), type); +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-Add-support-to-create-a-luks-volume.patch b/SOURCES/libvirt-storage-Add-support-to-create-a-luks-volume.patch new file mode 100644 index 0000000..d4d66f6 --- /dev/null +++ b/SOURCES/libvirt-storage-Add-support-to-create-a-luks-volume.patch @@ -0,0 +1,520 @@ +From 0e29f2d3041b0ab8dfcbc6bd4032aba6a69b56f6 Mon Sep 17 00:00:00 2001 +Message-Id: <0e29f2d3041b0ab8dfcbc6bd4032aba6a69b56f6@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:57 -0400 +Subject: [PATCH] storage: Add support to create a luks volume + +Partially resolves: +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +If the volume xml was looking to create a luks volume take the necessary +steps in order to make that happen. + +The processing will be: + 1. create a temporary file (virStorageBackendCreateQemuImgSecretPath) + 1a. use the storage driver state dir path that uses the pool and + volume name as a base. + + 2. create a secret object (virStorageBackendCreateQemuImgSecretObject) + 2a. use an alias combinding the volume name and "_luks0" + 2b. add the file to the object + + 3. create/add luks options to the commandline (virQEMUBuildLuksOpts) + 3a. at the very least a "key-secret=%s" using the secret object alias + 3b. if found in the XML the various "cipher" and "ivgen" options + +Signed-off-by: John Ferlan +(cherry picked from commit 5e46d7d6b693c1e3c9197c182302ac7125a856d9) +--- + src/libvirt_private.syms | 1 + + src/storage/storage_backend.c | 214 ++++++++++++++++++++++++++++++++++++++--- + src/storage/storage_backend.h | 3 +- + src/util/virqemu.c | 58 +++++++++++ + src/util/virqemu.h | 6 ++ + tests/storagevolxml2argvtest.c | 3 +- + 6 files changed, 271 insertions(+), 14 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index c205fd8..f73cfa2 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2193,6 +2193,7 @@ virProcessWait; + + # util/virqemu.h + virQEMUBuildBufferEscapeComma; ++virQEMUBuildLuksOpts; + virQEMUBuildObjectCommandlineFromJSON; + + +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index 97f6ffe..84ef4f2 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -55,11 +55,14 @@ + #include "viralloc.h" + #include "internal.h" + #include "secret_conf.h" ++#include "secret_util.h" + #include "viruuid.h" + #include "virstoragefile.h" + #include "storage_backend.h" + #include "virlog.h" + #include "virfile.h" ++#include "virjson.h" ++#include "virqemu.h" + #include "stat-time.h" + #include "virstring.h" + #include "virxml.h" +@@ -907,6 +910,7 @@ virStorageBackendQemuImgSupportsCompat(const char *qemuimg) + return ret; + } + ++ + static int + virStorageBackendQEMUImgBackingFormat(const char *qemuimg) + { +@@ -925,6 +929,10 @@ virStorageBackendQEMUImgBackingFormat(const char *qemuimg) + return ret; + } + ++/* The _virStorageBackendQemuImgInfo separates the command line building from ++ * the volume definition so that qemuDomainSnapshotCreateInactiveExternal can ++ * use it without needing to deal with a volume. ++ */ + struct _virStorageBackendQemuImgInfo { + int format; + const char *path; +@@ -941,21 +949,36 @@ struct _virStorageBackendQemuImgInfo { + const char *inputPath; + const char *inputFormatStr; + int inputFormat; ++ ++ char *secretAlias; ++ const char *secretPath; + }; + ++ + static int +-virStorageBackendCreateQemuImgOpts(char **opts, ++virStorageBackendCreateQemuImgOpts(virStorageEncryptionInfoDefPtr enc, ++ char **opts, + struct _virStorageBackendQemuImgInfo info) + { + virBuffer buf = VIR_BUFFER_INITIALIZER; + +- if (info.backingPath) +- virBufferAsprintf(&buf, "backing_fmt=%s,", +- virStorageFileFormatTypeToString(info.backingFormat)); +- if (info.encryption) +- virBufferAddLit(&buf, "encryption=on,"); +- if (info.preallocate) +- virBufferAddLit(&buf, "preallocation=metadata,"); ++ if (info.format == VIR_STORAGE_FILE_LUKS) { ++ if (!enc) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("missing luks encryption information")); ++ goto error; ++ } ++ virQEMUBuildLuksOpts(&buf, enc, info.secretAlias); ++ } else { ++ if (info.backingPath) ++ virBufferAsprintf(&buf, "backing_fmt=%s,", ++ virStorageFileFormatTypeToString(info.backingFormat)); ++ if (info.encryption) ++ virBufferAddLit(&buf, "encryption=on,"); ++ if (info.preallocate) ++ virBufferAddLit(&buf, "preallocation=metadata,"); ++ } ++ + if (info.nocow) + virBufferAddLit(&buf, "nocow=on,"); + +@@ -1025,6 +1048,22 @@ virStorageBackendCreateQemuImgCheckEncryption(int format, + if (virStorageGenerateQcowEncryption(conn, vol) < 0) + return -1; + } ++ } else if (format == VIR_STORAGE_FILE_LUKS) { ++ if (enc->format != VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, ++ _("unsupported volume encryption format %d"), ++ vol->target.encryption->format); ++ return -1; ++ } ++ if (enc->nsecrets > 1) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("too many secrets for luks encryption")); ++ return -1; ++ } ++ if (enc->nsecrets == 0) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("no secret provided for luks encryption")); ++ } + } else { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("volume encryption unsupported with format %s"), type); +@@ -1069,6 +1108,12 @@ virStorageBackendCreateQemuImgSetBacking(virStoragePoolObjPtr pool, + int accessRetCode = -1; + char *absolutePath = NULL; + ++ if (info->format == VIR_STORAGE_FILE_LUKS) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("cannot set backing store for luks volume")); ++ return -1; ++ } ++ + info->backingFormat = vol->target.backingStore->format; + info->backingPath = vol->target.backingStore->path; + +@@ -1122,6 +1167,7 @@ virStorageBackendCreateQemuImgSetBacking(virStoragePoolObjPtr pool, + static int + virStorageBackendCreateQemuImgSetOptions(virCommandPtr cmd, + int imgformat, ++ virStorageEncryptionInfoDefPtr enc, + struct _virStorageBackendQemuImgInfo info) + { + char *opts = NULL; +@@ -1130,7 +1176,7 @@ virStorageBackendCreateQemuImgSetOptions(virCommandPtr cmd, + imgformat >= QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT) + info.compat = "0.10"; + +- if (virStorageBackendCreateQemuImgOpts(&opts, info) < 0) ++ if (virStorageBackendCreateQemuImgOpts(enc, &opts, info) < 0) + return -1; + if (opts) + virCommandAddArgList(cmd, "-o", opts, NULL); +@@ -1140,6 +1186,39 @@ virStorageBackendCreateQemuImgSetOptions(virCommandPtr cmd, + } + + ++/* Add a secret object to the command line: ++ * --object secret,id=$secretAlias,file=$secretPath ++ * ++ * NB: format=raw is assumed ++ */ ++static int ++virStorageBackendCreateQemuImgSecretObject(virCommandPtr cmd, ++ virStorageVolDefPtr vol, ++ struct _virStorageBackendQemuImgInfo *info) ++{ ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ char *commandStr = NULL; ++ ++ if (virAsprintf(&info->secretAlias, "%s_luks0", vol->name) < 0) ++ return -1; ++ ++ virBufferAsprintf(&buf, "secret,id=%s,file=", info->secretAlias); ++ virQEMUBuildBufferEscapeComma(&buf, info->secretPath); ++ ++ if (virBufferCheckError(&buf) < 0) { ++ virBufferFreeAndReset(&buf); ++ return -1; ++ } ++ ++ commandStr = virBufferContentAndReset(&buf); ++ ++ virCommandAddArgList(cmd, "--object", commandStr, NULL); ++ ++ VIR_FREE(commandStr); ++ return 0; ++} ++ ++ + /* Create a qemu-img virCommand from the supplied binary path, + * volume definitions and imgformat + */ +@@ -1150,7 +1229,8 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + virStorageVolDefPtr inputvol, + unsigned int flags, + const char *create_tool, +- int imgformat) ++ int imgformat, ++ const char *secretPath) + { + virCommandPtr cmd = NULL; + const char *type; +@@ -1162,7 +1242,10 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + .compat = vol->target.compat, + .features = vol->target.features, + .nocow = vol->target.nocow, ++ .secretPath = secretPath, ++ .secretAlias = NULL, + }; ++ virStorageEncryptionInfoDefPtr enc = NULL; + + virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL); + +@@ -1192,6 +1275,18 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + _("format features only available with qcow2")); + return NULL; + } ++ if (info.format == VIR_STORAGE_FILE_LUKS) { ++ if (inputvol) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("cannot use inputvol with luks volume")); ++ return NULL; ++ } ++ if (!info.encryption) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("missing encryption description")); ++ return NULL; ++ } ++ } + + if (inputvol && + virStorageBackendCreateQemuImgSetInput(inputvol, &info) < 0) +@@ -1226,10 +1321,22 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + if (info.backingPath) + virCommandAddArgList(cmd, "-b", info.backingPath, NULL); + +- if (virStorageBackendCreateQemuImgSetOptions(cmd, imgformat, info) < 0) { ++ if (info.format == VIR_STORAGE_FILE_LUKS) { ++ if (virStorageBackendCreateQemuImgSecretObject(cmd, vol, &info) < 0) { ++ VIR_FREE(info.secretAlias); ++ virCommandFree(cmd); ++ return NULL; ++ } ++ enc = &vol->target.encryption->encinfo; ++ } ++ ++ if (virStorageBackendCreateQemuImgSetOptions(cmd, imgformat, ++ enc, info) < 0) { ++ VIR_FREE(info.secretAlias); + virCommandFree(cmd); + return NULL; + } ++ VIR_FREE(info.secretAlias); + + if (info.inputPath) + virCommandAddArg(cmd, info.inputPath); +@@ -1240,6 +1347,77 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + return cmd; + } + ++ ++static char * ++virStorageBackendCreateQemuImgSecretPath(virConnectPtr conn, ++ virStoragePoolObjPtr pool, ++ virStorageVolDefPtr vol) ++{ ++ virStorageEncryptionPtr enc = vol->target.encryption; ++ char *secretPath = NULL; ++ int fd = -1; ++ uint8_t *secret = NULL; ++ size_t secretlen = 0; ++ ++ if (!enc) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("missing encryption description")); ++ return NULL; ++ } ++ ++ if (!conn || !conn->secretDriver || ++ !conn->secretDriver->secretLookupByUUID || ++ !conn->secretDriver->secretLookupByUsage || ++ !conn->secretDriver->secretGetValue) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("unable to look up encryption secret")); ++ return NULL; ++ } ++ ++ if (!(secretPath = virStoragePoolObjBuildTempFilePath(pool, vol))) ++ goto cleanup; ++ ++ if ((fd = mkostemp(secretPath, O_CLOEXEC)) < 0) { ++ virReportSystemError(errno, "%s", ++ _("failed to open luks secret file for write")); ++ goto error; ++ } ++ ++ if (virSecretGetSecretString(conn, &enc->secrets[0]->seclookupdef, ++ VIR_SECRET_USAGE_TYPE_VOLUME, ++ &secret, &secretlen) < 0) ++ goto error; ++ ++ if (safewrite(fd, secret, secretlen) < 0) { ++ virReportSystemError(errno, "%s", ++ _("failed to write luks secret file")); ++ goto error; ++ } ++ VIR_FORCE_CLOSE(fd); ++ ++ if ((vol->target.perms->uid != (uid_t) -1) && ++ (vol->target.perms->gid != (gid_t) -1)) { ++ if (chown(secretPath, vol->target.perms->uid, ++ vol->target.perms->gid) < 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("failed to chown luks secret file")); ++ goto error; ++ } ++ } ++ ++ cleanup: ++ VIR_DISPOSE_N(secret, secretlen); ++ VIR_FORCE_CLOSE(fd); ++ ++ return secretPath; ++ ++ error: ++ unlink(secretPath); ++ VIR_FREE(secretPath); ++ goto cleanup; ++} ++ ++ + int + virStorageBackendCreateQemuImg(virConnectPtr conn, + virStoragePoolObjPtr pool, +@@ -1251,6 +1429,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, + char *create_tool; + int imgformat; + virCommandPtr cmd; ++ char *secretPath = NULL; + + virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, -1); + +@@ -1266,8 +1445,15 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, + if (imgformat < 0) + goto cleanup; + ++ if (vol->target.format == VIR_STORAGE_FILE_LUKS) { ++ if (!(secretPath = ++ virStorageBackendCreateQemuImgSecretPath(conn, pool, vol))) ++ goto cleanup; ++ } ++ + cmd = virStorageBackendCreateQemuImgCmdFromVol(conn, pool, vol, inputvol, +- flags, create_tool, imgformat); ++ flags, create_tool, ++ imgformat, secretPath); + if (!cmd) + goto cleanup; + +@@ -1275,6 +1461,10 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, + + virCommandFree(cmd); + cleanup: ++ if (secretPath) { ++ unlink(secretPath); ++ VIR_FREE(secretPath); ++ } + VIR_FREE(create_tool); + return ret; + } +diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h +index 5bc622c..28e1a65 100644 +--- a/src/storage/storage_backend.h ++++ b/src/storage/storage_backend.h +@@ -241,7 +241,8 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + virStorageVolDefPtr inputvol, + unsigned int flags, + const char *create_tool, +- int imgformat); ++ int imgformat, ++ const char *secretPath); + + /* ------- virStorageFile backends ------------ */ + typedef struct _virStorageFileBackend virStorageFileBackend; +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 79a4292..7d181e1 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -155,3 +155,61 @@ virQEMUBuildBufferEscapeComma(virBufferPtr buf, const char *str) + { + virBufferEscape(buf, ',', ",", "%s", str); + } ++ ++ ++/** ++ * virQEMUBuildLuksOpts: ++ * @buf: buffer to build the string into ++ * @enc: pointer to encryption info ++ * @alias: alias to use ++ * ++ * Generate the string for id=$alias and any encryption options for ++ * into the buffer. ++ * ++ * Important note, a trailing comma (",") is built into the return since ++ * it's expected other arguments are appended after the id=$alias string. ++ * So either turn something like: ++ * ++ * "key-secret=$alias," ++ * ++ * or ++ * "key-secret=$alias,cipher-alg=twofish-256,cipher-mode=cbc, ++ * hash-alg=sha256,ivgen-alg=plain64,igven-hash-alg=sha256," ++ * ++ */ ++void ++virQEMUBuildLuksOpts(virBufferPtr buf, ++ virStorageEncryptionInfoDefPtr enc, ++ const char *alias) ++{ ++ virBufferAsprintf(buf, "key-secret=%s,", alias); ++ ++ if (!enc->cipher_name) ++ return; ++ ++ virBufferAddLit(buf, "cipher-alg="); ++ virQEMUBuildBufferEscapeComma(buf, enc->cipher_name); ++ virBufferAsprintf(buf, "-%u,", enc->cipher_size); ++ if (enc->cipher_mode) { ++ virBufferAddLit(buf, "cipher-mode="); ++ virQEMUBuildBufferEscapeComma(buf, enc->cipher_mode); ++ virBufferAddLit(buf, ","); ++ } ++ if (enc->cipher_hash) { ++ virBufferAddLit(buf, "hash-alg="); ++ virQEMUBuildBufferEscapeComma(buf, enc->cipher_hash); ++ virBufferAddLit(buf, ","); ++ } ++ if (!enc->ivgen_name) ++ return; ++ ++ virBufferAddLit(buf, "ivgen-alg="); ++ virQEMUBuildBufferEscapeComma(buf, enc->ivgen_name); ++ virBufferAddLit(buf, ","); ++ ++ if (enc->ivgen_hash) { ++ virBufferAddLit(buf, "ivgen-hash-alg="); ++ virQEMUBuildBufferEscapeComma(buf, enc->ivgen_hash); ++ virBufferAddLit(buf, ","); ++ } ++} +diff --git a/src/util/virqemu.h b/src/util/virqemu.h +index 1033412..eb75d1b 100644 +--- a/src/util/virqemu.h ++++ b/src/util/virqemu.h +@@ -27,10 +27,16 @@ + # include "internal.h" + # include "virbuffer.h" + # include "virjson.h" ++# include "virstorageencryption.h" + + char *virQEMUBuildObjectCommandlineFromJSON(const char *type, + const char *alias, + virJSONValuePtr props); + + void virQEMUBuildBufferEscapeComma(virBufferPtr buf, const char *str); ++void virQEMUBuildLuksOpts(virBufferPtr buf, ++ virStorageEncryptionInfoDefPtr enc, ++ const char *alias) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); ++ + #endif /* __VIR_QEMU_H_ */ +diff --git a/tests/storagevolxml2argvtest.c b/tests/storagevolxml2argvtest.c +index ccfe9ab..e300821 100644 +--- a/tests/storagevolxml2argvtest.c ++++ b/tests/storagevolxml2argvtest.c +@@ -83,7 +83,8 @@ testCompareXMLToArgvFiles(bool shouldFail, + + cmd = virStorageBackendCreateQemuImgCmdFromVol(conn, &poolobj, vol, + inputvol, flags, +- create_tool, imgformat); ++ create_tool, imgformat, ++ NULL); + if (!cmd) { + if (shouldFail) { + virResetLastError(); +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-Correct-the-mode-check.patch b/SOURCES/libvirt-storage-Correct-the-mode-check.patch deleted file mode 100644 index f4ba41d..0000000 --- a/SOURCES/libvirt-storage-Correct-the-mode-check.patch +++ /dev/null @@ -1,54 +0,0 @@ -From daa456afc0c24778737ead358c30c042634c421b Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Wed, 2 Sep 2015 09:55:14 -0400 -Subject: [PATCH] storage: Correct the 'mode' check - -https://bugzilla.redhat.com/show_bug.cgi?id=1253609 - -Commit id '7c2d65dde2' changed the default value of mode to be -1 if not -supplied in the XML, which should cause creation of the volume using the -default mode of VIR_STORAGE_DEFAULT_VOL_PERM_MODE; however, the check -made was whether mode was '0' or not to use default or provided value. - -This patch fixes the issue to check if the 'mode' was provided in the XML -and use that value. - -(cherry picked from commit 691dd388aee99f8b06177540303b690586d5f5b3) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/storage/storage_backend.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c -index ce59f63..c07b58c 100644 ---- a/src/storage/storage_backend.c -+++ b/src/storage/storage_backend.c -@@ -479,6 +479,7 @@ virStorageBackendCreateRaw(virConnectPtr conn ATTRIBUTE_UNUSED, - int fd = -1; - int operation_flags; - bool reflink_copy = false; -+ mode_t open_mode = VIR_STORAGE_DEFAULT_VOL_PERM_MODE; - - virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA | - VIR_STORAGE_VOL_CREATE_REFLINK, -@@ -511,11 +512,12 @@ virStorageBackendCreateRaw(virConnectPtr conn ATTRIBUTE_UNUSED, - if (pool->def->type == VIR_STORAGE_POOL_NETFS) - operation_flags |= VIR_FILE_OPEN_FORK; - -+ if (vol->target.perms->mode != (mode_t) -1) -+ open_mode = vol->target.perms->mode; -+ - if ((fd = virFileOpenAs(vol->target.path, - O_RDWR | O_CREAT | O_EXCL, -- (vol->target.perms->mode ? -- VIR_STORAGE_DEFAULT_VOL_PERM_MODE : -- vol->target.perms->mode), -+ open_mode, - vol->target.perms->uid, - vol->target.perms->gid, - operation_flags)) < 0) { --- -2.5.1 - diff --git a/SOURCES/libvirt-storage-Document-wiping-formatted-volume-types.patch b/SOURCES/libvirt-storage-Document-wiping-formatted-volume-types.patch new file mode 100644 index 0000000..5eb3832 --- /dev/null +++ b/SOURCES/libvirt-storage-Document-wiping-formatted-volume-types.patch @@ -0,0 +1,51 @@ +From d47f085cfcfc3913f6a3091488073609af4db61a Mon Sep 17 00:00:00 2001 +Message-Id: +From: Martin Kletzander +Date: Tue, 2 Aug 2016 07:10:13 +0200 +Subject: [PATCH] storage: Document wiping formatted volume types + +When wiping a volume we just rewrite all the data of the volume, not +only the content. Since format gets overridden, we need to recreate the +volume. However we can't do that for every possible format out there. +Since it was only coded for the ploop volume type, let's document what +might be the consequences instead of forbidding it for every other +format out there. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=868771 + +Signed-off-by: Martin Kletzander +(cherry picked from commit fa4eea8063b972a600903e3441bf04415529a7e9) +Signed-off-by: Martin Kletzander +--- + src/libvirt-storage.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/src/libvirt-storage.c b/src/libvirt-storage.c +index cebe02f..48996ba 100644 +--- a/src/libvirt-storage.c ++++ b/src/libvirt-storage.c +@@ -1725,11 +1725,16 @@ virStorageVolDelete(virStorageVolPtr vol, + * @vol: pointer to storage volume + * @flags: extra flags; not used yet, so callers should always pass 0 + * +- * Ensure data previously on a volume is not accessible to future +- * reads. Also note, that depending on the actual volume +- * representation, this call may not really overwrite the +- * physical location of the volume. For instance, files stored +- * journaled, log structured, copy-on-write, versioned, and ++ * Ensure data previously on a volume is not accessible to future reads. ++ * ++ * The data to be wiped may include the format and possibly size information, ++ * so non-raw images might become raw with a different size. It is storage ++ * backend dependent whether the format and size information is regenerated ++ * once the initial volume wipe is completed. ++ * ++ * Depending on the actual volume representation, this call may not ++ * overwrite the physical location of the volume. For instance, files ++ * stored journaled, log structured, copy-on-write, versioned, and + * network file systems are known to be problematic. + * + * Returns 0 on success, or -1 on error +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-Don-t-remove-the-pool-for-buildPool-failure-in-storagePoolCreate.patch b/SOURCES/libvirt-storage-Don-t-remove-the-pool-for-buildPool-failure-in-storagePoolCreate.patch new file mode 100644 index 0000000..cece1f8 --- /dev/null +++ b/SOURCES/libvirt-storage-Don-t-remove-the-pool-for-buildPool-failure-in-storagePoolCreate.patch @@ -0,0 +1,44 @@ +From 804758be414002c97bd12dd03ec26cd867771185 Mon Sep 17 00:00:00 2001 +Message-Id: <804758be414002c97bd12dd03ec26cd867771185@dist-git> +From: John Ferlan +Date: Fri, 5 Aug 2016 09:44:05 -0400 +Subject: [PATCH] storage: Don't remove the pool for buildPool failure in + storagePoolCreate + +https://bugzilla.redhat.com/show_bug.cgi?id=1362349 + +When adding the ability to build the pool during the start pool processing +using the similar flags as buildPool processing would use, the code was +essentially cut-n-pasted from storagePoolCreateXML. However, that included +a call to virStoragePoolObjRemove which shouldn't happen within the +storagePoolCreate path since that'll remove the pool from the list of +pools only to be rediscovered if libvirtd restarts. + +So on failure, just fail and return as we should expect + +(cherry picked from commit fbfd6f2103a56df73238b023032dfb1242a4d7d5) +Signed-off-by: John Ferlan +--- + src/storage/storage_driver.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c +index cb9d578..5d26109 100644 +--- a/src/storage/storage_driver.c ++++ b/src/storage/storage_driver.c +@@ -931,11 +931,8 @@ storagePoolCreate(virStoragePoolPtr obj, + + if (build_flags || + (flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD)) { +- if (backend->buildPool(obj->conn, pool, build_flags) < 0) { +- virStoragePoolObjRemove(&driver->pools, pool); +- pool = NULL; ++ if (backend->buildPool(obj->conn, pool, build_flags) < 0) + goto cleanup; +- } + } + } + +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-Fix-a-NULL-ptr-dereference-in-virStorageBackendCreateQemuImg.patch b/SOURCES/libvirt-storage-Fix-a-NULL-ptr-dereference-in-virStorageBackendCreateQemuImg.patch new file mode 100644 index 0000000..b85ea7d --- /dev/null +++ b/SOURCES/libvirt-storage-Fix-a-NULL-ptr-dereference-in-virStorageBackendCreateQemuImg.patch @@ -0,0 +1,36 @@ +From 11b1557de30127ee20d51efa2034a0cc51f6c90b Mon Sep 17 00:00:00 2001 +Message-Id: <11b1557de30127ee20d51efa2034a0cc51f6c90b@dist-git> +From: Erik Skultety +Date: Fri, 5 Aug 2016 09:45:49 +0200 +Subject: [PATCH] storage: Fix a NULL ptr dereference in + virStorageBackendCreateQemuImg + +There was a missing check for vol->target.encryption being NULL +at one particular place (modified by commit a48c71411) which caused a crash +when user attempted to create a raw volume using a non-raw file volume as +source. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1363636 + +Signed-off-by: Erik Skultety +(cherry picked from commit 5a3558c6201dc3aaef86166edce6b5edfe6800ad) +Signed-off-by: Erik Skultety +--- + src/storage/storage_backend.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index a338d81..9b6df58 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -1459,6 +1459,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, + goto cleanup; + + if (vol->target.format == VIR_STORAGE_FILE_RAW && ++ vol->target.encryption && + vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { + if (!(secretPath = + virStorageBackendCreateQemuImgSecretPath(conn, pool, vol))) +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-Fix-error-path.patch b/SOURCES/libvirt-storage-Fix-error-path.patch new file mode 100644 index 0000000..b3c2aea --- /dev/null +++ b/SOURCES/libvirt-storage-Fix-error-path.patch @@ -0,0 +1,32 @@ +From d6d438826f7f60dcef0307fdfcf919fe8cc28aef Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:43:03 -0400 +Subject: [PATCH] storage: Fix error path + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +virStorageBackendCreateQemuImgCheckEncryption didn't return -1 if there +were no secrets. + +(cherry picked from commit 9301b46298cba8a1b741249460da9effdf7a0375) +Signed-off-by: John Ferlan +--- + src/storage/storage_backend.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index 84ef4f2..d0eaaf9 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -1063,6 +1063,7 @@ virStorageBackendCreateQemuImgCheckEncryption(int format, + if (enc->nsecrets == 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("no secret provided for luks encryption")); ++ return -1; + } + } else { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-Fix-pool-building-when-directory-already-exists.patch b/SOURCES/libvirt-storage-Fix-pool-building-when-directory-already-exists.patch deleted file mode 100644 index e64e658..0000000 --- a/SOURCES/libvirt-storage-Fix-pool-building-when-directory-already-exists.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 951bd331d71c86f606961d4ce7e2172e817b32d1 Mon Sep 17 00:00:00 2001 -Message-Id: <951bd331d71c86f606961d4ce7e2172e817b32d1@dist-git> -From: Christophe Fergeau -Date: Tue, 21 Jul 2015 09:40:04 -0400 -Subject: [PATCH] storage: Fix pool building when directory already exists - -https://bugzilla.redhat.com/show_bug.cgi?id=1244080 - -Currently, when trying to virsh pool-define/virsh pool-build a new -'dir' pool, if the target directory already exists, virsh -pool-build/virStoragePoolBuild will error out. This is a change of -behaviour compared to eg libvirt 1.2.13 - -This is caused by the wrong type being used for the dir_create_flags -variable in virStorageBackendFileSystemBuild , it's defined as a bool -but is used as a flag bit field so should be unsigned int (this matches -the type virDirCreate expects for this variable). - -This should fix https://bugzilla.gnome.org/show_bug.cgi?id=752417 (GNOME -Boxes) and https://bugzilla.redhat.com/show_bug.cgi?id=1244080 -(downstream virt-manager). - -(cherry picked from commit 60d5ed8c520462fd8fbc2d8dfac7b7c16ae5eb51) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/storage/storage_backend_fs.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c -index 0eebac3..c0ea1df 100644 ---- a/src/storage/storage_backend_fs.c -+++ b/src/storage/storage_backend_fs.c -@@ -784,7 +784,8 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED, - char *parent = NULL; - char *p = NULL; - mode_t mode; -- bool needs_create_as_uid, dir_create_flags; -+ bool needs_create_as_uid; -+ unsigned int dir_create_flags; - - virCheckFlags(VIR_STORAGE_POOL_BUILD_OVERWRITE | - VIR_STORAGE_POOL_BUILD_NO_OVERWRITE, ret); --- -2.5.0 - diff --git a/SOURCES/libvirt-storage-Fix-regression-in-storagePoolUpdateAllState.patch b/SOURCES/libvirt-storage-Fix-regression-in-storagePoolUpdateAllState.patch deleted file mode 100644 index 05bc8d2..0000000 --- a/SOURCES/libvirt-storage-Fix-regression-in-storagePoolUpdateAllState.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 60e7b3d9a02801ac76478abccec00809b6764a5a Mon Sep 17 00:00:00 2001 -Message-Id: <60e7b3d9a02801ac76478abccec00809b6764a5a@dist-git> -From: Erik Skultety -Date: Wed, 8 Jul 2015 15:30:04 +0200 -Subject: [PATCH] storage: Fix regression in storagePoolUpdateAllState - -Commit 2a31c5f0 introduced support for storage pool state XMLs, however -it also introduced a regression: - -if (!virstoragePoolObjIsActive(pool)) { - virStoragePoolObjUnlock(pool); - continue; -} - -The idea behind this was that since we've got state XMLs and the pool -wasn't marked as active by autostart routine (if the autostart flag had been -set earlier), the pool is inactive and we can leave it be and continue with -other pools. However, filesystem type pools like fs,dir, possibly netfs are -supposed to be active if the filesystem is mounted on the host. And this is -exactly where the regression occurs, e.g. pool type 'dir' which has been -previously destroyed and marked as !autostart gets filtered out -by the condition above. -The resolution should be simply to remove the condition completely, -all pools will get their 'active' flag updated by check callback and if -they do not support such callback, the logic doesn't change and such -pools will be inactive by default (e.g. RBD, even if a state XML exists). - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238610 - -(cherry picked from commit f92f31213a718e194323718cb3c667129ef1d4e8) -Signed-off-by: Erik Skultety -Signed-off-by: Jiri Denemark ---- - src/storage/storage_driver.c | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c -index e600514..d3cdbc5 100644 ---- a/src/storage/storage_driver.c -+++ b/src/storage/storage_driver.c -@@ -142,11 +142,6 @@ storagePoolUpdateAllState(void) - virStoragePoolObjPtr pool = driver->pools.objs[i]; - - virStoragePoolObjLock(pool); -- if (!virStoragePoolObjIsActive(pool)) { -- virStoragePoolObjUnlock(pool); -- continue; -- } -- - storagePoolUpdateState(pool); - virStoragePoolObjUnlock(pool); - } --- -2.4.5 - diff --git a/SOURCES/libvirt-storage-Handle-failure-from-refreshVol.patch b/SOURCES/libvirt-storage-Handle-failure-from-refreshVol.patch deleted file mode 100644 index 2238fe1..0000000 --- a/SOURCES/libvirt-storage-Handle-failure-from-refreshVol.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 79eaa4a5fde86f6d9c4b059aef5d4db6dfcf3659 Mon Sep 17 00:00:00 2001 -Message-Id: <79eaa4a5fde86f6d9c4b059aef5d4db6dfcf3659@dist-git> -From: John Ferlan -Date: Wed, 2 Sep 2015 09:55:15 -0400 -Subject: [PATCH] storage: Handle failure from refreshVol - -https://bugzilla.redhat.com/show_bug.cgi?id=1253609 - -Commit id '155ca616' added the 'refreshVol' API. In an NFS root-squash -environment it was possible that if the just created volume from XML wasn't -properly created with the right uid/gid and/or mode, then the followup -refreshVol will fail to open the volume in order to get the allocation/ -capacity values. This would leave the volume still on the server and -cause a libvirtd crash because 'voldef' would be in the pool list, but -the cleanup code would free it. - -(cherry picked from commit db9277a39bc364806e8d3e08a08fc128d59b7094) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/storage/storage_driver.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c -index b67a5d8..038c176 100644 ---- a/src/storage/storage_driver.c -+++ b/src/storage/storage_driver.c -@@ -1867,8 +1867,12 @@ storageVolCreateXML(virStoragePoolPtr obj, - } - - if (backend->refreshVol && -- backend->refreshVol(obj->conn, pool, voldef) < 0) -+ backend->refreshVol(obj->conn, pool, voldef) < 0) { -+ storageVolDeleteInternal(volobj, backend, pool, voldef, -+ 0, false); -+ voldef = NULL; - goto cleanup; -+ } - - /* Update pool metadata ignoring the disk backend since - * it updates the pool values. --- -2.5.1 - diff --git a/SOURCES/libvirt-storage-Revert-volume-obj-list-updating-after-volume-creation-4749d82a.patch b/SOURCES/libvirt-storage-Revert-volume-obj-list-updating-after-volume-creation-4749d82a.patch deleted file mode 100644 index a8b05ae..0000000 --- a/SOURCES/libvirt-storage-Revert-volume-obj-list-updating-after-volume-creation-4749d82a.patch +++ /dev/null @@ -1,92 +0,0 @@ -From dc0160fb18c2bd936a0751b9d18dd0c4f81c068a Mon Sep 17 00:00:00 2001 -Message-Id: -From: Erik Skultety -Date: Thu, 9 Jul 2015 15:11:57 +0200 -Subject: [PATCH] storage: Revert volume obj list updating after volume - creation (4749d82a) - -https://bugzilla.redhat.com/show_bug.cgi?id=1241454 - -This patch reverts commit 4749d82a which tried to tweak the logic in -volume creation. We did realloc and update our object list before we executed -volume building within a specific storage backend. If that failed, we -had to update (again) our object list to the original state as it was before the -build and delete the volume from the pool (even though it didn't exist - this -truly depends on the backend). -I misunderstood the base idea to be able to poll the status of the volume -creation using vol-info. After commit 4749d82a this wasn't possible -anymore, although no BZ has been reported yet. - -Commit 4749d82a also claimed to fix -https://bugzilla.redhat.com/show_bug.cgi?id=1223177, but commit c8be606b of the -same series as 4749d82ad (which was more of a refactor than a fix) -fixes the same issue so the revert should be pretty straightforward. -Further more, BZ https://bugzilla.redhat.com/show_bug.cgi?id=1241454 can be -fixed with this revert. - -(cherry picked from commit b5637871920c88d88a32343a13c6c1476062a6bb) -Signed-off-by: Erik Skultety -Signed-off-by: Jiri Denemark ---- - src/storage/storage_driver.c | 28 ++++++++++++++++++---------- - 1 file changed, 18 insertions(+), 10 deletions(-) - -diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c -index d3cdbc5..b67a5d8 100644 ---- a/src/storage/storage_driver.c -+++ b/src/storage/storage_driver.c -@@ -1803,6 +1803,9 @@ storageVolCreateXML(virStoragePoolPtr obj, - goto cleanup; - } - -+ if (VIR_REALLOC_N(pool->volumes.objs, -+ pool->volumes.count+1) < 0) -+ goto cleanup; - - if (!backend->createVol) { - virReportError(VIR_ERR_NO_SUPPORT, -@@ -1817,6 +1820,14 @@ storageVolCreateXML(virStoragePoolPtr obj, - if (backend->createVol(obj->conn, pool, voldef) < 0) - goto cleanup; - -+ pool->volumes.objs[pool->volumes.count++] = voldef; -+ volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name, -+ voldef->key, NULL, NULL); -+ if (!volobj) { -+ pool->volumes.count--; -+ goto cleanup; -+ } -+ - if (VIR_ALLOC(buildvoldef) < 0) { - voldef = NULL; - goto cleanup; -@@ -1845,19 +1856,16 @@ storageVolCreateXML(virStoragePoolPtr obj, - voldef->building = false; - pool->asyncjobs--; - -- if (buildret < 0) -+ if (buildret < 0) { -+ VIR_FREE(buildvoldef); -+ storageVolDeleteInternal(volobj, backend, pool, voldef, -+ 0, false); -+ voldef = NULL; - goto cleanup; -+ } -+ - } - -- if (VIR_REALLOC_N(pool->volumes.objs, -- pool->volumes.count+1) < 0) -- goto cleanup; -- -- pool->volumes.objs[pool->volumes.count++] = voldef; -- if (!(volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name, -- voldef->key, NULL, NULL))) -- goto cleanup; -- - if (backend->refreshVol && - backend->refreshVol(obj->conn, pool, voldef) < 0) - goto cleanup; --- -2.4.5 - diff --git a/SOURCES/libvirt-storage-gluster-Support-multiple-hosts-in-backend-functions.patch b/SOURCES/libvirt-storage-gluster-Support-multiple-hosts-in-backend-functions.patch new file mode 100644 index 0000000..346b652 --- /dev/null +++ b/SOURCES/libvirt-storage-gluster-Support-multiple-hosts-in-backend-functions.patch @@ -0,0 +1,139 @@ +From 1b24ff19c5af366d8cac25c4cfecd45e77d1c239 Mon Sep 17 00:00:00 2001 +Message-Id: <1b24ff19c5af366d8cac25c4cfecd45e77d1c239@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:42:01 +0200 +Subject: [PATCH] storage: gluster: Support multiple hosts in backend functions + +As gluster natively supports multiple hosts for failover reasons we can +easily add the support to the storage driver code in libvirt. + +Extract the code setting an individual host into a separate function and +call them in a loop. The new code also tries to keep the debug log +entries sane. + +(cherry picked from commit f1bbc7df4a9959e09679486c769e12f82d443d9a) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/storage/storage_backend_gluster.c | 82 ++++++++++++++++++++++------------- + 1 file changed, 51 insertions(+), 31 deletions(-) + +diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c +index eda060d..5bcbef4 100644 +--- a/src/storage/storage_backend_gluster.c ++++ b/src/storage/storage_backend_gluster.c +@@ -570,25 +570,55 @@ virStorageFileBackendGlusterDeinit(virStorageSourcePtr src) + } + + static int +-virStorageFileBackendGlusterInit(virStorageSourcePtr src) ++virStorageFileBackendGlusterInitServer(virStorageFileBackendGlusterPrivPtr priv, ++ virStorageNetHostDefPtr host) + { +- virStorageFileBackendGlusterPrivPtr priv = NULL; +- virStorageNetHostDefPtr host = &(src->hosts[0]); +- const char *hostname; ++ const char *transport = virStorageNetHostTransportTypeToString(host->transport); ++ const char *hoststr = NULL; + int port = 0; + +- if (src->nhosts != 1) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("Expected exactly 1 host for the gluster volume")); ++ switch ((virStorageNetHostTransport) host->transport) { ++ case VIR_STORAGE_NET_HOST_TRANS_RDMA: ++ case VIR_STORAGE_NET_HOST_TRANS_TCP: ++ hoststr = host->name; ++ ++ if (host->port && ++ virStrToLong_i(host->port, NULL, 10, &port) < 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("failed to parse port number '%s'"), ++ host->port); ++ return -1; ++ } ++ ++ break; ++ ++ case VIR_STORAGE_NET_HOST_TRANS_UNIX: ++ hoststr = host->socket; ++ break; ++ ++ case VIR_STORAGE_NET_HOST_TRANS_LAST: ++ break; ++ } ++ ++ VIR_DEBUG("adding gluster host for %p: transport=%s host=%s port=%d", ++ priv, transport, hoststr, port); ++ ++ if (glfs_set_volfile_server(priv->vol, transport, hoststr, port) < 0) { ++ virReportSystemError(errno, ++ _("failed to set gluster volfile server '%s'"), ++ hoststr); + return -1; + } + +- hostname = host->name; ++ return 0; ++} + +- VIR_DEBUG("initializing gluster storage file %p (gluster://%s:%s/%s%s)[%u:%u]", +- src, hostname, host->port ? host->port : "0", +- NULLSTR(src->volume), src->path, +- (unsigned int)src->drv->uid, (unsigned int)src->drv->gid); ++ ++static int ++virStorageFileBackendGlusterInit(virStorageSourcePtr src) ++{ ++ virStorageFileBackendGlusterPrivPtr priv = NULL; ++ size_t i; + + if (!src->volume) { + virReportError(VIR_ERR_INTERNAL_ERROR, +@@ -600,35 +630,25 @@ virStorageFileBackendGlusterInit(virStorageSourcePtr src) + if (VIR_ALLOC(priv) < 0) + return -1; + +- if (host->port && +- virStrToLong_i(host->port, NULL, 10, &port) < 0) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("failed to parse port number '%s'"), +- host->port); +- goto error; +- } +- +- if (host->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX) +- hostname = host->socket; ++ VIR_DEBUG("initializing gluster storage file %p " ++ "(priv='%p' volume='%s' path='%s') as [%u:%u]", ++ src, priv, src->volume, src->path, ++ (unsigned int)src->drv->uid, (unsigned int)src->drv->gid); + + if (!(priv->vol = glfs_new(src->volume))) { + virReportOOMError(); + goto error; + } + +- if (glfs_set_volfile_server(priv->vol, +- virStorageNetHostTransportTypeToString(host->transport), +- hostname, port) < 0) { +- virReportSystemError(errno, +- _("failed to set gluster volfile server '%s'"), +- hostname); +- goto error; ++ for (i = 0; i < src->nhosts; i++) { ++ if (virStorageFileBackendGlusterInitServer(priv, src->hosts + i) < 0) ++ goto error; + } + + if (glfs_init(priv->vol) < 0) { + virReportSystemError(errno, +- _("failed to initialize gluster connection to " +- "server: '%s'"), hostname); ++ _("failed to initialize gluster connection " ++ "(src=%p priv=%p)"), src, priv); + goto error; + } + +-- +2.9.2 + diff --git a/SOURCES/libvirt-storage-remove-luks-storage-volume-type.patch b/SOURCES/libvirt-storage-remove-luks-storage-volume-type.patch new file mode 100644 index 0000000..58e001d --- /dev/null +++ b/SOURCES/libvirt-storage-remove-luks-storage-volume-type.patch @@ -0,0 +1,762 @@ +From 356bc4759e3accc3ba25bdbbf09291be11c4107e Mon Sep 17 00:00:00 2001 +Message-Id: <356bc4759e3accc3ba25bdbbf09291be11c4107e@dist-git> +From: "Daniel P. Berrange" +Date: Tue, 2 Aug 2016 13:42:06 +0200 +Subject: [PATCH] storage: remove "luks" storage volume type + +The current LUKS support has a "luks" volume type which has +a "luks" encryption format. + +This partially makes sense if you consider the QEMU shorthand +syntax only requires you to specify a format=luks, and it'll +automagically uses "raw" as the next level driver. QEMU will +however let you override the "raw" with any other driver it +supports (vmdk, qcow, rbd, iscsi, etc, etc) + +IOW the intention though is that the "luks" encryption format +is applied to all disk formats (whether raw, qcow2, rbd, gluster +or whatever). As such it doesn't make much sense for libvirt +to say the volume type is "luks" - we should be saying that it +is a "raw" file, but with "luks" encryption applied. + +IOW, when creating a storage volume we should use this XML + + + demo.raw + 5368709120 + + + + + + + + +and when configuring a guest disk we should use + + + + + + + + + + +This commit thus removes the "luks" storage volume type added +in + + commit 318ebb36f1027b3357a32d6f781bd77d7a9043fd + Author: John Ferlan + Date: Tue Jun 21 12:59:54 2016 -0400 + + util: Add 'luks' to the FileTypeInfo + +The storage file probing code is modified so that it can probe +the actual encryption formats explicitly, rather than merely +probing existance of encryption and letting the storage driver +guess the format. + +The rest of the code is then adapted to deal with +VIR_STORAGE_FILE_RAW w/ VIR_STORAGE_ENCRYPTION_FORMAT_LUKS +instead of just VIR_STORAGE_FILE_LUKS. + +The commit mentioned above was included in libvirt v2.0.0. +So when querying volume XML this will be a change in behaviour +vs the 2.0.0 release - it'll report 'raw' instead of 'luks' +for the volume format, but still report 'luks' for encryption +format. I think this change is OK because the storage driver +did not include any support for creating volumes, nor starting +guets with luks volumes in v2.0.0 - that only since then. +Clearly if we change this we must do it before v2.1.0 though. + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit a48c714115c3cfde1aac90b75152204f9a628209) + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 +--- + docs/formatstorage.html.in | 2 +- + docs/formatstorageencryption.html.in | 2 +- + src/qemu/qemu_command.c | 10 +- + src/qemu/qemu_domain.c | 2 +- + src/qemu/qemu_hotplug.c | 2 +- + src/storage/storage_backend.c | 42 +++-- + src/storage/storage_backend_fs.c | 17 +- + src/storage/storage_backend_gluster.c | 5 - + src/util/virstoragefile.c | 198 ++++++++++++++++----- + src/util/virstoragefile.h | 1 - + tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml | 4 +- + tests/storagevolxml2xmlin/vol-luks-cipher.xml | 2 +- + tests/storagevolxml2xmlin/vol-luks.xml | 2 +- + tests/storagevolxml2xmlout/vol-luks-cipher.xml | 2 +- + tests/storagevolxml2xmlout/vol-luks.xml | 2 +- + 15 files changed, 197 insertions(+), 96 deletions(-) + +diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in +index a700e85..56b4928 100644 +--- a/docs/formatstorage.html.in ++++ b/docs/formatstorage.html.in +@@ -761,7 +761,7 @@ + <capacity unit="G">5</capacity> + <target> + <path>/var/lib/virt/images/MyLuks.img</path> +- <format type='luks'/> ++ <format type='raw'/> + <encryption format='luks'> + <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/> + </encryption> +diff --git a/docs/formatstorageencryption.html.in b/docs/formatstorageencryption.html.in +index 11af97e..1511305 100644 +--- a/docs/formatstorageencryption.html.in ++++ b/docs/formatstorageencryption.html.in +@@ -153,7 +153,7 @@ + <capacity unit='G'>5</capacity> + <target> + <path>/var/lib/libvirt/images/demo.luks</path> +- <format type='luks'/> ++ <format type='raw'/> + <encryption format='luks'> + <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/> + <cipher name='twofish' size='256' mode='cbc' hash='sha256'/> +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 0f9e2c4..b6a7798 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1305,9 +1305,13 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, + encinfo->s.aes.alias); + + if (disk->src->format > 0 && +- disk->src->type != VIR_STORAGE_TYPE_DIR) +- virBufferAsprintf(buf, "format=%s,", +- virStorageFileFormatTypeToString(disk->src->format)); ++ disk->src->type != VIR_STORAGE_TYPE_DIR) { ++ const char *qemuformat = virStorageFileFormatTypeToString(disk->src->format); ++ if (disk->src->encryption && ++ disk->src->encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) ++ qemuformat = "luks"; ++ virBufferAsprintf(buf, "format=%s,", qemuformat); ++ } + + ret = 0; + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 8ab09c7..a6a0121 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -1032,7 +1032,7 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, + } + + if (!virStorageSourceIsEmpty(src) && src->encryption && +- src->format == VIR_STORAGE_FILE_LUKS) { ++ src->encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { + + if (VIR_ALLOC(secinfo) < 0) + return -1; +diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c +index 394fdf4..f9ded35 100644 +--- a/src/qemu/qemu_hotplug.c ++++ b/src/qemu/qemu_hotplug.c +@@ -2934,7 +2934,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, + * can remove the luks object password too + */ + if (!virStorageSourceIsEmpty(disk->src) && disk->src->encryption && +- disk->src->format == VIR_STORAGE_FILE_LUKS) { ++ disk->src->encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { + + if (!(encAlias = + qemuDomainGetSecretAESAlias(disk->info.alias, true))) { +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index 8faafa4..a338d81 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -963,12 +963,7 @@ virStorageBackendCreateQemuImgOpts(virStorageEncryptionInfoDefPtr enc, + { + virBuffer buf = VIR_BUFFER_INITIALIZER; + +- if (info.format == VIR_STORAGE_FILE_LUKS) { +- if (!enc) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("missing luks encryption information")); +- goto error; +- } ++ if (info.format == VIR_STORAGE_FILE_RAW && enc) { + virQEMUBuildLuksOpts(&buf, enc, info.secretAlias); + } else { + if (info.backingPath) +@@ -1049,7 +1044,7 @@ virStorageBackendCreateQemuImgCheckEncryption(int format, + if (virStorageGenerateQcowEncryption(conn, vol) < 0) + return -1; + } +- } else if (format == VIR_STORAGE_FILE_LUKS) { ++ } else if (format == VIR_STORAGE_FILE_RAW) { + if (enc->format != VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported volume encryption format %d"), +@@ -1116,9 +1111,9 @@ virStorageBackendCreateQemuImgSetBacking(virStoragePoolObjPtr pool, + int accessRetCode = -1; + char *absolutePath = NULL; + +- if (info->format == VIR_STORAGE_FILE_LUKS) { ++ if (info->format == VIR_STORAGE_FILE_RAW) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("cannot set backing store for luks volume")); ++ _("cannot set backing store for raw volume")); + return -1; + } + +@@ -1283,10 +1278,11 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + _("format features only available with qcow2")); + return NULL; + } +- if (info.format == VIR_STORAGE_FILE_LUKS) { ++ if (info.format == VIR_STORAGE_FILE_RAW && ++ vol->target.encryption != NULL) { + if (inputvol) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("cannot use inputvol with luks volume")); ++ _("cannot use inputvol with encrypted raw volume")); + return NULL; + } + if (!info.encryption) { +@@ -1294,6 +1290,13 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + _("missing encryption description")); + return NULL; + } ++ if (vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { ++ type = "luks"; ++ } else { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("Only luks encryption is supported for raw files")); ++ return NULL; ++ } + } + + if (inputvol && +@@ -1329,7 +1332,9 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn, + if (info.backingPath) + virCommandAddArgList(cmd, "-b", info.backingPath, NULL); + +- if (info.format == VIR_STORAGE_FILE_LUKS) { ++ if (info.format == VIR_STORAGE_FILE_RAW && ++ vol->target.encryption != NULL && ++ vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { + if (virStorageBackendCreateQemuImgSecretObject(cmd, vol, &info) < 0) { + VIR_FREE(info.secretAlias); + virCommandFree(cmd); +@@ -1453,7 +1458,8 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, + if (imgformat < 0) + goto cleanup; + +- if (vol->target.format == VIR_STORAGE_FILE_LUKS) { ++ if (vol->target.format == VIR_STORAGE_FILE_RAW && ++ vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { + if (!(secretPath = + virStorageBackendCreateQemuImgSecretPath(conn, pool, vol))) + goto cleanup; +@@ -1484,13 +1490,15 @@ virStorageBackendGetBuildVolFromFunction(virStorageVolDefPtr vol, + if (!inputvol) + return NULL; + +- /* If either volume is a non-raw file vol, we need to use an external +- * tool for converting ++ /* If either volume is a non-raw file vol, or uses encryption, ++ * we need to use an external tool for converting + */ + if ((vol->type == VIR_STORAGE_VOL_FILE && +- vol->target.format != VIR_STORAGE_FILE_RAW) || ++ (vol->target.format != VIR_STORAGE_FILE_RAW || ++ vol->target.encryption != NULL)) || + (inputvol->type == VIR_STORAGE_VOL_FILE && +- inputvol->target.format != VIR_STORAGE_FILE_RAW)) { ++ (inputvol->target.format != VIR_STORAGE_FILE_RAW || ++ inputvol->target.encryption != NULL))) { + return virStorageBackendCreateQemuImg; + } + +diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c +index 0a12ecb..ac6abbb 100644 +--- a/src/storage/storage_backend_fs.c ++++ b/src/storage/storage_backend_fs.c +@@ -152,20 +152,6 @@ virStorageBackendProbeTarget(virStorageSourcePtr target, + *encryption = meta->encryption; + meta->encryption = NULL; + +- switch (target->format) { +- case VIR_STORAGE_FILE_QCOW: +- case VIR_STORAGE_FILE_QCOW2: +- (*encryption)->format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW; +- break; +- +- case VIR_STORAGE_FILE_LUKS: +- (*encryption)->format = VIR_STORAGE_ENCRYPTION_FORMAT_LUKS; +- break; +- +- case VIR_STORAGE_ENCRYPTION_FORMAT_LAST: +- break; +- } +- + /* XXX ideally we'd fill in secret UUID here + * but we cannot guarantee 'conn' is non-NULL + * at this point in time :-( So we only fill +@@ -1182,7 +1168,8 @@ _virStorageBackendFileSystemVolBuild(virConnectPtr conn, + inputvol); + if (!create_func) + return -1; +- } else if (vol->target.format == VIR_STORAGE_FILE_RAW) { ++ } else if (vol->target.format == VIR_STORAGE_FILE_RAW && ++ vol->target.encryption == NULL) { + create_func = virStorageBackendCreateRaw; + } else if (vol->target.format == VIR_STORAGE_FILE_DIR) { + create_func = createFileDir; +diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c +index 5bcbef4..8e86704 100644 +--- a/src/storage/storage_backend_gluster.c ++++ b/src/storage/storage_backend_gluster.c +@@ -318,11 +318,6 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state, + if (meta->encryption) { + vol->target.encryption = meta->encryption; + meta->encryption = NULL; +- if (vol->target.format == VIR_STORAGE_FILE_QCOW || +- vol->target.format == VIR_STORAGE_FILE_QCOW2) +- vol->target.encryption->format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW; +- if (vol->target.format == VIR_STORAGE_FILE_LUKS) +- vol->target.encryption->format = VIR_STORAGE_ENCRYPTION_FORMAT_LUKS; + } + vol->target.features = meta->features; + meta->features = NULL; +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 1612e66..6f7d131 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -44,6 +44,7 @@ + #include "dirname.h" + #include "virbuffer.h" + #include "virjson.h" ++#include "virstorageencryption.h" + + #define VIR_FROM_THIS VIR_FROM_STORAGE + +@@ -64,7 +65,7 @@ VIR_ENUM_IMPL(virStorageFileFormat, + "cloop", "dmg", "iso", + "vpc", "vdi", + /* Not direct file formats, but used for various drivers */ +- "fat", "vhd", "ploop", "luks", ++ "fat", "vhd", "ploop", + /* Formats with backing file below here */ + "cow", "qcow", "qcow2", "qed", "vmdk") + +@@ -115,6 +116,26 @@ enum { + + #define FILE_TYPE_VERSIONS_LAST 2 + ++struct FileEncryptionInfo { ++ int format; /* Encryption format to assign */ ++ ++ int magicOffset; /* Byte offset of the magic */ ++ const char *magic; /* Optional string of magic */ ++ ++ enum lv_endian endian; /* Endianness of file format */ ++ ++ int versionOffset; /* Byte offset from start of file ++ * where we find version number, ++ * -1 to always fail the version test, ++ * -2 to always pass the version test */ ++ int versionSize; /* Size in bytes of version data (0, 2, or 4) */ ++ int versionNumbers[FILE_TYPE_VERSIONS_LAST]; ++ /* Version numbers to validate. Zeroes are ignored. */ ++ ++ int modeOffset; /* Byte offset of the format native encryption mode */ ++ char modeValue; /* Value expected at offset */ ++}; ++ + /* Either 'magic' or 'extension' *must* be provided */ + struct FileTypeInfo { + int magicOffset; /* Byte offset of the magic */ +@@ -138,15 +159,14 @@ struct FileTypeInfo { + /* Store a COW base image path (possibly relative), + * or NULL if there is no COW base image, to RES; + * return BACKING_STORE_* */ +- int qcowCryptOffset; /* Byte offset from start of file +- * where to find encryption mode, +- * -1 if encryption is not used */ ++ const struct FileEncryptionInfo *cryptInfo; /* Encryption info */ + int (*getBackingStore)(char **res, int *format, + const char *buf, size_t buf_size); + int (*getFeatures)(virBitmapPtr *features, int format, + char *buf, ssize_t len); + }; + ++ + static int cowGetBackingStore(char **, int *, + const char *, size_t); + static int qcow1GetBackingStore(char **, int *, +@@ -197,19 +217,75 @@ qedGetBackingStore(char **, int *, const char *, size_t); + /* Format described by qemu commit id '3e308f20e' */ + #define LUKS_HDR_VERSION_OFFSET LUKS_HDR_MAGIC_LEN + ++static struct FileEncryptionInfo const luksEncryptionInfo[] = { ++ { ++ .format = VIR_STORAGE_ENCRYPTION_FORMAT_LUKS, ++ ++ /* Magic is 'L','U','K','S', 0xBA, 0xBE */ ++ .magicOffset = 0, ++ .magic = "\x4c\x55\x4b\x53\xba\xbe", ++ .endian = LV_BIG_ENDIAN, ++ ++ .versionOffset = LUKS_HDR_VERSION_OFFSET, ++ .versionSize = LUKS_HDR_VERSION_LEN, ++ .versionNumbers = {1}, ++ ++ .modeOffset = -1, ++ .modeValue = -1, ++ }, ++ { 0 } ++}; ++ ++static struct FileEncryptionInfo const qcow1EncryptionInfo[] = { ++ { ++ .format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW, ++ ++ .magicOffset = 0, ++ .magic = NULL, ++ .endian = LV_BIG_ENDIAN, ++ ++ .versionOffset = -1, ++ .versionSize = 0, ++ .versionNumbers = {}, ++ ++ .modeOffset = QCOW1_HDR_CRYPT, ++ .modeValue = 1, ++ }, ++ { 0 } ++}; ++ ++static struct FileEncryptionInfo const qcow2EncryptionInfo[] = { ++ { ++ .format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW, ++ ++ .magicOffset = 0, ++ .magic = NULL, ++ .endian = LV_BIG_ENDIAN, ++ ++ .versionOffset = -1, ++ .versionSize = 0, ++ .versionNumbers = {}, ++ ++ .modeOffset = QCOW2_HDR_CRYPT, ++ .modeValue = 1, ++ }, ++ { 0 } ++}; + + static struct FileTypeInfo const fileTypeInfo[] = { + [VIR_STORAGE_FILE_NONE] = { 0, NULL, NULL, LV_LITTLE_ENDIAN, +- -1, 0, {0}, 0, 0, 0, 0, NULL, NULL }, ++ -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL }, + [VIR_STORAGE_FILE_RAW] = { 0, NULL, NULL, LV_LITTLE_ENDIAN, +- -1, 0, {0}, 0, 0, 0, 0, NULL, NULL }, ++ -1, 0, {0}, 0, 0, 0, ++ luksEncryptionInfo, ++ NULL, NULL }, + [VIR_STORAGE_FILE_DIR] = { 0, NULL, NULL, LV_LITTLE_ENDIAN, +- -1, 0, {0}, 0, 0, 0, 0, NULL, NULL }, ++ -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL }, + [VIR_STORAGE_FILE_BOCHS] = { + /*"Bochs Virtual HD Image", */ /* Untested */ + 0, NULL, NULL, + LV_LITTLE_ENDIAN, 64, 4, {0x20000}, +- 32+16+16+4+4+4+4+4, 8, 1, -1, NULL, NULL ++ 32+16+16+4+4+4+4+4, 8, 1, NULL, NULL, NULL + }, + [VIR_STORAGE_FILE_CLOOP] = { + /* #!/bin/sh +@@ -218,7 +294,7 @@ static struct FileTypeInfo const fileTypeInfo[] = { + */ /* Untested */ + 0, NULL, NULL, + LV_LITTLE_ENDIAN, -1, 0, {0}, +- -1, 0, 0, -1, NULL, NULL ++ -1, 0, 0, NULL, NULL, NULL + }, + [VIR_STORAGE_FILE_DMG] = { + /* XXX QEMU says there's no magic for dmg, +@@ -226,71 +302,69 @@ static struct FileTypeInfo const fileTypeInfo[] = { + * would have to match) but then disables that check. */ + 0, NULL, ".dmg", + 0, -1, 0, {0}, +- -1, 0, 0, -1, NULL, NULL ++ -1, 0, 0, NULL, NULL, NULL + }, + [VIR_STORAGE_FILE_ISO] = { + 32769, "CD001", ".iso", + LV_LITTLE_ENDIAN, -2, 0, {0}, +- -1, 0, 0, -1, NULL, NULL ++ -1, 0, 0, NULL, NULL, NULL + }, + [VIR_STORAGE_FILE_VPC] = { + 0, "conectix", NULL, + LV_BIG_ENDIAN, 12, 4, {0x10000}, +- 8 + 4 + 4 + 8 + 4 + 4 + 2 + 2 + 4, 8, 1, -1, NULL, NULL ++ 8 + 4 + 4 + 8 + 4 + 4 + 2 + 2 + 4, 8, 1, NULL, NULL, NULL + }, + /* TODO: add getBackingStore function */ + [VIR_STORAGE_FILE_VDI] = { + 64, "\x7f\x10\xda\xbe", ".vdi", + LV_LITTLE_ENDIAN, 68, 4, {0x00010001}, +- 64 + 5 * 4 + 256 + 7 * 4, 8, 1, -1, NULL, NULL}, ++ 64 + 5 * 4 + 256 + 7 * 4, 8, 1, NULL, NULL, NULL}, + + /* Not direct file formats, but used for various drivers */ + [VIR_STORAGE_FILE_FAT] = { 0, NULL, NULL, LV_LITTLE_ENDIAN, +- -1, 0, {0}, 0, 0, 0, 0, NULL, NULL }, ++ -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL }, + [VIR_STORAGE_FILE_VHD] = { 0, NULL, NULL, LV_LITTLE_ENDIAN, +- -1, 0, {0}, 0, 0, 0, 0, NULL, NULL }, ++ -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL }, + [VIR_STORAGE_FILE_PLOOP] = { 0, "WithouFreSpacExt", NULL, LV_LITTLE_ENDIAN, + -2, 0, {0}, PLOOP_IMAGE_SIZE_OFFSET, 0, +- PLOOP_SIZE_MULTIPLIER, -1, NULL, NULL }, ++ PLOOP_SIZE_MULTIPLIER, NULL, NULL, NULL }, + +- /* Magic is 'L','U','K','S', 0xBA, 0xBE +- * Set sizeOffset = -1 and let hypervisor handle */ +- [VIR_STORAGE_FILE_LUKS] = { +- 0, "\x4c\x55\x4b\x53\xba\xbe", NULL, +- LV_BIG_ENDIAN, LUKS_HDR_VERSION_OFFSET, 2, {1}, +- -1, 0, 0, -1, NULL, NULL +- }, + /* All formats with a backing store probe below here */ + [VIR_STORAGE_FILE_COW] = { + 0, "OOOM", NULL, + LV_BIG_ENDIAN, 4, 4, {2}, +- 4+4+1024+4, 8, 1, -1, cowGetBackingStore, NULL ++ 4+4+1024+4, 8, 1, NULL, cowGetBackingStore, NULL + }, + [VIR_STORAGE_FILE_QCOW] = { + 0, "QFI", NULL, + LV_BIG_ENDIAN, 4, 4, {1}, +- QCOWX_HDR_IMAGE_SIZE, 8, 1, QCOW1_HDR_CRYPT, qcow1GetBackingStore, NULL ++ QCOWX_HDR_IMAGE_SIZE, 8, 1, ++ qcow1EncryptionInfo, ++ qcow1GetBackingStore, NULL + }, + [VIR_STORAGE_FILE_QCOW2] = { + 0, "QFI", NULL, + LV_BIG_ENDIAN, 4, 4, {2, 3}, +- QCOWX_HDR_IMAGE_SIZE, 8, 1, QCOW2_HDR_CRYPT, qcow2GetBackingStore, ++ QCOWX_HDR_IMAGE_SIZE, 8, 1, ++ qcow2EncryptionInfo, ++ qcow2GetBackingStore, + qcow2GetFeatures + }, + [VIR_STORAGE_FILE_QED] = { + /* http://wiki.qemu.org/Features/QED */ + 0, "QED", NULL, + LV_LITTLE_ENDIAN, -2, 0, {0}, +- QED_HDR_IMAGE_SIZE, 8, 1, -1, qedGetBackingStore, NULL ++ QED_HDR_IMAGE_SIZE, 8, 1, NULL, qedGetBackingStore, NULL + }, + [VIR_STORAGE_FILE_VMDK] = { + 0, "KDMV", NULL, + LV_LITTLE_ENDIAN, 4, 4, {1, 2}, +- 4+4+4, 8, 512, -1, vmdk4GetBackingStore, NULL ++ 4+4+4, 8, 512, NULL, vmdk4GetBackingStore, NULL + }, + }; + verify(ARRAY_CARDINALITY(fileTypeInfo) == VIR_STORAGE_FILE_LAST); + ++ + /* qcow2 compatible features in the order they appear on-disk */ + enum qcow2CompatibleFeature { + QCOW2_COMPATIBLE_FEATURE_LAZY_REFCOUNTS = 0, +@@ -644,7 +718,7 @@ virStorageFileMatchesVersion(int versionOffset, + char *buf, + size_t buflen) + { +- int version = 0; ++ int version; + size_t i; + + /* Validate version number info */ +@@ -808,6 +882,43 @@ qcow2GetFeatures(virBitmapPtr *features, + } + + ++static bool ++virStorageFileHasEncryptionFormat(const struct FileEncryptionInfo *info, ++ char *buf, ++ size_t len) ++{ ++ if (!info->magic && info->modeOffset == -1) ++ return 0; /* Shouldn't happen - expect at least one */ ++ ++ if (info->magic) { ++ if (!virStorageFileMatchesMagic(info->magicOffset, ++ info->magic, ++ buf, len)) ++ return false; ++ ++ if (info->versionOffset != -1 && ++ !virStorageFileMatchesVersion(info->versionOffset, ++ info->versionSize, ++ info->versionNumbers, ++ info->endian, ++ buf, len)) ++ return false; ++ ++ return true; ++ } else if (info->modeOffset != -1) { ++ if (info->modeOffset >= len) ++ return false; ++ ++ if (buf[info->modeOffset] != info->modeValue) ++ return false; ++ ++ return true; ++ } else { ++ return false; ++ } ++} ++ ++ + /* Given a header in BUF with length LEN, as parsed from the storage file + * assuming it has the given FORMAT, populate information into META + * with information about the file and its backing store. Return format +@@ -820,6 +931,7 @@ virStorageFileGetMetadataInternal(virStorageSourcePtr meta, + int *backingFormat) + { + int ret = -1; ++ size_t i; + + VIR_DEBUG("path=%s, buf=%p, len=%zu, meta->format=%d", + meta->path, buf, len, meta->format); +@@ -834,6 +946,18 @@ virStorageFileGetMetadataInternal(virStorageSourcePtr meta, + goto cleanup; + } + ++ if (fileTypeInfo[meta->format].cryptInfo != NULL) { ++ for (i = 0; fileTypeInfo[meta->format].cryptInfo[i].format != 0; i++) { ++ if (virStorageFileHasEncryptionFormat(&fileTypeInfo[meta->format].cryptInfo[i], ++ buf, len)) { ++ if (VIR_ALLOC(meta->encryption) < 0) ++ goto cleanup; ++ ++ meta->encryption->format = fileTypeInfo[meta->format].cryptInfo[i].format; ++ } ++ } ++ } ++ + /* XXX we should consider moving virStorageBackendUpdateVolInfo + * code into this method, for non-magic files + */ +@@ -858,22 +982,6 @@ virStorageFileGetMetadataInternal(virStorageSourcePtr meta, + meta->capacity *= fileTypeInfo[meta->format].sizeMultiplier; + } + +- if (fileTypeInfo[meta->format].qcowCryptOffset != -1) { +- int crypt_format; +- +- crypt_format = virReadBufInt32BE(buf + +- fileTypeInfo[meta->format].qcowCryptOffset); +- if (crypt_format && !meta->encryption && +- VIR_ALLOC(meta->encryption) < 0) +- goto cleanup; +- } +- +- if (meta->format == VIR_STORAGE_FILE_LUKS) { +- /* By definition, this is encrypted */ +- if (!meta->encryption && VIR_ALLOC(meta->encryption) < 0) +- goto cleanup; +- } +- + VIR_FREE(meta->backingStoreRaw); + if (fileTypeInfo[meta->format].getBackingStore != NULL) { + int store = fileTypeInfo[meta->format].getBackingStore(&meta->backingStoreRaw, +diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h +index 3ea3a60..3d09468 100644 +--- a/src/util/virstoragefile.h ++++ b/src/util/virstoragefile.h +@@ -74,7 +74,6 @@ typedef enum { + VIR_STORAGE_FILE_FAT, + VIR_STORAGE_FILE_VHD, + VIR_STORAGE_FILE_PLOOP, +- VIR_STORAGE_FILE_LUKS, + + /* Not a format, but a marker: all formats below this point have + * libvirt support for following a backing chain */ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml +index 4c9c4c7..3ae0a40 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml +@@ -15,7 +15,7 @@ + + /usr/bin/qemu + +- ++ + + + +@@ -24,7 +24,7 @@ +
+ + +- ++ + + + +diff --git a/tests/storagevolxml2xmlin/vol-luks-cipher.xml b/tests/storagevolxml2xmlin/vol-luks-cipher.xml +index da28a27..94789c6 100644 +--- a/tests/storagevolxml2xmlin/vol-luks-cipher.xml ++++ b/tests/storagevolxml2xmlin/vol-luks-cipher.xml +@@ -7,7 +7,7 @@ + 294912 + + /var/lib/libvirt/images/LuksDemo.img +- ++ + + 0644 + 0 +diff --git a/tests/storagevolxml2xmlin/vol-luks.xml b/tests/storagevolxml2xmlin/vol-luks.xml +index bf3c519..9ab1429 100644 +--- a/tests/storagevolxml2xmlin/vol-luks.xml ++++ b/tests/storagevolxml2xmlin/vol-luks.xml +@@ -7,7 +7,7 @@ + 294912 + + /var/lib/libvirt/images/LuksDemo.img +- ++ + + 0644 + 0 +diff --git a/tests/storagevolxml2xmlout/vol-luks-cipher.xml b/tests/storagevolxml2xmlout/vol-luks-cipher.xml +index 1ac7424..2b58850 100644 +--- a/tests/storagevolxml2xmlout/vol-luks-cipher.xml ++++ b/tests/storagevolxml2xmlout/vol-luks-cipher.xml +@@ -7,7 +7,7 @@ + 294912 + + /var/lib/libvirt/images/LuksDemo.img +- ++ + + 0644 + 0 +diff --git a/tests/storagevolxml2xmlout/vol-luks.xml b/tests/storagevolxml2xmlout/vol-luks.xml +index 7b82866..599b3c5 100644 +--- a/tests/storagevolxml2xmlout/vol-luks.xml ++++ b/tests/storagevolxml2xmlout/vol-luks.xml +@@ -7,7 +7,7 @@ + 294912 + + /var/lib/libvirt/images/LuksDemo.img +- ++ + + 0644 + 0 +-- +2.9.2 + diff --git a/SOURCES/libvirt-systemd-Add-virSystemdGetMachineNameByPID.patch b/SOURCES/libvirt-systemd-Add-virSystemdGetMachineNameByPID.patch deleted file mode 100644 index b98184e..0000000 --- a/SOURCES/libvirt-systemd-Add-virSystemdGetMachineNameByPID.patch +++ /dev/null @@ -1,190 +0,0 @@ -From 108e6134a8f61d2c809b7d0e423fba4a5f796e00 Mon Sep 17 00:00:00 2001 -Message-Id: <108e6134a8f61d2c809b7d0e423fba4a5f796e00@dist-git> -From: Martin Kletzander -Date: Tue, 16 Feb 2016 11:55:08 +0100 -Subject: [PATCH] systemd: Add virSystemdGetMachineNameByPID - -https://bugzilla.redhat.com/show_bug.cgi?id=1308494 - -Signed-off-by: Martin Kletzander -(cherry picked from commit 92757d4d2d108cf612916928e733739d40a31942) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/util/virsystemd.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/util/virsystemd.h | 2 ++ - tests/virsystemdtest.c | 46 +++++++++++++++++++++++++++++++++++++++ - 4 files changed, 105 insertions(+) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 16ae24f..4ad9266 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -2228,6 +2228,7 @@ virSystemdCanHibernate; - virSystemdCanHybridSleep; - virSystemdCanSuspend; - virSystemdCreateMachine; -+virSystemdGetMachineNameByPID; - virSystemdMakeMachineName; - virSystemdMakeScopeName; - virSystemdMakeSliceName; -diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c -index 0c8f026..daaa37c 100644 ---- a/src/util/virsystemd.c -+++ b/src/util/virsystemd.c -@@ -113,6 +113,7 @@ char *virSystemdMakeSliceName(const char *partition) - return virBufferContentAndReset(&buf); - } - -+ - char *virSystemdMakeMachineName(const char *name, - const char *drivername, - bool privileged) -@@ -139,6 +140,61 @@ char *virSystemdMakeMachineName(const char *name, - return machinename; - } - -+ -+char * -+virSystemdGetMachineNameByPID(pid_t pid) -+{ -+ DBusConnection *conn; -+ DBusMessage *reply; -+ char *name = NULL, *object = NULL; -+ -+ if (virDBusIsServiceEnabled("org.freedesktop.machine1") < 0) -+ goto cleanup; -+ -+ if (virDBusIsServiceRegistered("org.freedesktop.systemd1") < 0) -+ goto cleanup; -+ -+ if (!(conn = virDBusGetSystemBus())) -+ goto cleanup; -+ -+ if (virDBusCallMethod(conn, &reply, NULL, -+ "org.freedesktop.machine1", -+ "/org/freedesktop/machine1", -+ "org.freedesktop.machine1.Manager", -+ "GetMachineByPID", -+ "u", pid) < 0) -+ goto cleanup; -+ -+ if (virDBusMessageRead(reply, "o", &object) < 0) -+ goto cleanup; -+ -+ VIR_DEBUG("Domain with pid %llu has object path '%s'", -+ (unsigned long long)pid, object); -+ -+ if (virDBusCallMethod(conn, &reply, NULL, -+ "org.freedesktop.machine1", -+ object, -+ "org.freedesktop.DBus.Properties", -+ "Get", -+ "ss", -+ "org.freedesktop.machine1.Machine", -+ "Name") < 0) -+ goto cleanup; -+ -+ if (virDBusMessageRead(reply, "v", "s", &name) < 0) -+ goto cleanup; -+ -+ VIR_DEBUG("Domain with pid %llu has machine name '%s'", -+ (unsigned long long)pid, name); -+ -+ cleanup: -+ VIR_FREE(object); -+ dbus_message_unref(reply); -+ -+ return name; -+} -+ -+ - /** - * virSystemdCreateMachine: - * @name: driver unique name of the machine -diff --git a/src/util/virsystemd.h b/src/util/virsystemd.h -index 8af2169..a13a4c0 100644 ---- a/src/util/virsystemd.h -+++ b/src/util/virsystemd.h -@@ -55,4 +55,6 @@ int virSystemdCanHibernate(bool *result); - - int virSystemdCanHybridSleep(bool *result); - -+char *virSystemdGetMachineNameByPID(pid_t pid); -+ - #endif /* __VIR_SYSTEMD_H__ */ -diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c -index 06fec54..3a3cd99 100644 ---- a/tests/virsystemdtest.c -+++ b/tests/virsystemdtest.c -@@ -54,6 +54,31 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block, - "Something went wrong creating the machine"); - } else { - reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN); -+ -+ if (STREQ(member, "GetMachineByPID")) { -+ const char *object_path = "/org/freedesktop/machine1/machine/qemu_2ddemo"; -+ DBusMessageIter iter; -+ -+ dbus_message_iter_init_append(reply, &iter); -+ if (!dbus_message_iter_append_basic(&iter, -+ DBUS_TYPE_OBJECT_PATH, -+ &object_path)) -+ goto error; -+ } else if (STREQ(member, "Get")) { -+ const char *name = "qemu-demo"; -+ DBusMessageIter iter; -+ DBusMessageIter sub; -+ -+ dbus_message_iter_init_append(reply, &iter); -+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, -+ "s", &sub); -+ -+ if (!dbus_message_iter_append_basic(&sub, -+ DBUS_TYPE_STRING, -+ &name)) -+ goto error; -+ dbus_message_iter_close_container(&iter, &sub); -+ } - } - } else if (STREQ(service, "org.freedesktop.login1")) { - char *supported = getenv("RESULT_SUPPORT"); -@@ -338,6 +363,25 @@ static int testCreateNetwork(const void *opaque ATTRIBUTE_UNUSED) - } - - -+static int -+testGetMachineName(const void *opaque ATTRIBUTE_UNUSED) -+{ -+ char *tmp = virSystemdGetMachineNameByPID(1234); -+ int ret = -1; -+ -+ if (!tmp) { -+ fprintf(stderr, "%s", "Failed to create LXC machine\n"); -+ return ret; -+ } -+ -+ if (STREQ(tmp, "qemu-demo")) -+ ret = 0; -+ -+ VIR_FREE(tmp); -+ return ret; -+} -+ -+ - struct testNameData { - const char *name; - const char *expected; -@@ -491,6 +535,8 @@ mymain(void) - ret = -1; - if (virtTestRun("Test create with network ", testCreateNetwork, NULL) < 0) - ret = -1; -+ if (virtTestRun("Test getting machine name ", testGetMachineName, NULL) < 0) -+ ret = -1; - - # define TEST_SCOPE(name, unitname) \ - do { \ --- -2.7.2 - diff --git a/SOURCES/libvirt-systemd-Escape-machine-name-for-machined.patch b/SOURCES/libvirt-systemd-Escape-machine-name-for-machined.patch deleted file mode 100644 index f9f055c..0000000 --- a/SOURCES/libvirt-systemd-Escape-machine-name-for-machined.patch +++ /dev/null @@ -1,141 +0,0 @@ -From 81d3458e0534b76bc2de780b0b03428b383fb270 Mon Sep 17 00:00:00 2001 -Message-Id: <81d3458e0534b76bc2de780b0b03428b383fb270@dist-git> -From: Martin Kletzander -Date: Tue, 16 Feb 2016 11:55:07 +0100 -Subject: [PATCH] systemd: Escape machine name for machined - -https://bugzilla.redhat.com/show_bug.cgi?id=1308494 - -According to the documentation, CreateMachine accepts only 7bit ASCII -characters in the machinename parameter, so let's make sure we can start -machines with unicode names with systemd. We already have a function -for that, we just forgot to use it. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1062943 -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1282846 - -Signed-off-by: Martin Kletzander -(cherry picked from commit e24eda48cfae84a9003456b68eaf753a26123639) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/util/virsystemd.c | 12 ++++++++---- - tests/virsystemdtest.c | 45 ++++++++++++++++++++++++++++++++++++++++++--- - 2 files changed, 50 insertions(+), 7 deletions(-) - -diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c -index 54c409d..0c8f026 100644 ---- a/src/util/virsystemd.c -+++ b/src/util/virsystemd.c -@@ -119,16 +119,20 @@ char *virSystemdMakeMachineName(const char *name, - { - char *machinename = NULL; - char *username = NULL; -+ virBuffer buf = VIR_BUFFER_INITIALIZER; -+ - if (privileged) { -- if (virAsprintf(&machinename, "%s-%s", drivername, name) < 0) -- goto cleanup; -+ virBufferAsprintf(&buf, "%s-", drivername); - } else { - if (!(username = virGetUserName(geteuid()))) - goto cleanup; -- if (virAsprintf(&machinename, "%s-%s-%s", username, drivername, name) < 0) -- goto cleanup; -+ -+ virBufferAsprintf(&buf, "%s-%s-", username, drivername); - } - -+ virSystemdEscapeName(&buf, name); -+ -+ machinename = virBufferContentAndReset(&buf); - cleanup: - VIR_FREE(username); - -diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c -index d0b9335..06fec54 100644 ---- a/tests/virsystemdtest.c -+++ b/tests/virsystemdtest.c -@@ -338,7 +338,7 @@ static int testCreateNetwork(const void *opaque ATTRIBUTE_UNUSED) - } - - --struct testScopeData { -+struct testNameData { - const char *name; - const char *expected; - }; -@@ -346,7 +346,7 @@ struct testScopeData { - static int - testScopeName(const void *opaque) - { -- const struct testScopeData *data = opaque; -+ const struct testNameData *data = opaque; - int ret = -1; - char *actual = NULL; - -@@ -366,6 +366,29 @@ testScopeName(const void *opaque) - return ret; - } - -+static int -+testMachineName(const void *opaque) -+{ -+ const struct testNameData *data = opaque; -+ int ret = -1; -+ char *actual = NULL; -+ -+ if (!(actual = virSystemdMakeMachineName(data->name, "qemu", true))) -+ goto cleanup; -+ -+ if (STRNEQ(actual, data->expected)) { -+ fprintf(stderr, "Expected '%s' but got '%s'\n", -+ data->expected, actual); -+ goto cleanup; -+ } -+ -+ ret = 0; -+ -+ cleanup: -+ VIR_FREE(actual); -+ return ret; -+} -+ - typedef int (*virSystemdCanHelper)(bool * result); - struct testPMSupportData { - virSystemdCanHelper tested; -@@ -471,7 +494,7 @@ mymain(void) - - # define TEST_SCOPE(name, unitname) \ - do { \ -- struct testScopeData data = { \ -+ struct testNameData data = { \ - name, unitname \ - }; \ - if (virtTestRun("Test scopename", testScopeName, &data) < 0) \ -@@ -482,6 +505,22 @@ mymain(void) - TEST_SCOPE("demo-name", "machine-lxc\\x2ddemo\\x2dname.scope"); - TEST_SCOPE("demo!name", "machine-lxc\\x2ddemo\\x21name.scope"); - TEST_SCOPE(".demo", "machine-lxc\\x2d\\x2edemo.scope"); -+ TEST_SCOPE("bull💩", "machine-lxc\\x2dbull\\xf0\\x9f\\x92\\xa9.scope"); -+ -+# define TEST_MACHINE(name, machinename) \ -+ do { \ -+ struct testNameData data = { \ -+ name, machinename \ -+ }; \ -+ if (virtTestRun("Test scopename", testMachineName, &data) < 0) \ -+ ret = -1; \ -+ } while (0) -+ -+ TEST_MACHINE("demo", "qemu-demo"); -+ TEST_MACHINE("demo-name", "qemu-demo\\x2dname"); -+ TEST_MACHINE("demo!name", "qemu-demo\\x21name"); -+ TEST_MACHINE(".demo", "qemu-\\x2edemo"); -+ TEST_MACHINE("bull\U0001f4a9", "qemu-bull\\xf0\\x9f\\x92\\xa9"); - - # define TESTS_PM_SUPPORT_HELPER(name, function) \ - do { \ --- -2.7.2 - diff --git a/SOURCES/libvirt-systemd-Modernize-machine-naming.patch b/SOURCES/libvirt-systemd-Modernize-machine-naming.patch deleted file mode 100644 index be1046c..0000000 --- a/SOURCES/libvirt-systemd-Modernize-machine-naming.patch +++ /dev/null @@ -1,905 +0,0 @@ -From fdceac0494012ade9dddac2afe2965538f26206e Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Tue, 16 Feb 2016 11:55:09 +0100 -Subject: [PATCH] systemd: Modernize machine naming - -https://bugzilla.redhat.com/show_bug.cgi?id=1308494 - -So, systemd-machined has this philosophy that machine names are like -hostnames and hence should follow the same rules. But we always allowed -international characters in domain names. Thus we need to modify the -machine name we are passing to systemd. - -In order to change some machine names that we will be passing to systemd, -we also need to call TerminateMachine at the end of a lifetime of a -domain. Even for domains that were started with older libvirt. That -can be achieved thanks to virSystemdGetMachineNameByPID(). And because -we can change machine names, we can get rid of the inconsistent and -pointless escaping of domain names when creating machine names. - -So this patch modifies the naming in the following way. It creates the -name as -- where invalid hostname characters are -stripped out of the name and if the resulting name is longer, it -truncates it to 64 characters. That way we can start domains we -couldn't start before. Well, at least on systemd. - -To make it work all together, the machineName (which is needed only with -systemd) is saved in domain's private data. That way the generation is -moved to the driver and we don't need to pass various unnecessary -arguments to cgroup functions. - -The only thing this complicates a bit is the scope generation when -validating a cgroup where we must check both old and new naming, so a -slight modification was needed there. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1282846 - -Signed-off-by: Martin Kletzander -(cherry picked from commit c3bd0019c0e3f080dbf0d4bd08245ffb2daa2765) -Signed-off-by: Martin Kletzander - -Conflicts: - src/qemu/qemu_process.c - fe422b673b4b8 (context) - -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/lxc/lxc_cgroup.c | 13 +++++++-- - src/lxc/lxc_domain.h | 1 + - src/lxc/lxc_process.c | 20 +++++++++---- - src/qemu/qemu_cgroup.c | 28 +++++++++++++----- - src/qemu/qemu_cgroup.h | 2 +- - src/qemu/qemu_domain.h | 1 + - src/qemu/qemu_process.c | 4 +-- - src/util/vircgroup.c | 59 ++++++++++++++++++++++++-------------- - src/util/vircgroup.h | 12 ++++---- - src/util/virsystemd.c | 75 +++++++++++++++++++++++++++++++++---------------- - src/util/virsystemd.h | 13 ++++----- - tests/virsystemdtest.c | 67 +++++++++++++++++++++++++------------------ - 12 files changed, 191 insertions(+), 104 deletions(-) - -diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c -index ad254e4..3148946 100644 ---- a/src/lxc/lxc_cgroup.c -+++ b/src/lxc/lxc_cgroup.c -@@ -29,6 +29,7 @@ - #include "viralloc.h" - #include "vircgroup.h" - #include "virstring.h" -+#include "virsystemd.h" - - #define VIR_FROM_THIS VIR_FROM_LXC - -@@ -483,6 +484,13 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def, - int *nicindexes) - { - virCgroupPtr cgroup = NULL; -+ char *machineName = virSystemdMakeMachineName("lxc", -+ def->id, -+ def->name, -+ true); -+ -+ if (!machineName) -+ goto cleanup; - - if (def->resource->partition[0] != '/') { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -@@ -491,9 +499,8 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def, - goto cleanup; - } - -- if (virCgroupNewMachine(def->name, -+ if (virCgroupNewMachine(machineName, - "lxc", -- true, - def->uuid, - NULL, - initpid, -@@ -517,6 +524,8 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def, - } - - cleanup: -+ VIR_FREE(machineName); -+ - return cgroup; - } - -diff --git a/src/lxc/lxc_domain.h b/src/lxc/lxc_domain.h -index 751aece..a9e319c 100644 ---- a/src/lxc/lxc_domain.h -+++ b/src/lxc/lxc_domain.h -@@ -39,6 +39,7 @@ struct _virLXCDomainObjPrivate { - pid_t initpid; - - virCgroupPtr cgroup; -+ char *machineName; - }; - - extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks; -diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c -index 87ee484..2eaad7d 100644 ---- a/src/lxc/lxc_process.c -+++ b/src/lxc/lxc_process.c -@@ -216,8 +216,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, - * properly. See https://bugs.freedesktop.org/show_bug.cgi?id=68370 for - * the bug we are working around here. - */ -- virSystemdTerminateMachine(vm->def->name, "lxc", true); -- -+ virCgroupTerminateMachine(priv->machineName); - - /* The "release" hook cleans up additional resources */ - if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { -@@ -1318,8 +1317,9 @@ int virLXCProcessStart(virConnectPtr conn, - * point so lets detect that first, since it gives us a - * more reliable way to kill everything off if something - * goes wrong from here onwards ... */ -- if (virCgroupNewDetectMachine(vm->def->name, "lxc", vm->pid, -- -1, &priv->cgroup) < 0) -+ if (virCgroupNewDetectMachine(vm->def->name, "lxc", -+ vm->def->id, true, -+ vm->pid, -1, &priv->cgroup) < 0) - goto cleanup; - - if (!priv->cgroup) { -@@ -1329,6 +1329,11 @@ int virLXCProcessStart(virConnectPtr conn, - goto cleanup; - } - -+ /* Get the machine name so we can properly delete it through -+ * systemd later */ -+ if (!(priv->machineName = virSystemdGetMachineNameByPID(vm->pid))) -+ virResetLastError(); -+ - /* And we can get the first monitor connection now too */ - if (!(priv->monitor = virLXCProcessConnectMonitor(driver, vm))) { - /* Intentionally overwrite the real monitor error message, -@@ -1501,8 +1506,8 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm, - if (!(priv->monitor = virLXCProcessConnectMonitor(driver, vm))) - goto error; - -- if (virCgroupNewDetectMachine(vm->def->name, "lxc", vm->pid, -- -1, &priv->cgroup) < 0) -+ if (virCgroupNewDetectMachine(vm->def->name, "lxc", vm->def->id, true, -+ vm->pid, -1, &priv->cgroup) < 0) - goto error; - - if (!priv->cgroup) { -@@ -1512,6 +1517,9 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm, - goto error; - } - -+ if (!(priv->machineName = virSystemdGetMachineNameByPID(vm->pid))) -+ virResetLastError(); -+ - if (virLXCUpdateActiveUSBHostdevs(driver, vm->def) < 0) - goto error; - -diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c -index 0da6c02..448183f 100644 ---- a/src/qemu/qemu_cgroup.c -+++ b/src/qemu/qemu_cgroup.c -@@ -36,6 +36,7 @@ - #include "virfile.h" - #include "virtypedparam.h" - #include "virnuma.h" -+#include "virsystemd.h" - - #define VIR_FROM_THIS VIR_FROM_QEMU - -@@ -753,9 +754,19 @@ qemuInitCgroup(virQEMUDriverPtr driver, - goto cleanup; - } - -- if (virCgroupNewMachine(vm->def->name, -+ /* -+ * We need to do this because of systemd-machined, because -+ * CreateMachine requires the name to be a valid hostname. -+ */ -+ priv->machineName = virSystemdMakeMachineName("qemu", -+ vm->def->id, -+ vm->def->name, -+ virQEMUDriverIsPrivileged(driver)); -+ if (!priv->machineName) -+ goto cleanup; -+ -+ if (virCgroupNewMachine(priv->machineName, - "qemu", -- true, - vm->def->uuid, - NULL, - vm->pid, -@@ -864,11 +875,17 @@ qemuConnectCgroup(virQEMUDriverPtr driver, - - if (virCgroupNewDetectMachine(vm->def->name, - "qemu", -+ vm->def->id, -+ virQEMUDriverIsPrivileged(driver), - vm->pid, - cfg->cgroupControllers, - &priv->cgroup) < 0) - goto cleanup; - -+ priv->machineName = virSystemdGetMachineNameByPID(vm->pid); -+ if (!priv->machineName) -+ virResetLastError(); -+ - qemuRestoreCgroupState(vm); - - done: -@@ -1250,17 +1267,14 @@ qemuSetupCgroupForIOThreads(virDomainObjPtr vm) - } - - int --qemuRemoveCgroup(virQEMUDriverPtr driver, -- virDomainObjPtr vm) -+qemuRemoveCgroup(virDomainObjPtr vm) - { - qemuDomainObjPrivatePtr priv = vm->privateData; - - if (priv->cgroup == NULL) - return 0; /* Not supported, so claim success */ - -- if (virCgroupTerminateMachine(vm->def->name, -- "qemu", -- virQEMUDriverIsPrivileged(driver)) < 0) { -+ if (virCgroupTerminateMachine(priv->machineName) < 0) { - if (!virCgroupNewIgnoreError()) - VIR_DEBUG("Failed to terminate cgroup for %s", vm->def->name); - } -diff --git a/src/qemu/qemu_cgroup.h b/src/qemu/qemu_cgroup.h -index 711a6de..3fc313f 100644 ---- a/src/qemu/qemu_cgroup.h -+++ b/src/qemu/qemu_cgroup.h -@@ -56,7 +56,7 @@ int qemuSetupCgroupCpusetCpus(virCgroupPtr cgroup, virBitmapPtr cpumask); - int qemuSetupCgroupForVcpu(virDomainObjPtr vm); - int qemuSetupCgroupForIOThreads(virDomainObjPtr vm); - int qemuSetupCgroupForEmulator(virDomainObjPtr vm); --int qemuRemoveCgroup(virQEMUDriverPtr driver, virDomainObjPtr vm); -+int qemuRemoveCgroup(virDomainObjPtr vm); - int qemuAddToCgroup(virDomainObjPtr vm); - - #endif /* __QEMU_CGROUP_H__ */ -diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h -index 32f713b..8d4e099 100644 ---- a/src/qemu/qemu_domain.h -+++ b/src/qemu/qemu_domain.h -@@ -202,6 +202,7 @@ struct _qemuDomainObjPrivate { - - bool signalIOError; /* true if the domain condition should be signalled on - I/O error */ -+ char *machineName; - }; - - # define QEMU_DOMAIN_DISK_PRIVATE(disk) \ -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index ed01bf4..1d06b6d 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -4540,7 +4540,7 @@ int qemuProcessStart(virConnectPtr conn, - /* Ensure no historical cgroup for this VM is lying around bogus - * settings */ - VIR_DEBUG("Ensuring no historical cgroup is lying around"); -- qemuRemoveCgroup(driver, vm); -+ qemuRemoveCgroup(vm); - - for (i = 0; i < vm->def->ngraphics; ++i) { - virDomainGraphicsDefPtr graphics = vm->def->graphics[i]; -@@ -5390,7 +5390,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, - } - - retry: -- if ((ret = qemuRemoveCgroup(driver, vm)) < 0) { -+ if ((ret = qemuRemoveCgroup(vm)) < 0) { - if (ret == -EBUSY && (retries++ < 5)) { - usleep(200*1000); - goto retry; -diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c -index c94512a..b43edb2 100644 ---- a/src/util/vircgroup.c -+++ b/src/util/vircgroup.c -@@ -243,12 +243,17 @@ static bool - virCgroupValidateMachineGroup(virCgroupPtr group, - const char *name, - const char *drivername, -+ int id, -+ bool privileged, - bool stripEmulatorSuffix) - { - size_t i; - bool valid = false; -- char *partname; -- char *scopename; -+ char *partname = NULL; -+ char *scopename_old = NULL; -+ char *scopename_new = NULL; -+ char *machinename = virSystemdMakeMachineName(drivername, id, -+ name, privileged); - - if (virAsprintf(&partname, "%s.libvirt-%s", - name, drivername) < 0) -@@ -257,10 +262,21 @@ virCgroupValidateMachineGroup(virCgroupPtr group, - if (virCgroupPartitionEscape(&partname) < 0) - goto cleanup; - -- if (!(scopename = virSystemdMakeScopeName(name, drivername))) -+ if (!(scopename_old = virSystemdMakeScopeName(name, drivername, true))) - goto cleanup; - -- if (virCgroupPartitionEscape(&scopename) < 0) -+ /* We should keep trying even if this failed */ -+ if (!machinename) -+ virResetLastError(); -+ else if (!(scopename_new = virSystemdMakeScopeName(machinename, -+ drivername, false))) -+ goto cleanup; -+ -+ if (virCgroupPartitionEscape(&scopename_old) < 0) -+ goto cleanup; -+ -+ if (scopename_new && -+ virCgroupPartitionEscape(&scopename_new) < 0) - goto cleanup; - - for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) { -@@ -290,12 +306,15 @@ virCgroupValidateMachineGroup(virCgroupPtr group, - tmp++; - - if (STRNEQ(tmp, name) && -+ STRNEQ_NULLABLE(tmp, machinename) && - STRNEQ(tmp, partname) && -- STRNEQ(tmp, scopename)) { -+ STRNEQ(tmp, scopename_old) && -+ STRNEQ_NULLABLE(tmp, scopename_new)) { - VIR_DEBUG("Name '%s' for controller '%s' does not match " -- "'%s', '%s' or '%s'", -+ "'%s', '%s', '%s', '%s' or '%s'", - tmp, virCgroupControllerTypeToString(i), -- name, partname, scopename); -+ name, NULLSTR(machinename), partname, -+ scopename_old, NULLSTR(scopename_new)); - goto cleanup; - } - } -@@ -304,7 +323,9 @@ virCgroupValidateMachineGroup(virCgroupPtr group, - - cleanup: - VIR_FREE(partname); -- VIR_FREE(scopename); -+ VIR_FREE(scopename_old); -+ VIR_FREE(scopename_new); -+ VIR_FREE(machinename); - return valid; - } - -@@ -1555,6 +1576,8 @@ virCgroupNewDetect(pid_t pid, - int - virCgroupNewDetectMachine(const char *name, - const char *drivername, -+ int id, -+ bool privileged, - pid_t pid, - int controllers, - virCgroupPtr *group) -@@ -1565,7 +1588,8 @@ virCgroupNewDetectMachine(const char *name, - return -1; - } - -- if (!virCgroupValidateMachineGroup(*group, name, drivername, true)) { -+ if (!virCgroupValidateMachineGroup(*group, name, drivername, -+ id, privileged, true)) { - VIR_DEBUG("Failed to validate machine name for '%s' driver '%s'", - name, drivername); - virCgroupFree(group); -@@ -1582,7 +1606,6 @@ virCgroupNewDetectMachine(const char *name, - static int - virCgroupNewMachineSystemd(const char *name, - const char *drivername, -- bool privileged, - const unsigned char *uuid, - const char *rootdir, - pid_t pidleader, -@@ -1602,7 +1625,6 @@ virCgroupNewMachineSystemd(const char *name, - VIR_DEBUG("Trying to setup machine '%s' via systemd", name); - if ((rv = virSystemdCreateMachine(name, - drivername, -- privileged, - uuid, - rootdir, - pidleader, -@@ -1690,11 +1712,9 @@ virCgroupNewMachineSystemd(const char *name, - /* - * Returns 0 on success, -1 on fatal error - */ --int virCgroupTerminateMachine(const char *name, -- const char *drivername, -- bool privileged) -+int virCgroupTerminateMachine(const char *name) - { -- return virSystemdTerminateMachine(name, drivername, privileged); -+ return virSystemdTerminateMachine(name); - } - - -@@ -1749,7 +1769,6 @@ virCgroupNewMachineManual(const char *name, - int - virCgroupNewMachine(const char *name, - const char *drivername, -- bool privileged, - const unsigned char *uuid, - const char *rootdir, - pid_t pidleader, -@@ -1766,7 +1785,6 @@ virCgroupNewMachine(const char *name, - - if ((rv = virCgroupNewMachineSystemd(name, - drivername, -- privileged, - uuid, - rootdir, - pidleader, -@@ -4220,6 +4238,8 @@ virCgroupNewDetect(pid_t pid ATTRIBUTE_UNUSED, - int - virCgroupNewDetectMachine(const char *name ATTRIBUTE_UNUSED, - const char *drivername ATTRIBUTE_UNUSED, -+ int id ATTRIBUTE_UNUSED, -+ bool privileged ATTRIBUTE_UNUSED, - pid_t pid ATTRIBUTE_UNUSED, - int controllers ATTRIBUTE_UNUSED, - virCgroupPtr *group ATTRIBUTE_UNUSED) -@@ -4230,9 +4250,7 @@ virCgroupNewDetectMachine(const char *name ATTRIBUTE_UNUSED, - } - - --int virCgroupTerminateMachine(const char *name ATTRIBUTE_UNUSED, -- const char *drivername ATTRIBUTE_UNUSED, -- bool privileged ATTRIBUTE_UNUSED) -+int virCgroupTerminateMachine(const char *name ATTRIBUTE_UNUSED) - { - virReportSystemError(ENXIO, "%s", - _("Control groups not supported on this platform")); -@@ -4243,7 +4261,6 @@ int virCgroupTerminateMachine(const char *name ATTRIBUTE_UNUSED, - int - virCgroupNewMachine(const char *name ATTRIBUTE_UNUSED, - const char *drivername ATTRIBUTE_UNUSED, -- bool privileged ATTRIBUTE_UNUSED, - const unsigned char *uuid ATTRIBUTE_UNUSED, - const char *rootdir ATTRIBUTE_UNUSED, - pid_t pidleader ATTRIBUTE_UNUSED, -diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h -index 63a9e1c..6570cb3 100644 ---- a/src/util/vircgroup.h -+++ b/src/util/vircgroup.h -@@ -91,13 +91,15 @@ int virCgroupNewDetect(pid_t pid, - - int virCgroupNewDetectMachine(const char *name, - const char *drivername, -+ int id, -+ bool privileged, - pid_t pid, - int controllers, -- virCgroupPtr *group); -+ virCgroupPtr *group) -+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); - - int virCgroupNewMachine(const char *name, - const char *drivername, -- bool privileged, - const unsigned char *uuid, - const char *rootdir, - pid_t pidleader, -@@ -110,10 +112,8 @@ int virCgroupNewMachine(const char *name, - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) - ATTRIBUTE_NONNULL(4); - --int virCgroupTerminateMachine(const char *name, -- const char *drivername, -- bool privileged) -- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -+int virCgroupTerminateMachine(const char *name) -+ ATTRIBUTE_NONNULL(1); - - bool virCgroupNewIgnoreError(void); - -diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c -index daaa37c..0f4e1f0 100644 ---- a/src/util/virsystemd.c -+++ b/src/util/virsystemd.c -@@ -27,6 +27,7 @@ - - #include "virsystemd.h" - #include "viratomic.h" -+#include "virbuffer.h" - #include "virdbus.h" - #include "virstring.h" - #include "viralloc.h" -@@ -78,15 +79,17 @@ static void virSystemdEscapeName(virBufferPtr buf, - #undef VALID_CHARS - } - -- - char *virSystemdMakeScopeName(const char *name, -- const char *drivername) -+ const char *drivername, -+ bool legacy_behaviour) - { - virBuffer buf = VIR_BUFFER_INITIALIZER; - - virBufferAddLit(&buf, "machine-"); -- virSystemdEscapeName(&buf, drivername); -- virBufferAddLit(&buf, "\\x2d"); -+ if (legacy_behaviour) { -+ virSystemdEscapeName(&buf, drivername); -+ virBufferAddLit(&buf, "\\x2d"); -+ } - virSystemdEscapeName(&buf, name); - virBufferAddLit(&buf, ".scope"); - -@@ -113,10 +116,42 @@ char *virSystemdMakeSliceName(const char *partition) - return virBufferContentAndReset(&buf); - } - -+#define HOSTNAME_CHARS \ -+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-" - --char *virSystemdMakeMachineName(const char *name, -- const char *drivername, -- bool privileged) -+static void -+virSystemdAppendValidMachineName(virBufferPtr buf, -+ const char *name) -+{ -+ bool skip_dot = false; -+ -+ for (; *name; name++) { -+ if (strlen(virBufferCurrentContent(buf)) >= 64) -+ break; -+ -+ if (*name == '.') { -+ if (!skip_dot) -+ virBufferAddChar(buf, *name); -+ skip_dot = true; -+ continue; -+ } -+ -+ skip_dot = false; -+ -+ if (!strchr(HOSTNAME_CHARS, *name)) -+ continue; -+ -+ virBufferAddChar(buf, *name); -+ } -+} -+ -+#undef HOSTNAME_CHARS -+ -+char * -+virSystemdMakeMachineName(const char *drivername, -+ int id, -+ const char *name, -+ bool privileged) - { - char *machinename = NULL; - char *username = NULL; -@@ -131,7 +166,8 @@ char *virSystemdMakeMachineName(const char *name, - virBufferAsprintf(&buf, "%s-%s-", username, drivername); - } - -- virSystemdEscapeName(&buf, name); -+ virBufferAsprintf(&buf, "%d-", id); -+ virSystemdAppendValidMachineName(&buf, name); - - machinename = virBufferContentAndReset(&buf); - cleanup: -@@ -212,7 +248,6 @@ virSystemdGetMachineNameByPID(pid_t pid) - */ - int virSystemdCreateMachine(const char *name, - const char *drivername, -- bool privileged, - const unsigned char *uuid, - const char *rootdir, - pid_t pidleader, -@@ -223,7 +258,6 @@ int virSystemdCreateMachine(const char *name, - { - int ret; - DBusConnection *conn; -- char *machinename = NULL; - char *creatorname = NULL; - char *slicename = NULL; - static int hasCreateWithNetwork = 1; -@@ -239,8 +273,6 @@ int virSystemdCreateMachine(const char *name, - return -1; - - ret = -1; -- if (!(machinename = virSystemdMakeMachineName(name, drivername, privileged))) -- goto cleanup; - - if (virAsprintf(&creatorname, "libvirt-%s", drivername) < 0) - goto cleanup; -@@ -318,7 +350,7 @@ int virSystemdCreateMachine(const char *name, - "org.freedesktop.machine1.Manager", - "CreateMachineWithNetwork", - "sayssusa&ia(sv)", -- machinename, -+ name, - 16, - uuid[0], uuid[1], uuid[2], uuid[3], - uuid[4], uuid[5], uuid[6], uuid[7], -@@ -360,7 +392,7 @@ int virSystemdCreateMachine(const char *name, - "org.freedesktop.machine1.Manager", - "CreateMachine", - "sayssusa(sv)", -- machinename, -+ name, - 16, - uuid[0], uuid[1], uuid[2], uuid[3], - uuid[4], uuid[5], uuid[6], uuid[7], -@@ -381,20 +413,19 @@ int virSystemdCreateMachine(const char *name, - - cleanup: - VIR_FREE(creatorname); -- VIR_FREE(machinename); - VIR_FREE(slicename); - return ret; - } - --int virSystemdTerminateMachine(const char *name, -- const char *drivername, -- bool privileged) -+int virSystemdTerminateMachine(const char *name) - { - int ret; - DBusConnection *conn; -- char *machinename = NULL; - virError error; - -+ if (!name) -+ return 0; -+ - memset(&error, 0, sizeof(error)); - - ret = virDBusIsServiceEnabled("org.freedesktop.machine1"); -@@ -409,9 +440,6 @@ int virSystemdTerminateMachine(const char *name, - if (!(conn = virDBusGetSystemBus())) - goto cleanup; - -- if (!(machinename = virSystemdMakeMachineName(name, drivername, privileged))) -- goto cleanup; -- - /* - * The systemd DBus API we're invoking has the - * following signature -@@ -431,7 +459,7 @@ int virSystemdTerminateMachine(const char *name, - "org.freedesktop.machine1.Manager", - "TerminateMachine", - "s", -- machinename) < 0) -+ name) < 0) - goto cleanup; - - if (error.code == VIR_ERR_ERROR && -@@ -446,7 +474,6 @@ int virSystemdTerminateMachine(const char *name, - cleanup: - virResetError(&error); - -- VIR_FREE(machinename); - return ret; - } - -diff --git a/src/util/virsystemd.h b/src/util/virsystemd.h -index a13a4c0..93b0aae 100644 ---- a/src/util/virsystemd.h -+++ b/src/util/virsystemd.h -@@ -25,16 +25,17 @@ - # include "internal.h" - - char *virSystemdMakeScopeName(const char *name, -- const char *drivername); -+ const char *drivername, -+ bool legacy_behaviour); - char *virSystemdMakeSliceName(const char *partition); - --char *virSystemdMakeMachineName(const char *name, -- const char *drivername, -+char *virSystemdMakeMachineName(const char *drivername, -+ int id, -+ const char *name, - bool privileged); - - int virSystemdCreateMachine(const char *name, - const char *drivername, -- bool privileged, - const unsigned char *uuid, - const char *rootdir, - pid_t pidleader, -@@ -43,9 +44,7 @@ int virSystemdCreateMachine(const char *name, - int *nicindexes, - const char *partition); - --int virSystemdTerminateMachine(const char *name, -- const char *drivername, -- bool privileged); -+int virSystemdTerminateMachine(const char *name); - - void virSystemdNotifyStartup(void); - -diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c -index 3a3cd99..46452dd 100644 ---- a/tests/virsystemdtest.c -+++ b/tests/virsystemdtest.c -@@ -166,7 +166,6 @@ static int testCreateContainer(const void *opaque ATTRIBUTE_UNUSED) - }; - if (virSystemdCreateMachine("demo", - "lxc", -- true, - uuid, - "/proc/123/root", - 123, -@@ -182,9 +181,7 @@ static int testCreateContainer(const void *opaque ATTRIBUTE_UNUSED) - - static int testTerminateContainer(const void *opaque ATTRIBUTE_UNUSED) - { -- if (virSystemdTerminateMachine("demo", -- "lxc", -- true) < 0) { -+ if (virSystemdTerminateMachine("lxc-demo") < 0) { - fprintf(stderr, "%s", "Failed to terminate LXC machine\n"); - return -1; - } -@@ -202,7 +199,6 @@ static int testCreateMachine(const void *opaque ATTRIBUTE_UNUSED) - }; - if (virSystemdCreateMachine("demo", - "qemu", -- false, - uuid, - NULL, - 123, -@@ -218,9 +214,7 @@ static int testCreateMachine(const void *opaque ATTRIBUTE_UNUSED) - - static int testTerminateMachine(const void *opaque ATTRIBUTE_UNUSED) - { -- if (virSystemdTerminateMachine("demo", -- "qemu", -- false) < 0) { -+ if (virSystemdTerminateMachine("test-qemu-demo") < 0) { - fprintf(stderr, "%s", "Failed to terminate KVM machine\n"); - return -1; - } -@@ -242,7 +236,6 @@ static int testCreateNoSystemd(const void *opaque ATTRIBUTE_UNUSED) - - if ((rv = virSystemdCreateMachine("demo", - "qemu", -- true, - uuid, - NULL, - 123, -@@ -277,7 +270,6 @@ static int testCreateSystemdNotRunning(const void *opaque ATTRIBUTE_UNUSED) - - if ((rv = virSystemdCreateMachine("demo", - "qemu", -- true, - uuid, - NULL, - 123, -@@ -312,7 +304,6 @@ static int testCreateBadSystemd(const void *opaque ATTRIBUTE_UNUSED) - - if ((rv = virSystemdCreateMachine("demo", - "qemu", -- true, - uuid, - NULL, - 123, -@@ -348,7 +339,6 @@ static int testCreateNetwork(const void *opaque ATTRIBUTE_UNUSED) - size_t nnicindexes = ARRAY_CARDINALITY(nicindexes); - if (virSystemdCreateMachine("demo", - "lxc", -- true, - uuid, - "/proc/123/root", - 123, -@@ -385,6 +375,8 @@ testGetMachineName(const void *opaque ATTRIBUTE_UNUSED) - struct testNameData { - const char *name; - const char *expected; -+ int id; -+ bool legacy; - }; - - static int -@@ -394,7 +386,7 @@ testScopeName(const void *opaque) - int ret = -1; - char *actual = NULL; - -- if (!(actual = virSystemdMakeScopeName(data->name, "lxc"))) -+ if (!(actual = virSystemdMakeScopeName(data->name, "lxc", data->legacy))) - goto cleanup; - - if (STRNEQ(actual, data->expected)) { -@@ -417,7 +409,8 @@ testMachineName(const void *opaque) - int ret = -1; - char *actual = NULL; - -- if (!(actual = virSystemdMakeMachineName(data->name, "qemu", true))) -+ if (!(actual = virSystemdMakeMachineName("qemu", data->id, -+ data->name, true))) - goto cleanup; - - if (STRNEQ(actual, data->expected)) { -@@ -518,6 +511,12 @@ mymain(void) - { - int ret = 0; - -+ unsigned char uuid[VIR_UUID_BUFLEN]; -+ -+ /* The one we use in tests quite often */ -+ if (virUUIDParse("c7a5fdbd-edaf-9455-926a-d65c16db1809", uuid) < 0) -+ return EXIT_FAILURE; -+ - if (virtTestRun("Test create container ", testCreateContainer, NULL) < 0) - ret = -1; - if (virtTestRun("Test terminate container ", testTerminateContainer, NULL) < 0) -@@ -538,35 +537,47 @@ mymain(void) - if (virtTestRun("Test getting machine name ", testGetMachineName, NULL) < 0) - ret = -1; - --# define TEST_SCOPE(name, unitname) \ -+# define TEST_SCOPE(_name, unitname, _legacy) \ - do { \ - struct testNameData data = { \ -- name, unitname \ -+ .name = _name, .expected = unitname, .legacy = _legacy, \ - }; \ - if (virtTestRun("Test scopename", testScopeName, &data) < 0) \ - ret = -1; \ - } while (0) - -- TEST_SCOPE("demo", "machine-lxc\\x2ddemo.scope"); -- TEST_SCOPE("demo-name", "machine-lxc\\x2ddemo\\x2dname.scope"); -- TEST_SCOPE("demo!name", "machine-lxc\\x2ddemo\\x21name.scope"); -- TEST_SCOPE(".demo", "machine-lxc\\x2d\\x2edemo.scope"); -- TEST_SCOPE("bull💩", "machine-lxc\\x2dbull\\xf0\\x9f\\x92\\xa9.scope"); -+# define TEST_SCOPE_OLD(name, unitname) \ -+ TEST_SCOPE(name, unitname, true) -+# define TEST_SCOPE_NEW(name, unitname) \ -+ TEST_SCOPE(name, unitname, false) - --# define TEST_MACHINE(name, machinename) \ -+ TEST_SCOPE_OLD("demo", "machine-lxc\\x2ddemo.scope"); -+ TEST_SCOPE_OLD("demo-name", "machine-lxc\\x2ddemo\\x2dname.scope"); -+ TEST_SCOPE_OLD("demo!name", "machine-lxc\\x2ddemo\\x21name.scope"); -+ TEST_SCOPE_OLD(".demo", "machine-lxc\\x2d\\x2edemo.scope"); -+ TEST_SCOPE_OLD("bull💩", "machine-lxc\\x2dbull\\xf0\\x9f\\x92\\xa9.scope"); -+ -+ TEST_SCOPE_NEW("qemu-3-demo", "machine-qemu\\x2d3\\x2ddemo.scope"); -+ -+# define TEST_MACHINE(_name, _id, machinename) \ - do { \ - struct testNameData data = { \ -- name, machinename \ -+ .name = _name, .expected = machinename, .id = _id, \ - }; \ - if (virtTestRun("Test scopename", testMachineName, &data) < 0) \ - ret = -1; \ - } while (0) - -- TEST_MACHINE("demo", "qemu-demo"); -- TEST_MACHINE("demo-name", "qemu-demo\\x2dname"); -- TEST_MACHINE("demo!name", "qemu-demo\\x21name"); -- TEST_MACHINE(".demo", "qemu-\\x2edemo"); -- TEST_MACHINE("bull\U0001f4a9", "qemu-bull\\xf0\\x9f\\x92\\xa9"); -+ TEST_MACHINE("demo", 1, "qemu-1-demo"); -+ TEST_MACHINE("demo-name", 2, "qemu-2-demo-name"); -+ TEST_MACHINE("demo!name", 3, "qemu-3-demoname"); -+ TEST_MACHINE(".demo", 4, "qemu-4-.demo"); -+ TEST_MACHINE("bull\U0001f4a9", 5, "qemu-5-bull"); -+ TEST_MACHINE("demo..name", 6, "qemu-6-demo.name"); -+ TEST_MACHINE("12345678901234567890123456789012345678901234567890123456789", 7, -+ "qemu-7-123456789012345678901234567890123456789012345678901234567"); -+ TEST_MACHINE("123456789012345678901234567890123456789012345678901234567890", 8, -+ "qemu-8-123456789012345678901234567890123456789012345678901234567"); - - # define TESTS_PM_SUPPORT_HELPER(name, function) \ - do { \ --- -2.7.2 - diff --git a/SOURCES/libvirt-test-Add-test-to-validate-that-memory-sizes-don-t-get-updated-on-migration.patch b/SOURCES/libvirt-test-Add-test-to-validate-that-memory-sizes-don-t-get-updated-on-migration.patch deleted file mode 100644 index 095ef24..0000000 --- a/SOURCES/libvirt-test-Add-test-to-validate-that-memory-sizes-don-t-get-updated-on-migration.patch +++ /dev/null @@ -1,119 +0,0 @@ -From 5c0f40a4097529450113fcf61cd53a66fcb2cd27 Mon Sep 17 00:00:00 2001 -Message-Id: <5c0f40a4097529450113fcf61cd53a66fcb2cd27@dist-git> -From: Peter Krempa -Date: Tue, 22 Sep 2015 16:59:48 +0200 -Subject: [PATCH] test: Add test to validate that memory sizes don't get - updated on migration - -https://bugzilla.redhat.com/show_bug.cgi?id=1252685 - -(cherry picked from commit 3b2db51430f647def979960f273637083a2f0c91) - -Signed-off-by: Jiri Denemark ---- - .../qemuxml2argv-migrate-numa-unaligned.args | 13 +++++++++ - .../qemuxml2argv-migrate-numa-unaligned.xml | 33 ++++++++++++++++++++++ - tests/qemuxml2argvtest.c | 13 +++++++-- - 3 files changed, 56 insertions(+), 3 deletions(-) - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args - create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.xml - -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args b/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args -new file mode 100644 -index 0000000..4659a65 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.args -@@ -0,0 +1,13 @@ -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ -+/usr/bin/kvm -S -M pc -m 14338 -smp 32 \ -+-object memory-backend-ram,id=ram-node0,size=20482048,host-nodes=3,\ -+policy=preferred \ -+-numa node,nodeid=0,cpus=0,memdev=ram-node0 \ -+-object memory-backend-ram,id=ram-node1,size=675907584,host-nodes=0-7,\ -+policy=bind \ -+-numa node,nodeid=1,cpus=1-27,cpus=29,memdev=ram-node1 \ -+-object memory-backend-ram,id=ram-node2,size=24578457600,host-nodes=1-2,\ -+host-nodes=5,host-nodes=7,policy=bind \ -+-numa node,nodeid=2,cpus=28,cpus=30-31,memdev=ram-node2 \ -+-nographic -monitor unix:/tmp/test-monitor,server,nowait \ -+-no-acpi -boot c -usb -net none -serial none -parallel none -incoming stdio -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.xml b/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.xml -new file mode 100644 -index 0000000..4fbb210 ---- /dev/null -+++ b/tests/qemuxml2argvdata/qemuxml2argv-migrate-numa-unaligned.xml -@@ -0,0 +1,33 @@ -+ -+ QEMUGuest -+ 9f4b6512-e73a-4a25-93e8-5307802821ce -+ 14682468 -+ 14682468 -+ 32 -+ -+ -+ -+ -+ -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/kvm -+ -+ -+ -+ -+ -diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c -index 0dd1b9a..43a0fee 100644 ---- a/tests/qemuxml2argvtest.c -+++ b/tests/qemuxml2argvtest.c -@@ -553,16 +553,19 @@ mymain(void) - FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_ERROR, \ - __VA_ARGS__) - -+# define DO_TEST_LINUX(name, ...) \ -+ DO_TEST_LINUX_FULL(name, NULL, -1, 0, __VA_ARGS__) -+ - # ifdef __linux__ - /* This is a macro that invokes test only on Linux. It's - * meant to be called in those cases where qemuxml2argvmock - * cooperation is expected (e.g. we need a fixed time, - * predictable NUMA topology and so on). On non-Linux - * platforms the macro just consume its argument. */ --# define DO_TEST_LINUX(name, ...) \ -- DO_TEST_FULL(name, NULL, -1, 0, __VA_ARGS__) -+# define DO_TEST_LINUX_FULL(name, ...) \ -+ DO_TEST_FULL(name, __VA_ARGS__) - # else /* __linux__ */ --# define DO_TEST_LINUX(name, ...) \ -+# define DO_TEST_LINUX_FULL(name, ...) \ - do { \ - const char *tmp ATTRIBUTE_UNUSED = name; \ - } while (0) -@@ -1265,6 +1268,10 @@ mymain(void) - DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, 0, - QEMU_CAPS_MIGRATE_QEMU_TCP); - -+ DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, -+ QEMU_CAPS_MIGRATE_KVM_STDIO, QEMU_CAPS_NUMA, -+ QEMU_CAPS_OBJECT_MEMORY_RAM); -+ - DO_TEST("qemu-ns", NONE); - - DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY); --- -2.5.3 - diff --git a/SOURCES/libvirt-tests-Add-a-bunch-of-cpu-test-case-for-ppc64.patch b/SOURCES/libvirt-tests-Add-a-bunch-of-cpu-test-case-for-ppc64.patch deleted file mode 100644 index e06e61d..0000000 --- a/SOURCES/libvirt-tests-Add-a-bunch-of-cpu-test-case-for-ppc64.patch +++ /dev/null @@ -1,248 +0,0 @@ -From 56e2f0e6cc2d46edde1f32cd3ef88e32f247103d Mon Sep 17 00:00:00 2001 -Message-Id: <56e2f0e6cc2d46edde1f32cd3ef88e32f247103d@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:12 +0200 -Subject: [PATCH] tests: Add a bunch of cpu test case for ppc64 - -The test cases cover the cpuCompare(), cpuBaseline() and -cpuNodeData() implementation. - -(cherry picked from commit 818e68c5b422158f6fd3edf6f77ae82a631cb41d) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/cputest.c | 16 ++++++++++++++++ - tests/cputestdata/ppc64-baseline-incompatible-models.xml | 14 ++++++++++++++ - tests/cputestdata/ppc64-baseline-legacy.xml | 14 ++++++++++++++ - tests/cputestdata/ppc64-baseline-same-model-result.xml | 3 +++ - tests/cputestdata/ppc64-baseline-same-model.xml | 14 ++++++++++++++ - tests/cputestdata/ppc64-guest-legacy-incompatible.xml | 3 +++ - tests/cputestdata/ppc64-guest-legacy-invalid.xml | 3 +++ - tests/cputestdata/ppc64-guest-legacy.xml | 3 +++ - .../ppc64-host+guest-legacy,ppc_models-result.xml | 5 +++++ - tests/cputestdata/ppc64-host-better.xml | 6 ++++++ - tests/cputestdata/ppc64-host-incomp-arch.xml | 6 ++++++ - tests/cputestdata/ppc64-host-no-vendor.xml | 5 +++++ - tests/cputestdata/ppc64-host-worse.xml | 6 ++++++ - 13 files changed, 98 insertions(+) - create mode 100644 tests/cputestdata/ppc64-baseline-incompatible-models.xml - create mode 100644 tests/cputestdata/ppc64-baseline-legacy.xml - create mode 100644 tests/cputestdata/ppc64-baseline-same-model-result.xml - create mode 100644 tests/cputestdata/ppc64-baseline-same-model.xml - create mode 100644 tests/cputestdata/ppc64-guest-legacy-incompatible.xml - create mode 100644 tests/cputestdata/ppc64-guest-legacy-invalid.xml - create mode 100644 tests/cputestdata/ppc64-guest-legacy.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml - create mode 100644 tests/cputestdata/ppc64-host-better.xml - create mode 100644 tests/cputestdata/ppc64-host-incomp-arch.xml - create mode 100644 tests/cputestdata/ppc64-host-no-vendor.xml - create mode 100644 tests/cputestdata/ppc64-host-worse.xml - -diff --git a/tests/cputest.c b/tests/cputest.c -index 09f690a..5992dd0 100644 ---- a/tests/cputest.c -+++ b/tests/cputest.c -@@ -571,6 +571,13 @@ mymain(void) - DO_TEST_COMPARE("x86", "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); - -+ DO_TEST_COMPARE("ppc64", "host", "host", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_COMPARE("ppc64", "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_COMPARE("ppc64", "host", "host-worse", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_COMPARE("ppc64", "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_COMPARE("ppc64", "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_COMPARE("ppc64", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); -+ - /* guest to host comparison */ - DO_TEST_COMPARE("x86", "host", "bogus-model", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("x86", "host", "bogus-feature", VIR_CPU_COMPARE_ERROR); -@@ -597,6 +604,9 @@ mymain(void) - - DO_TEST_COMPARE("ppc64", "host", "guest-strict", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-exact", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_COMPARE("ppc64", "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_COMPARE("ppc64", "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_COMPARE("ppc64", "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); - - /* guest updates for migration - * automatically compares host CPU with the result */ -@@ -627,6 +637,9 @@ mymain(void) - - DO_TEST_BASELINE("ppc64", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("ppc64", "no-vendor", 0, 0); -+ DO_TEST_BASELINE("ppc64", "incompatible-models", 0, -1); -+ DO_TEST_BASELINE("ppc64", "same-model", 0, 0); -+ DO_TEST_BASELINE("ppc64", "legacy", 0, -1); - - /* CPU features */ - DO_TEST_HASFEATURE("x86", "host", "vmx", YES); -@@ -664,6 +677,9 @@ mymain(void) - - DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0); - DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER8", -1); -+ DO_TEST_GUESTDATA("ppc64", "host", "guest-legacy", ppc_models, NULL, 0); -+ DO_TEST_GUESTDATA("ppc64", "host", "guest-legacy-incompatible", ppc_models, NULL, -1); -+ DO_TEST_GUESTDATA("ppc64", "host", "guest-legacy-invalid", ppc_models, NULL, -1); - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } -diff --git a/tests/cputestdata/ppc64-baseline-incompatible-models.xml b/tests/cputestdata/ppc64-baseline-incompatible-models.xml -new file mode 100644 -index 0000000..7e7b9a6 ---- /dev/null -+++ b/tests/cputestdata/ppc64-baseline-incompatible-models.xml -@@ -0,0 +1,14 @@ -+ -+ -+ ppc64 -+ POWER7 -+ IBM -+ -+ -+ -+ ppc64 -+ POWER8 -+ IBM -+ -+ -+ -diff --git a/tests/cputestdata/ppc64-baseline-legacy.xml b/tests/cputestdata/ppc64-baseline-legacy.xml -new file mode 100644 -index 0000000..b652497 ---- /dev/null -+++ b/tests/cputestdata/ppc64-baseline-legacy.xml -@@ -0,0 +1,14 @@ -+ -+ -+ ppc64 -+ POWER8 -+ IBM -+ -+ -+ -+ ppc64 -+ power8e -+ IBM -+ -+ -+ -diff --git a/tests/cputestdata/ppc64-baseline-same-model-result.xml b/tests/cputestdata/ppc64-baseline-same-model-result.xml -new file mode 100644 -index 0000000..0223018 ---- /dev/null -+++ b/tests/cputestdata/ppc64-baseline-same-model-result.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8 -+ -diff --git a/tests/cputestdata/ppc64-baseline-same-model.xml b/tests/cputestdata/ppc64-baseline-same-model.xml -new file mode 100644 -index 0000000..dceae83 ---- /dev/null -+++ b/tests/cputestdata/ppc64-baseline-same-model.xml -@@ -0,0 +1,14 @@ -+ -+ -+ ppc64 -+ POWER8 -+ IBM -+ -+ -+ -+ ppc64 -+ POWER8 -+ IBM -+ -+ -+ -diff --git a/tests/cputestdata/ppc64-guest-legacy-incompatible.xml b/tests/cputestdata/ppc64-guest-legacy-incompatible.xml -new file mode 100644 -index 0000000..f5b8384 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-legacy-incompatible.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8_v1.0 -+ -diff --git a/tests/cputestdata/ppc64-guest-legacy-invalid.xml b/tests/cputestdata/ppc64-guest-legacy-invalid.xml -new file mode 100644 -index 0000000..be059c3 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-legacy-invalid.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8E_v1.0 -+ -diff --git a/tests/cputestdata/ppc64-guest-legacy.xml b/tests/cputestdata/ppc64-guest-legacy.xml -new file mode 100644 -index 0000000..36bae52 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-legacy.xml -@@ -0,0 +1,3 @@ -+ -+ POWER7_v2.3 -+ -diff --git a/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml b/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml -new file mode 100644 -index 0000000..3548c0e ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml -@@ -0,0 +1,5 @@ -+ -+ ppc64 -+ POWER7 -+ IBM -+ -diff --git a/tests/cputestdata/ppc64-host-better.xml b/tests/cputestdata/ppc64-host-better.xml -new file mode 100644 -index 0000000..af87412 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host-better.xml -@@ -0,0 +1,6 @@ -+ -+ ppc64 -+ POWER8 -+ IBM -+ -+ -diff --git a/tests/cputestdata/ppc64-host-incomp-arch.xml b/tests/cputestdata/ppc64-host-incomp-arch.xml -new file mode 100644 -index 0000000..195f436 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host-incomp-arch.xml -@@ -0,0 +1,6 @@ -+ -+ x86_64 -+ POWER7 -+ IBM -+ -+ -diff --git a/tests/cputestdata/ppc64-host-no-vendor.xml b/tests/cputestdata/ppc64-host-no-vendor.xml -new file mode 100644 -index 0000000..de73006 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host-no-vendor.xml -@@ -0,0 +1,5 @@ -+ -+ ppc64 -+ POWER7 -+ -+ -diff --git a/tests/cputestdata/ppc64-host-worse.xml b/tests/cputestdata/ppc64-host-worse.xml -new file mode 100644 -index 0000000..ba1806b ---- /dev/null -+++ b/tests/cputestdata/ppc64-host-worse.xml -@@ -0,0 +1,6 @@ -+ -+ ppc64 -+ POWER6 -+ IBM -+ -+ --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Add-a-test-for-host-model-CPU-with-CMT-feature.patch b/SOURCES/libvirt-tests-Add-a-test-for-host-model-CPU-with-CMT-feature.patch new file mode 100644 index 0000000..7ea9567 --- /dev/null +++ b/SOURCES/libvirt-tests-Add-a-test-for-host-model-CPU-with-CMT-feature.patch @@ -0,0 +1,111 @@ +From db94d82338e66a7f238e5f19c317fede75186ad4 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Jiri Denemark +Date: Tue, 9 Aug 2016 15:03:20 +0200 +Subject: [PATCH] tests: Add a test for host-model CPU with CMT feature + +The generated command line wouldn't work since QEMU doesn't know what +'cmt' is. The following patch will fix this issue. + +https://bugzilla.redhat.com/show_bug.cgi?id=1355857 + +Signed-off-by: Jiri Denemark +(cherry picked from commit 58ba240df89a7dd7bff16ebb65d9aadd49fb8bbb) + +RHEL changes: + - since commit v2.0.0-8-g0c8ec3b libvirt in RHEL always passes + +rtm,+hle options to Haswell and Broadwell CPUs + - downstream does not assume QEMU_CAPS_SMP_TOPOLOGY + +https://bugzilla.redhat.com/show_bug.cgi?id=1365500 + +Signed-off-by: Jiri Denemark +--- + .../qemuxml2argv-cpu-host-model-cmt.args | 22 ++++++++++++++++++++++ + .../qemuxml2argv-cpu-host-model-cmt.xml | 19 +++++++++++++++++++ + tests/qemuxml2argvtest.c | 1 + + tests/testutilsqemu.c | 1 + + 4 files changed, 43 insertions(+) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.xml + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args +new file mode 100644 +index 0000000..884ca57 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.args +@@ -0,0 +1,22 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name QEMUGuest1 \ ++-S \ ++-M pc \ ++-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\ +++smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+cmt,+pdpe1gb,+abm,+rtm,+hle \ ++-m 214 \ ++-smp 6 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot n \ ++-usb \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.xml +new file mode 100644 +index 0000000..7e3f617 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-cmt.xml +@@ -0,0 +1,19 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 6 ++ ++ hvm ++ ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 95474e8..927728e 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1391,6 +1391,7 @@ mymain(void) + DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM); + DO_TEST("cpu-Haswell3", QEMU_CAPS_KVM); + DO_TEST("cpu-Haswell-noTSX", QEMU_CAPS_KVM); ++ DO_TEST("cpu-host-model-cmt", NONE); + driver.caps->host.cpu = cpuDefault; + + DO_TEST("encrypted-disk", NONE); +diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c +index 1cf72a9..f41b0b6 100644 +--- a/tests/testutilsqemu.c ++++ b/tests/testutilsqemu.c +@@ -54,6 +54,7 @@ static virCPUFeatureDef cpuHaswellFeatures[] = { + { (char *) "invtsc", -1 }, + { (char *) "abm", -1 }, + { (char *) "pdpe1gb", -1 }, ++ { (char *) "cmt", -1 }, + { (char *) "rdrand", -1 }, + { (char *) "f16c", -1 }, + { (char *) "osxsave", -1 }, +-- +2.9.2 + diff --git a/SOURCES/libvirt-tests-Add-nodeinfo-test-for-non-present-CPUs.patch b/SOURCES/libvirt-tests-Add-nodeinfo-test-for-non-present-CPUs.patch deleted file mode 100644 index 2804f1d..0000000 --- a/SOURCES/libvirt-tests-Add-nodeinfo-test-for-non-present-CPUs.patch +++ /dev/null @@ -1,2302 +0,0 @@ -From 427ff80757207fe9eb3b566cc853d7ee42d8698b Mon Sep 17 00:00:00 2001 -Message-Id: <427ff80757207fe9eb3b566cc853d7ee42d8698b@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:16 +0200 -Subject: [PATCH] tests: Add nodeinfo test for non-present CPUs - -Some of the possible CPUs in a system might not be present, eg. they -might be defective or might have been deconfigured from the ASM console -in a Power system. Due to this fact, Linux keeps track of what CPUs are -possible and what are present separately. - -This test uses the data from a system where not all the possible CPUs -are present to make sure libvirt handles this situation correctly. - -(cherry picked from commit f8b784a8ef457a58f7821d9f86ef41ecba1f47b3) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - .../linux-deconfigured-cpus/cpu/cpu0/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu1/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu10/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu100/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu101/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu102/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu103/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu104/online | 1 + - .../cpu/cpu104/topology/core_id | 1 + - .../cpu/cpu104/topology/core_siblings | 1 + - .../cpu/cpu104/topology/core_siblings_list | 1 + - .../cpu/cpu104/topology/physical_package_id | 1 + - .../cpu/cpu104/topology/thread_siblings | 1 + - .../cpu/cpu104/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu105/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu106/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu107/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu108/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu109/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu11/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu110/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu111/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu112/online | 1 + - .../cpu/cpu112/topology/core_id | 1 + - .../cpu/cpu112/topology/core_siblings | 1 + - .../cpu/cpu112/topology/core_siblings_list | 1 + - .../cpu/cpu112/topology/physical_package_id | 1 + - .../cpu/cpu112/topology/thread_siblings | 1 + - .../cpu/cpu112/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu113/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu114/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu115/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu116/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu117/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu118/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu119/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu12/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu120/online | 1 + - .../cpu/cpu120/topology/core_id | 1 + - .../cpu/cpu120/topology/core_siblings | 1 + - .../cpu/cpu120/topology/core_siblings_list | 1 + - .../cpu/cpu120/topology/physical_package_id | 1 + - .../cpu/cpu120/topology/thread_siblings | 1 + - .../cpu/cpu120/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu121/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu122/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu123/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu124/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu125/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu126/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu127/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu128/online | 1 + - .../cpu/cpu128/topology/core_id | 1 + - .../cpu/cpu128/topology/core_siblings | 1 + - .../cpu/cpu128/topology/core_siblings_list | 1 + - .../cpu/cpu128/topology/physical_package_id | 1 + - .../cpu/cpu128/topology/thread_siblings | 1 + - .../cpu/cpu128/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu129/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu13/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu130/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu131/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu132/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu133/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu134/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu135/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu136/online | 1 + - .../cpu/cpu136/topology/core_id | 1 + - .../cpu/cpu136/topology/core_siblings | 1 + - .../cpu/cpu136/topology/core_siblings_list | 1 + - .../cpu/cpu136/topology/physical_package_id | 1 + - .../cpu/cpu136/topology/thread_siblings | 1 + - .../cpu/cpu136/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu137/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu138/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu139/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu14/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu140/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu141/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu142/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu143/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu144/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu145/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu146/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu147/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu148/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu149/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu15/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu150/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu151/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu152/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu153/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu154/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu155/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu156/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu157/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu158/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu159/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu16/online | 1 + - .../cpu/cpu16/topology/core_id | 1 + - .../cpu/cpu16/topology/core_siblings | 1 + - .../cpu/cpu16/topology/core_siblings_list | 1 + - .../cpu/cpu16/topology/physical_package_id | 1 + - .../cpu/cpu16/topology/thread_siblings | 1 + - .../cpu/cpu16/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu17/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu18/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu19/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu2/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu20/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu21/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu22/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu23/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu24/online | 1 + - .../cpu/cpu24/topology/core_id | 1 + - .../cpu/cpu24/topology/core_siblings | 1 + - .../cpu/cpu24/topology/core_siblings_list | 1 + - .../cpu/cpu24/topology/physical_package_id | 1 + - .../cpu/cpu24/topology/thread_siblings | 1 + - .../cpu/cpu24/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu25/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu26/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu27/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu28/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu29/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu3/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu30/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu31/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu32/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu33/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu34/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu35/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu36/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu37/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu38/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu39/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu4/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu40/online | 1 + - .../cpu/cpu40/topology/core_id | 1 + - .../cpu/cpu40/topology/core_siblings | 1 + - .../cpu/cpu40/topology/core_siblings_list | 1 + - .../cpu/cpu40/topology/physical_package_id | 1 + - .../cpu/cpu40/topology/thread_siblings | 1 + - .../cpu/cpu40/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu41/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu42/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu43/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu44/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu45/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu46/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu47/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu48/online | 1 + - .../cpu/cpu48/topology/core_id | 1 + - .../cpu/cpu48/topology/core_siblings | 1 + - .../cpu/cpu48/topology/core_siblings_list | 1 + - .../cpu/cpu48/topology/physical_package_id | 1 + - .../cpu/cpu48/topology/thread_siblings | 1 + - .../cpu/cpu48/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu49/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu5/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu50/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu51/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu52/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu53/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu54/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu55/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu56/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu57/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu58/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu59/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu6/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu60/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu61/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu62/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu63/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu64/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu65/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu66/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu67/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu68/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu69/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu7/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu70/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu71/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu72/online | 1 + - .../cpu/cpu72/topology/core_id | 1 + - .../cpu/cpu72/topology/core_siblings | 1 + - .../cpu/cpu72/topology/core_siblings_list | 1 + - .../cpu/cpu72/topology/physical_package_id | 1 + - .../cpu/cpu72/topology/thread_siblings | 1 + - .../cpu/cpu72/topology/thread_siblings_list | 1 + - .../linux-deconfigured-cpus/cpu/cpu73/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu74/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu75/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu76/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu77/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu78/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu79/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu8/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu80/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu81/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu82/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu83/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu84/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu85/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu86/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu87/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu88/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu89/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu9/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu90/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu91/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu92/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu93/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu94/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu95/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu96/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu97/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu98/online | 1 + - .../linux-deconfigured-cpus/cpu/cpu99/online | 1 + - .../linux-deconfigured-cpus/cpu/kernel_max | 1 + - .../linux-deconfigured-cpus/cpu/offline | 1 + - .../linux-deconfigured-cpus/cpu/online | 1 + - .../linux-deconfigured-cpus/cpu/possible | 1 + - .../linux-deconfigured-cpus/cpu/present | 1 + - .../linux-deconfigured-cpus/node/node0/meminfo | 29 ++++++++++++ - .../linux-deconfigured-cpus/node/node1/meminfo | 29 ++++++++++++ - .../linux-deconfigured-cpus/node/node16/meminfo | 29 ++++++++++++ - .../linux-deconfigured-cpus/node/node17/meminfo | 29 ++++++++++++ - .../linux-deconfigured-cpus/node/online | 1 + - .../linux-deconfigured-cpus/node/possible | 1 + - .../linux-ppc64-deconfigured-cpus.cpuinfo | 55 ++++++++++++++++++++++ - .../linux-ppc64-deconfigured-cpus.expected | 1 + - tests/nodeinfotest.c | 1 + - 234 files changed, 400 insertions(+) - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/cpu/present - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/online - create mode 100644 tests/nodeinfodata/linux-deconfigured-cpus/node/possible - create mode 100644 tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo - create mode 100644 tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected - -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu0/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu1/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu10/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu100/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu101/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu102/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu103/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id -new file mode 100644 -index 0000000..9bb71ca ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_id -@@ -0,0 +1 @@ -+2152 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings -new file mode 100644 -index 0000000..267b161 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list -new file mode 100644 -index 0000000..d11f5b7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/core_siblings_list -@@ -0,0 +1 @@ -+104,112 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings -new file mode 100644 -index 0000000..b4fa391 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu104/topology/thread_siblings_list -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu105/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu106/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu107/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu108/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu109/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu11/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu110/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu111/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id -new file mode 100644 -index 0000000..317509b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_id -@@ -0,0 +1 @@ -+2160 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings -new file mode 100644 -index 0000000..267b161 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list -new file mode 100644 -index 0000000..d11f5b7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/core_siblings_list -@@ -0,0 +1 @@ -+104,112 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings -new file mode 100644 -index 0000000..968e322 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list -new file mode 100644 -index 0000000..194b81c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu112/topology/thread_siblings_list -@@ -0,0 +1 @@ -+112 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu113/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu114/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu115/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu116/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu117/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu118/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu119/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu12/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id -new file mode 100644 -index 0000000..b17e4bd ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_id -@@ -0,0 +1 @@ -+2208 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings -new file mode 100644 -index 0000000..99374e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list -new file mode 100644 -index 0000000..9764eab ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings -new file mode 100644 -index 0000000..13eaaf3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list -new file mode 100644 -index 0000000..52bd8e4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu120/topology/thread_siblings_list -@@ -0,0 +1 @@ -+120 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu121/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu122/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu123/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu124/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu125/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu126/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu127/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -new file mode 100644 -index 0000000..6edc5b6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -@@ -0,0 +1 @@ -+2224 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings -new file mode 100644 -index 0000000..99374e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list -new file mode 100644 -index 0000000..9764eab ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings -new file mode 100644 -index 0000000..7e18bfb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list -new file mode 100644 -index 0000000..a949a93 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/thread_siblings_list -@@ -0,0 +1 @@ -+128 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu129/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu13/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu130/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu131/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu132/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu133/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu134/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu135/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id -new file mode 100644 -index 0000000..9813cea ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_id -@@ -0,0 +1 @@ -+2272 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings -new file mode 100644 -index 0000000..99374e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list -new file mode 100644 -index 0000000..9764eab ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings -new file mode 100644 -index 0000000..c05c51e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list -new file mode 100644 -index 0000000..7296f25 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu136/topology/thread_siblings_list -@@ -0,0 +1 @@ -+136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu137/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu138/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu139/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu14/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu140/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu141/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu142/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu143/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu144/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu145/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu146/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu147/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu148/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu149/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu15/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu150/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu151/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu152/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu153/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu154/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu155/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu156/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu157/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu158/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu159/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings -new file mode 100644 -index 0000000..94bd366 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list -new file mode 100644 -index 0000000..2887d7b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_siblings_list -@@ -0,0 +1 @@ -+16,24 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings -new file mode 100644 -index 0000000..f15bff6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/thread_siblings_list -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu17/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu18/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu19/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu2/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu20/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu21/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu22/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu23/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings -new file mode 100644 -index 0000000..94bd366 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list -new file mode 100644 -index 0000000..2887d7b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_siblings_list -@@ -0,0 +1 @@ -+16,24 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings -new file mode 100644 -index 0000000..c20308b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list -new file mode 100644 -index 0000000..a45fd52 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/thread_siblings_list -@@ -0,0 +1 @@ -+24 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu25/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu26/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu27/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu28/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu29/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu3/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu30/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu31/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu32/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu33/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu34/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu35/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu36/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu37/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu38/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu39/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu4/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id -new file mode 100644 -index 0000000..a762560 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_id -@@ -0,0 +1 @@ -+160 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings -new file mode 100644 -index 0000000..24976fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list -new file mode 100644 -index 0000000..b7a5a65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings -new file mode 100644 -index 0000000..d98f0b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu40/topology/thread_siblings_list -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu41/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu42/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu43/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu44/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu45/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu46/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu47/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -new file mode 100644 -index 0000000..1057e9a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -@@ -0,0 +1 @@ -+176 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings -new file mode 100644 -index 0000000..24976fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list -new file mode 100644 -index 0000000..b7a5a65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings -new file mode 100644 -index 0000000..943a83a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/thread_siblings_list -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu49/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu5/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu50/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu51/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu52/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu53/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu54/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu55/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu56/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu57/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu58/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu59/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu6/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu60/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu61/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu62/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu63/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu64/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu65/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu66/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu67/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu68/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu69/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu7/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu70/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu71/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -new file mode 100644 -index 0000000..eb08bc0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -@@ -0,0 +1 @@ -+240 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings -new file mode 100644 -index 0000000..24976fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00010100,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list -new file mode 100644 -index 0000000..b7a5a65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings -new file mode 100644 -index 0000000..b85a0fd ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list -new file mode 100644 -index 0000000..ea70ce0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/thread_siblings_list -@@ -0,0 +1 @@ -+72 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu73/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu74/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu75/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu76/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu77/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu78/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu79/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu8/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu80/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu81/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu82/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu83/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu84/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu85/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu86/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu87/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu88/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu89/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu9/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu90/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu91/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu92/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu93/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu94/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu95/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu96/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu97/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu98/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu99/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max -new file mode 100644 -index 0000000..b6ac305 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/kernel_max -@@ -0,0 +1 @@ -+2047 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline -new file mode 100644 -index 0000000..b74672a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/offline -@@ -0,0 +1 @@ -+0-15,17-23,25-39,41-47,49-71,73-103,105-111,113-119,121-127,129-135,137-159 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/online b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/online -new file mode 100644 -index 0000000..dbb065f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/online -@@ -0,0 +1 @@ -+16,24,40,48,72,104,112,120,128,136 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/possible -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/present b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/present -new file mode 100644 -index 0000000..4acfa9b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/present -@@ -0,0 +1 @@ -+16-31,40-55,72-79,104-143 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -new file mode 100644 -index 0000000..1033a39 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -@@ -0,0 +1,29 @@ -+Node 0 MemTotal: 67108864 kB -+Node 0 MemFree: 61726720 kB -+Node 0 MemUsed: 5382144 kB -+Node 0 Active: 276544 kB -+Node 0 Inactive: 174848 kB -+Node 0 Active(anon): 100928 kB -+Node 0 Inactive(anon): 9152 kB -+Node 0 Active(file): 175616 kB -+Node 0 Inactive(file): 165696 kB -+Node 0 Unevictable: 0 kB -+Node 0 Mlocked: 0 kB -+Node 0 Dirty: 69824 kB -+Node 0 Writeback: 0 kB -+Node 0 FilePages: 360256 kB -+Node 0 Mapped: 42752 kB -+Node 0 AnonPages: 93312 kB -+Node 0 Shmem: 16768 kB -+Node 0 KernelStack: 10208 kB -+Node 0 PageTables: 1472 kB -+Node 0 NFS_Unstable: 0 kB -+Node 0 Bounce: 0 kB -+Node 0 WritebackTmp: 0 kB -+Node 0 Slab: 184576 kB -+Node 0 SReclaimable: 57152 kB -+Node 0 SUnreclaim: 127424 kB -+Node 0 AnonHugePages: 0 kB -+Node 0 HugePages_Total: 0 -+Node 0 HugePages_Free: 0 -+Node 0 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -new file mode 100644 -index 0000000..600841b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -@@ -0,0 +1,29 @@ -+Node 1 MemTotal: 67108864 kB -+Node 1 MemFree: 66225792 kB -+Node 1 MemUsed: 883072 kB -+Node 1 Active: 247040 kB -+Node 1 Inactive: 82752 kB -+Node 1 Active(anon): 52800 kB -+Node 1 Inactive(anon): 192 kB -+Node 1 Active(file): 194240 kB -+Node 1 Inactive(file): 82560 kB -+Node 1 Unevictable: 0 kB -+Node 1 Mlocked: 0 kB -+Node 1 Dirty: 64 kB -+Node 1 Writeback: 0 kB -+Node 1 FilePages: 281344 kB -+Node 1 Mapped: 19264 kB -+Node 1 AnonPages: 49088 kB -+Node 1 Shmem: 4352 kB -+Node 1 KernelStack: 2960 kB -+Node 1 PageTables: 448 kB -+Node 1 NFS_Unstable: 0 kB -+Node 1 Bounce: 0 kB -+Node 1 WritebackTmp: 0 kB -+Node 1 Slab: 106368 kB -+Node 1 SReclaimable: 16448 kB -+Node 1 SUnreclaim: 89920 kB -+Node 1 AnonHugePages: 0 kB -+Node 1 HugePages_Total: 0 -+Node 1 HugePages_Free: 0 -+Node 1 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -new file mode 100644 -index 0000000..78350e1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -@@ -0,0 +1,29 @@ -+Node 16 MemTotal: 67108864 kB -+Node 16 MemFree: 66296832 kB -+Node 16 MemUsed: 812032 kB -+Node 16 Active: 145792 kB -+Node 16 Inactive: 131904 kB -+Node 16 Active(anon): 36352 kB -+Node 16 Inactive(anon): 320 kB -+Node 16 Active(file): 109440 kB -+Node 16 Inactive(file): 131584 kB -+Node 16 Unevictable: 0 kB -+Node 16 Mlocked: 0 kB -+Node 16 Dirty: 48256 kB -+Node 16 Writeback: 0 kB -+Node 16 FilePages: 246720 kB -+Node 16 Mapped: 7744 kB -+Node 16 AnonPages: 35968 kB -+Node 16 Shmem: 704 kB -+Node 16 KernelStack: 3232 kB -+Node 16 PageTables: 512 kB -+Node 16 NFS_Unstable: 0 kB -+Node 16 Bounce: 0 kB -+Node 16 WritebackTmp: 0 kB -+Node 16 Slab: 61760 kB -+Node 16 SReclaimable: 28736 kB -+Node 16 SUnreclaim: 33024 kB -+Node 16 AnonHugePages: 0 kB -+Node 16 HugePages_Total: 0 -+Node 16 HugePages_Free: 0 -+Node 16 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -new file mode 100644 -index 0000000..3e691f2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -@@ -0,0 +1,29 @@ -+Node 17 MemTotal: 67108864 kB -+Node 17 MemFree: 65890688 kB -+Node 17 MemUsed: 1218176 kB -+Node 17 Active: 250752 kB -+Node 17 Inactive: 181184 kB -+Node 17 Active(anon): 100544 kB -+Node 17 Inactive(anon): 320 kB -+Node 17 Active(file): 150208 kB -+Node 17 Inactive(file): 180864 kB -+Node 17 Unevictable: 0 kB -+Node 17 Mlocked: 0 kB -+Node 17 Dirty: 97856 kB -+Node 17 Writeback: 0 kB -+Node 17 FilePages: 341824 kB -+Node 17 Mapped: 2304 kB -+Node 17 AnonPages: 100736 kB -+Node 17 Shmem: 576 kB -+Node 17 KernelStack: 3088 kB -+Node 17 PageTables: 768 kB -+Node 17 NFS_Unstable: 0 kB -+Node 17 Bounce: 0 kB -+Node 17 WritebackTmp: 0 kB -+Node 17 Slab: 61760 kB -+Node 17 SReclaimable: 14912 kB -+Node 17 SUnreclaim: 46848 kB -+Node 17 AnonHugePages: 49152 kB -+Node 17 HugePages_Total: 0 -+Node 17 HugePages_Free: 0 -+Node 17 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/online b/tests/nodeinfodata/linux-deconfigured-cpus/node/online -new file mode 100644 -index 0000000..a41eb32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/online -@@ -0,0 +1 @@ -+0-1,16-17 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/possible b/tests/nodeinfodata/linux-deconfigured-cpus/node/possible -new file mode 100644 -index 0000000..8d232c7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/possible -@@ -0,0 +1 @@ -+0-255 -diff --git a/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo b/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo -new file mode 100644 -index 0000000..e5560e2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo -@@ -0,0 +1,55 @@ -+processor : 16 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 24 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 40 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 48 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 72 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 104 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 112 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 120 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 128 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 136 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+timebase : 512000000 -+platform : PowerNV -+model : 8247-22L -+machine : PowerNV 8247-22L -+firmware : OPAL v3 -diff --git a/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected b/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected -new file mode 100644 -index 0000000..304f423 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected -@@ -0,0 +1 @@ -+CPUs: 10/80, MHz: 3690, Nodes: 1, Sockets: 1, Cores: 80, Threads: 1 -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index 8d0a06f..be099f0 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -234,6 +234,7 @@ mymain(void) - {"raspberrypi", VIR_ARCH_ARMV6L}, - {"f21-mustang", VIR_ARCH_AARCH64}, - {"rhelsa-3.19.0-mustang", VIR_ARCH_AARCH64}, -+ {"deconfigured-cpus", VIR_ARCH_PPC64}, - }; - - if (virInitialize() < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Add-some-compatibility-related-cases-to-the-CPU-tests.patch b/SOURCES/libvirt-tests-Add-some-compatibility-related-cases-to-the-CPU-tests.patch deleted file mode 100644 index bb601f2..0000000 --- a/SOURCES/libvirt-tests-Add-some-compatibility-related-cases-to-the-CPU-tests.patch +++ /dev/null @@ -1,214 +0,0 @@ -From eac642265fb445d028457e9f974dd3ae5f5b9529 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Fri, 21 Aug 2015 16:36:04 -0700 -Subject: [PATCH] tests: Add some compatibility-related cases to the CPU tests - -(cherry picked from commit 7dc52241b314adb19ca4f0af156d772e3d5a29a5) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1251927 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/cputest.c | 14 ++++++++++++++ - tests/cputestdata/ppc64-guest-compat-incompatible.xml | 3 +++ - tests/cputestdata/ppc64-guest-compat-invalid.xml | 3 +++ - tests/cputestdata/ppc64-guest-compat-none.xml | 1 + - tests/cputestdata/ppc64-guest-compat-valid.xml | 3 +++ - tests/cputestdata/ppc64-guest-host-model.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-compat-incompatible.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-compat-invalid.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-compat-none.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-compat-valid.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-host-model.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-legacy-incompatible.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-legacy-invalid.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-legacy.xml | 3 +++ - tests/cputestdata/ppc64-host+guest-nofallback.xml | 3 +++ - tests/cputestdata/ppc64-host+guest.xml | 3 +++ - 16 files changed, 57 insertions(+) - create mode 100644 tests/cputestdata/ppc64-guest-compat-incompatible.xml - create mode 100644 tests/cputestdata/ppc64-guest-compat-invalid.xml - create mode 100644 tests/cputestdata/ppc64-guest-compat-none.xml - create mode 100644 tests/cputestdata/ppc64-guest-compat-valid.xml - create mode 100644 tests/cputestdata/ppc64-guest-host-model.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-compat-incompatible.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-compat-invalid.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-compat-none.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-compat-valid.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-host-model.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-legacy-incompatible.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-legacy-invalid.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-legacy.xml - create mode 100644 tests/cputestdata/ppc64-host+guest-nofallback.xml - create mode 100644 tests/cputestdata/ppc64-host+guest.xml - -diff --git a/tests/cputest.c b/tests/cputest.c -index 5992dd0..431b587 100644 ---- a/tests/cputest.c -+++ b/tests/cputest.c -@@ -607,6 +607,10 @@ mymain(void) - DO_TEST_COMPARE("ppc64", "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); -+ DO_TEST_COMPARE("ppc64", "host", "guest-compat-none", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_COMPARE("ppc64", "host", "guest-compat-valid", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_COMPARE("ppc64", "host", "guest-compat-invalid", VIR_CPU_COMPARE_ERROR); -+ DO_TEST_COMPARE("ppc64", "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); - - /* guest updates for migration - * automatically compares host CPU with the result */ -@@ -618,6 +622,16 @@ mymain(void) - DO_TEST_UPDATE("x86", "host", "host-passthrough", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86", "host-invtsc", "host-model", VIR_CPU_COMPARE_SUPERSET); - -+ DO_TEST_UPDATE("ppc64", "host", "guest", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_UPDATE("ppc64", "host", "guest-nofallback", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_UPDATE("ppc64", "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_UPDATE("ppc64", "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); -+ DO_TEST_UPDATE("ppc64", "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); -+ DO_TEST_UPDATE("ppc64", "host", "guest-compat-none", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_UPDATE("ppc64", "host", "guest-compat-valid", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_UPDATE("ppc64", "host", "guest-compat-invalid", VIR_CPU_COMPARE_ERROR); -+ DO_TEST_UPDATE("ppc64", "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); -+ - /* computing baseline CPUs */ - DO_TEST_BASELINE("x86", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("x86", "no-vendor", 0, 0); -diff --git a/tests/cputestdata/ppc64-guest-compat-incompatible.xml b/tests/cputestdata/ppc64-guest-compat-incompatible.xml -new file mode 100644 -index 0000000..3f130fa ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-compat-incompatible.xml -@@ -0,0 +1,3 @@ -+ -+ power8 -+ -diff --git a/tests/cputestdata/ppc64-guest-compat-invalid.xml b/tests/cputestdata/ppc64-guest-compat-invalid.xml -new file mode 100644 -index 0000000..f35cb21 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-compat-invalid.xml -@@ -0,0 +1,3 @@ -+ -+ power7+ -+ -diff --git a/tests/cputestdata/ppc64-guest-compat-none.xml b/tests/cputestdata/ppc64-guest-compat-none.xml -new file mode 100644 -index 0000000..fd50c03 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-compat-none.xml -@@ -0,0 +1 @@ -+ -diff --git a/tests/cputestdata/ppc64-guest-compat-valid.xml b/tests/cputestdata/ppc64-guest-compat-valid.xml -new file mode 100644 -index 0000000..bf01e54 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-compat-valid.xml -@@ -0,0 +1,3 @@ -+ -+ power6 -+ -diff --git a/tests/cputestdata/ppc64-guest-host-model.xml b/tests/cputestdata/ppc64-guest-host-model.xml -new file mode 100644 -index 0000000..188ebeb ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-host-model.xml -@@ -0,0 +1,3 @@ -+ -+ -+ -diff --git a/tests/cputestdata/ppc64-host+guest-compat-incompatible.xml b/tests/cputestdata/ppc64-host+guest-compat-incompatible.xml -new file mode 100644 -index 0000000..1fab751 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-compat-incompatible.xml -@@ -0,0 +1,3 @@ -+ -+ power8 -+ -diff --git a/tests/cputestdata/ppc64-host+guest-compat-invalid.xml b/tests/cputestdata/ppc64-host+guest-compat-invalid.xml -new file mode 100644 -index 0000000..bc0d829 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-compat-invalid.xml -@@ -0,0 +1,3 @@ -+ -+ power7+ -+ -diff --git a/tests/cputestdata/ppc64-host+guest-compat-none.xml b/tests/cputestdata/ppc64-host+guest-compat-none.xml -new file mode 100644 -index 0000000..188ebeb ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-compat-none.xml -@@ -0,0 +1,3 @@ -+ -+ -+ -diff --git a/tests/cputestdata/ppc64-host+guest-compat-valid.xml b/tests/cputestdata/ppc64-host+guest-compat-valid.xml -new file mode 100644 -index 0000000..da9cc91 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-compat-valid.xml -@@ -0,0 +1,3 @@ -+ -+ power6 -+ -diff --git a/tests/cputestdata/ppc64-host+guest-host-model.xml b/tests/cputestdata/ppc64-host+guest-host-model.xml -new file mode 100644 -index 0000000..188ebeb ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-host-model.xml -@@ -0,0 +1,3 @@ -+ -+ -+ -diff --git a/tests/cputestdata/ppc64-host+guest-legacy-incompatible.xml b/tests/cputestdata/ppc64-host+guest-legacy-incompatible.xml -new file mode 100644 -index 0000000..f5b8384 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-legacy-incompatible.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8_v1.0 -+ -diff --git a/tests/cputestdata/ppc64-host+guest-legacy-invalid.xml b/tests/cputestdata/ppc64-host+guest-legacy-invalid.xml -new file mode 100644 -index 0000000..be059c3 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-legacy-invalid.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8E_v1.0 -+ -diff --git a/tests/cputestdata/ppc64-host+guest-legacy.xml b/tests/cputestdata/ppc64-host+guest-legacy.xml -new file mode 100644 -index 0000000..36bae52 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-legacy.xml -@@ -0,0 +1,3 @@ -+ -+ POWER7_v2.3 -+ -diff --git a/tests/cputestdata/ppc64-host+guest-nofallback.xml b/tests/cputestdata/ppc64-host+guest-nofallback.xml -new file mode 100644 -index 0000000..0223018 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest-nofallback.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8 -+ -diff --git a/tests/cputestdata/ppc64-host+guest.xml b/tests/cputestdata/ppc64-host+guest.xml -new file mode 100644 -index 0000000..7fac4b7 ---- /dev/null -+++ b/tests/cputestdata/ppc64-host+guest.xml -@@ -0,0 +1,3 @@ -+ -+ POWER7 -+ --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Add-subcores1-nodeinfo-test.patch b/SOURCES/libvirt-tests-Add-subcores1-nodeinfo-test.patch deleted file mode 100644 index c747e17..0000000 --- a/SOURCES/libvirt-tests-Add-subcores1-nodeinfo-test.patch +++ /dev/null @@ -1,4489 +0,0 @@ -From 1cee624a46dbb293a4919155d5154911d1eebb2f Mon Sep 17 00:00:00 2001 -Message-Id: <1cee624a46dbb293a4919155d5154911d1eebb2f@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:37 +0200 -Subject: [PATCH] tests: Add subcores1 nodeinfo test - -This makes sure CPUs are counted correctly when using the default -configuration, that is, all primary threads are online and all -secondary threads are offline. - -(cherry picked from commit ad43a09cbaf660e06fe94f9c22db80ba1ee0bd5b) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/nodeinfodata/linux-ppc64-subcores1.cpuinfo | 105 +++++++++++++++++++++ - tests/nodeinfodata/linux-ppc64-subcores1.expected | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu0/online | 1 + - .../linux-subcores1/cpu/cpu0/topology/core_id | 1 + - .../cpu/cpu0/topology/core_siblings | 1 + - .../cpu/cpu0/topology/core_siblings_list | 1 + - .../cpu/cpu0/topology/physical_package_id | 1 + - .../cpu/cpu0/topology/thread_siblings | 1 + - .../cpu/cpu0/topology/thread_siblings_list | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu1/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu10/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu100/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu101/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu102/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu103/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu104/online | 1 + - .../linux-subcores1/cpu/cpu104/topology/core_id | 1 + - .../cpu/cpu104/topology/core_siblings | 1 + - .../cpu/cpu104/topology/core_siblings_list | 1 + - .../cpu/cpu104/topology/physical_package_id | 1 + - .../cpu/cpu104/topology/thread_siblings | 1 + - .../cpu/cpu104/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu105/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu106/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu107/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu108/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu109/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu11/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu110/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu111/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu112/online | 1 + - .../linux-subcores1/cpu/cpu112/topology/core_id | 1 + - .../cpu/cpu112/topology/core_siblings | 1 + - .../cpu/cpu112/topology/core_siblings_list | 1 + - .../cpu/cpu112/topology/physical_package_id | 1 + - .../cpu/cpu112/topology/thread_siblings | 1 + - .../cpu/cpu112/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu113/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu114/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu115/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu116/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu117/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu118/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu119/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu12/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu120/online | 1 + - .../linux-subcores1/cpu/cpu120/topology/core_id | 1 + - .../cpu/cpu120/topology/core_siblings | 1 + - .../cpu/cpu120/topology/core_siblings_list | 1 + - .../cpu/cpu120/topology/physical_package_id | 1 + - .../cpu/cpu120/topology/thread_siblings | 1 + - .../cpu/cpu120/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu121/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu122/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu123/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu124/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu125/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu126/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu127/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu128/online | 1 + - .../linux-subcores1/cpu/cpu128/topology/core_id | 1 + - .../cpu/cpu128/topology/core_siblings | 1 + - .../cpu/cpu128/topology/core_siblings_list | 1 + - .../cpu/cpu128/topology/physical_package_id | 1 + - .../cpu/cpu128/topology/thread_siblings | 1 + - .../cpu/cpu128/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu129/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu13/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu130/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu131/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu132/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu133/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu134/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu135/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu136/online | 1 + - .../linux-subcores1/cpu/cpu136/topology/core_id | 1 + - .../cpu/cpu136/topology/core_siblings | 1 + - .../cpu/cpu136/topology/core_siblings_list | 1 + - .../cpu/cpu136/topology/physical_package_id | 1 + - .../cpu/cpu136/topology/thread_siblings | 1 + - .../cpu/cpu136/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu137/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu138/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu139/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu14/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu140/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu141/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu142/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu143/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu144/online | 1 + - .../linux-subcores1/cpu/cpu144/topology/core_id | 1 + - .../cpu/cpu144/topology/core_siblings | 1 + - .../cpu/cpu144/topology/core_siblings_list | 1 + - .../cpu/cpu144/topology/physical_package_id | 1 + - .../cpu/cpu144/topology/thread_siblings | 1 + - .../cpu/cpu144/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu145/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu146/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu147/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu148/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu149/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu15/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu150/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu151/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu152/online | 1 + - .../linux-subcores1/cpu/cpu152/topology/core_id | 1 + - .../cpu/cpu152/topology/core_siblings | 1 + - .../cpu/cpu152/topology/core_siblings_list | 1 + - .../cpu/cpu152/topology/physical_package_id | 1 + - .../cpu/cpu152/topology/thread_siblings | 1 + - .../cpu/cpu152/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu153/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu154/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu155/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu156/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu157/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu158/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu159/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu16/online | 1 + - .../linux-subcores1/cpu/cpu16/topology/core_id | 1 + - .../cpu/cpu16/topology/core_siblings | 1 + - .../cpu/cpu16/topology/core_siblings_list | 1 + - .../cpu/cpu16/topology/physical_package_id | 1 + - .../cpu/cpu16/topology/thread_siblings | 1 + - .../cpu/cpu16/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu17/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu18/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu19/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu2/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu20/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu21/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu22/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu23/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu24/online | 1 + - .../linux-subcores1/cpu/cpu24/topology/core_id | 1 + - .../cpu/cpu24/topology/core_siblings | 1 + - .../cpu/cpu24/topology/core_siblings_list | 1 + - .../cpu/cpu24/topology/physical_package_id | 1 + - .../cpu/cpu24/topology/thread_siblings | 1 + - .../cpu/cpu24/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu25/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu26/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu27/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu28/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu29/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu3/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu30/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu31/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu32/online | 1 + - .../linux-subcores1/cpu/cpu32/topology/core_id | 1 + - .../cpu/cpu32/topology/core_siblings | 1 + - .../cpu/cpu32/topology/core_siblings_list | 1 + - .../cpu/cpu32/topology/physical_package_id | 1 + - .../cpu/cpu32/topology/thread_siblings | 1 + - .../cpu/cpu32/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu33/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu34/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu35/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu36/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu37/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu38/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu39/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu4/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu40/online | 1 + - .../linux-subcores1/cpu/cpu40/topology/core_id | 1 + - .../cpu/cpu40/topology/core_siblings | 1 + - .../cpu/cpu40/topology/core_siblings_list | 1 + - .../cpu/cpu40/topology/physical_package_id | 1 + - .../cpu/cpu40/topology/thread_siblings | 1 + - .../cpu/cpu40/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu41/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu42/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu43/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu44/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu45/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu46/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu47/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu48/online | 1 + - .../linux-subcores1/cpu/cpu48/topology/core_id | 1 + - .../cpu/cpu48/topology/core_siblings | 1 + - .../cpu/cpu48/topology/core_siblings_list | 1 + - .../cpu/cpu48/topology/physical_package_id | 1 + - .../cpu/cpu48/topology/thread_siblings | 1 + - .../cpu/cpu48/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu49/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu5/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu50/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu51/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu52/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu53/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu54/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu55/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu56/online | 1 + - .../linux-subcores1/cpu/cpu56/topology/core_id | 1 + - .../cpu/cpu56/topology/core_siblings | 1 + - .../cpu/cpu56/topology/core_siblings_list | 1 + - .../cpu/cpu56/topology/physical_package_id | 1 + - .../cpu/cpu56/topology/thread_siblings | 1 + - .../cpu/cpu56/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu57/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu58/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu59/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu6/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu60/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu61/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu62/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu63/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu64/online | 1 + - .../linux-subcores1/cpu/cpu64/topology/core_id | 1 + - .../cpu/cpu64/topology/core_siblings | 1 + - .../cpu/cpu64/topology/core_siblings_list | 1 + - .../cpu/cpu64/topology/physical_package_id | 1 + - .../cpu/cpu64/topology/thread_siblings | 1 + - .../cpu/cpu64/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu65/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu66/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu67/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu68/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu69/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu7/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu70/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu71/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu72/online | 1 + - .../linux-subcores1/cpu/cpu72/topology/core_id | 1 + - .../cpu/cpu72/topology/core_siblings | 1 + - .../cpu/cpu72/topology/core_siblings_list | 1 + - .../cpu/cpu72/topology/physical_package_id | 1 + - .../cpu/cpu72/topology/thread_siblings | 1 + - .../cpu/cpu72/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu73/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu74/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu75/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu76/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu77/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu78/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu79/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu8/online | 1 + - .../linux-subcores1/cpu/cpu8/topology/core_id | 1 + - .../cpu/cpu8/topology/core_siblings | 1 + - .../cpu/cpu8/topology/core_siblings_list | 1 + - .../cpu/cpu8/topology/physical_package_id | 1 + - .../cpu/cpu8/topology/thread_siblings | 1 + - .../cpu/cpu8/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu80/online | 1 + - .../linux-subcores1/cpu/cpu80/topology/core_id | 1 + - .../cpu/cpu80/topology/core_siblings | 1 + - .../cpu/cpu80/topology/core_siblings_list | 1 + - .../cpu/cpu80/topology/physical_package_id | 1 + - .../cpu/cpu80/topology/thread_siblings | 1 + - .../cpu/cpu80/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu81/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu82/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu83/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu84/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu85/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu86/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu87/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu88/online | 1 + - .../linux-subcores1/cpu/cpu88/topology/core_id | 1 + - .../cpu/cpu88/topology/core_siblings | 1 + - .../cpu/cpu88/topology/core_siblings_list | 1 + - .../cpu/cpu88/topology/physical_package_id | 1 + - .../cpu/cpu88/topology/thread_siblings | 1 + - .../cpu/cpu88/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu89/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/cpu9/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu90/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu91/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu92/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu93/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu94/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu95/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu96/online | 1 + - .../linux-subcores1/cpu/cpu96/topology/core_id | 1 + - .../cpu/cpu96/topology/core_siblings | 1 + - .../cpu/cpu96/topology/core_siblings_list | 1 + - .../cpu/cpu96/topology/physical_package_id | 1 + - .../cpu/cpu96/topology/thread_siblings | 1 + - .../cpu/cpu96/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu97/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu98/online | 1 + - .../nodeinfodata/linux-subcores1/cpu/cpu99/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/kernel_max | 1 + - tests/nodeinfodata/linux-subcores1/cpu/offline | 1 + - tests/nodeinfodata/linux-subcores1/cpu/online | 1 + - tests/nodeinfodata/linux-subcores1/cpu/possible | 1 + - tests/nodeinfodata/linux-subcores1/cpu/present | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu0 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu1 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu10 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu11 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu12 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu13 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu14 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu15 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu16 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu17 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu18 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu19 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu2 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu20 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu21 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu22 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu23 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu24 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu25 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu26 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu27 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu28 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu29 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu3 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu30 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu31 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu32 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu33 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu34 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu35 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu36 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu37 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu38 | 1 + - .../nodeinfodata/linux-subcores1/node/node0/cpu39 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu4 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu5 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu6 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu7 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu8 | 1 + - tests/nodeinfodata/linux-subcores1/node/node0/cpu9 | 1 + - .../linux-subcores1/node/node0/meminfo | 29 ++++++ - .../nodeinfodata/linux-subcores1/node/node1/cpu40 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu41 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu42 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu43 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu44 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu45 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu46 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu47 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu48 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu49 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu50 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu51 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu52 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu53 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu54 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu55 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu56 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu57 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu58 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu59 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu60 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu61 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu62 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu63 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu64 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu65 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu66 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu67 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu68 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu69 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu70 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu71 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu72 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu73 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu74 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu75 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu76 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu77 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu78 | 1 + - .../nodeinfodata/linux-subcores1/node/node1/cpu79 | 1 + - .../linux-subcores1/node/node1/meminfo | 29 ++++++ - .../linux-subcores1/node/node16/cpu100 | 1 + - .../linux-subcores1/node/node16/cpu101 | 1 + - .../linux-subcores1/node/node16/cpu102 | 1 + - .../linux-subcores1/node/node16/cpu103 | 1 + - .../linux-subcores1/node/node16/cpu104 | 1 + - .../linux-subcores1/node/node16/cpu105 | 1 + - .../linux-subcores1/node/node16/cpu106 | 1 + - .../linux-subcores1/node/node16/cpu107 | 1 + - .../linux-subcores1/node/node16/cpu108 | 1 + - .../linux-subcores1/node/node16/cpu109 | 1 + - .../linux-subcores1/node/node16/cpu110 | 1 + - .../linux-subcores1/node/node16/cpu111 | 1 + - .../linux-subcores1/node/node16/cpu112 | 1 + - .../linux-subcores1/node/node16/cpu113 | 1 + - .../linux-subcores1/node/node16/cpu114 | 1 + - .../linux-subcores1/node/node16/cpu115 | 1 + - .../linux-subcores1/node/node16/cpu116 | 1 + - .../linux-subcores1/node/node16/cpu117 | 1 + - .../linux-subcores1/node/node16/cpu118 | 1 + - .../linux-subcores1/node/node16/cpu119 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu80 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu81 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu82 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu83 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu84 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu85 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu86 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu87 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu88 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu89 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu90 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu91 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu92 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu93 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu94 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu95 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu96 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu97 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu98 | 1 + - .../nodeinfodata/linux-subcores1/node/node16/cpu99 | 1 + - .../linux-subcores1/node/node16/meminfo | 29 ++++++ - .../linux-subcores1/node/node17/cpu120 | 1 + - .../linux-subcores1/node/node17/cpu121 | 1 + - .../linux-subcores1/node/node17/cpu122 | 1 + - .../linux-subcores1/node/node17/cpu123 | 1 + - .../linux-subcores1/node/node17/cpu124 | 1 + - .../linux-subcores1/node/node17/cpu125 | 1 + - .../linux-subcores1/node/node17/cpu126 | 1 + - .../linux-subcores1/node/node17/cpu127 | 1 + - .../linux-subcores1/node/node17/cpu128 | 1 + - .../linux-subcores1/node/node17/cpu129 | 1 + - .../linux-subcores1/node/node17/cpu130 | 1 + - .../linux-subcores1/node/node17/cpu131 | 1 + - .../linux-subcores1/node/node17/cpu132 | 1 + - .../linux-subcores1/node/node17/cpu133 | 1 + - .../linux-subcores1/node/node17/cpu134 | 1 + - .../linux-subcores1/node/node17/cpu135 | 1 + - .../linux-subcores1/node/node17/cpu136 | 1 + - .../linux-subcores1/node/node17/cpu137 | 1 + - .../linux-subcores1/node/node17/cpu138 | 1 + - .../linux-subcores1/node/node17/cpu139 | 1 + - .../linux-subcores1/node/node17/cpu140 | 1 + - .../linux-subcores1/node/node17/cpu141 | 1 + - .../linux-subcores1/node/node17/cpu142 | 1 + - .../linux-subcores1/node/node17/cpu143 | 1 + - .../linux-subcores1/node/node17/cpu144 | 1 + - .../linux-subcores1/node/node17/cpu145 | 1 + - .../linux-subcores1/node/node17/cpu146 | 1 + - .../linux-subcores1/node/node17/cpu147 | 1 + - .../linux-subcores1/node/node17/cpu148 | 1 + - .../linux-subcores1/node/node17/cpu149 | 1 + - .../linux-subcores1/node/node17/cpu150 | 1 + - .../linux-subcores1/node/node17/cpu151 | 1 + - .../linux-subcores1/node/node17/cpu152 | 1 + - .../linux-subcores1/node/node17/cpu153 | 1 + - .../linux-subcores1/node/node17/cpu154 | 1 + - .../linux-subcores1/node/node17/cpu155 | 1 + - .../linux-subcores1/node/node17/cpu156 | 1 + - .../linux-subcores1/node/node17/cpu157 | 1 + - .../linux-subcores1/node/node17/cpu158 | 1 + - .../linux-subcores1/node/node17/cpu159 | 1 + - .../linux-subcores1/node/node17/meminfo | 29 ++++++ - tests/nodeinfodata/linux-subcores1/node/online | 1 + - tests/nodeinfodata/linux-subcores1/node/possible | 1 + - tests/nodeinfotest.c | 2 + - 454 files changed, 671 insertions(+) - create mode 100644 tests/nodeinfodata/linux-ppc64-subcores1.cpuinfo - create mode 100644 tests/nodeinfodata/linux-ppc64-subcores1.expected - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu1/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu10/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu100/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu101/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu102/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu103/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu105/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu106/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu107/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu108/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu109/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu11/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu110/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu111/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu113/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu114/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu115/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu116/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu117/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu118/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu119/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu12/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu121/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu122/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu123/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu124/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu125/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu126/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu127/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu129/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu13/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu130/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu131/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu132/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu133/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu134/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu135/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu137/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu138/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu139/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu14/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu140/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu141/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu142/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu143/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu145/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu146/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu147/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu148/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu149/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu15/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu150/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu151/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu153/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu154/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu155/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu156/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu157/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu158/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu159/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu17/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu18/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu19/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu2/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu20/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu21/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu22/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu23/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu25/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu26/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu27/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu28/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu29/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu3/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu30/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu31/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu33/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu34/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu35/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu36/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu37/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu38/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu39/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu4/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu41/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu42/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu43/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu44/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu45/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu46/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu47/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu49/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu5/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu50/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu51/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu52/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu53/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu54/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu55/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu57/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu58/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu59/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu6/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu60/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu61/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu62/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu63/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu65/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu66/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu67/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu68/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu69/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu7/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu70/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu71/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu73/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu74/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu75/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu76/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu77/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu78/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu79/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu81/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu82/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu83/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu84/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu85/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu86/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu87/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu89/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu9/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu90/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu91/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu92/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu93/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu94/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu95/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu97/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu98/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/cpu99/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/kernel_max - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/offline - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/online - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/possible - create mode 100644 tests/nodeinfodata/linux-subcores1/cpu/present - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu0 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu1 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu10 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu11 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu12 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu13 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu14 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu15 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu16 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu17 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu18 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu19 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu2 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu20 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu21 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu22 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu23 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu24 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu25 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu26 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu27 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu28 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu29 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu3 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu30 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu31 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu32 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu33 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu34 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu35 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu36 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu37 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu38 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu39 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu4 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu5 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu6 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu7 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu8 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node0/cpu9 - create mode 100644 tests/nodeinfodata/linux-subcores1/node/node0/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu40 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu41 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu42 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu43 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu44 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu45 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu46 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu47 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu48 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu49 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu50 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu51 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu52 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu53 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu54 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu55 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu56 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu57 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu58 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu59 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu60 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu61 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu62 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu63 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu64 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu65 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu66 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu67 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu68 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu69 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu70 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu71 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu72 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu73 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu74 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu75 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu76 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu77 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu78 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node1/cpu79 - create mode 100644 tests/nodeinfodata/linux-subcores1/node/node1/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu100 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu101 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu102 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu103 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu104 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu105 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu106 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu107 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu108 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu109 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu110 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu111 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu112 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu113 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu114 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu115 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu116 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu117 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu118 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu119 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu80 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu81 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu82 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu83 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu84 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu85 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu86 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu87 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu88 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu89 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu90 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu91 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu92 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu93 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu94 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu95 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu96 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu97 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu98 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node16/cpu99 - create mode 100644 tests/nodeinfodata/linux-subcores1/node/node16/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu120 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu121 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu122 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu123 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu124 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu125 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu126 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu127 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu128 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu129 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu130 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu131 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu132 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu133 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu134 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu135 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu136 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu137 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu138 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu139 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu140 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu141 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu142 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu143 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu144 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu145 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu146 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu147 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu148 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu149 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu150 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu151 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu152 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu153 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu154 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu155 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu156 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu157 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu158 - create mode 120000 tests/nodeinfodata/linux-subcores1/node/node17/cpu159 - create mode 100644 tests/nodeinfodata/linux-subcores1/node/node17/meminfo - create mode 100644 tests/nodeinfodata/linux-subcores1/node/online - create mode 100644 tests/nodeinfodata/linux-subcores1/node/possible - -diff --git a/tests/nodeinfodata/linux-ppc64-subcores1.cpuinfo b/tests/nodeinfodata/linux-ppc64-subcores1.cpuinfo -new file mode 100644 -index 0000000..549fce6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-subcores1.cpuinfo -@@ -0,0 +1,105 @@ -+processor : 0 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 8 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 16 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 24 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 32 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 40 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 48 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 56 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 64 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 72 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 80 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 88 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 96 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 104 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 112 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 120 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 128 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 136 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 144 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 152 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+timebase : 512000000 -+platform : PowerNV -+model : 8247-22L -+machine : PowerNV 8247-22L -+firmware : OPAL v3 -diff --git a/tests/nodeinfodata/linux-ppc64-subcores1.expected b/tests/nodeinfodata/linux-ppc64-subcores1.expected -new file mode 100644 -index 0000000..0859255 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-subcores1.expected -@@ -0,0 +1 @@ -+CPUs: 160/160, MHz: 3690, Nodes: 4, Sockets: 1, Cores: 5, Threads: 8 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_id -new file mode 100644 -index 0000000..f5c8955 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_id -@@ -0,0 +1 @@ -+32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings -new file mode 100644 -index 0000000..b7ec4e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings_list -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu0/topology/thread_siblings_list -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu1/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu1/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu1/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu10/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu10/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu10/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu100/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu100/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu100/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu101/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu101/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu101/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu102/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu102/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu102/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu103/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu103/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu103/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_id -new file mode 100644 -index 0000000..9bb71ca ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_id -@@ -0,0 +1 @@ -+2152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings -new file mode 100644 -index 0000000..b4fa391 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings_list -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu104/topology/thread_siblings_list -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu105/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu105/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu105/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu106/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu106/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu106/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu107/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu107/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu107/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu108/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu108/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu108/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu109/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu109/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu109/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu11/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu11/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu11/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu110/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu110/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu110/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu111/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu111/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu111/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_id -new file mode 100644 -index 0000000..317509b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_id -@@ -0,0 +1 @@ -+2160 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings -new file mode 100644 -index 0000000..968e322 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings_list -new file mode 100644 -index 0000000..194b81c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu112/topology/thread_siblings_list -@@ -0,0 +1 @@ -+112 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu113/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu113/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu113/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu114/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu114/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu114/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu115/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu115/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu115/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu116/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu116/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu116/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu117/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu117/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu117/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu118/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu118/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu118/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu119/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu119/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu119/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu12/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu12/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu12/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_id -new file mode 100644 -index 0000000..b17e4bd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_id -@@ -0,0 +1 @@ -+2208 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings -new file mode 100644 -index 0000000..50fc716 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings_list -new file mode 100644 -index 0000000..8ece26a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136,144,152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings -new file mode 100644 -index 0000000..13eaaf3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings_list -new file mode 100644 -index 0000000..52bd8e4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu120/topology/thread_siblings_list -@@ -0,0 +1 @@ -+120 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu121/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu121/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu121/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu122/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu122/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu122/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu123/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu123/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu123/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu124/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu124/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu124/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu125/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu125/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu125/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu126/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu126/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu126/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu127/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu127/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu127/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_id -new file mode 100644 -index 0000000..5c54d10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_id -@@ -0,0 +1 @@ -+2216 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings -new file mode 100644 -index 0000000..50fc716 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings_list -new file mode 100644 -index 0000000..8ece26a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136,144,152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings -new file mode 100644 -index 0000000..7e18bfb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings_list -new file mode 100644 -index 0000000..a949a93 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu128/topology/thread_siblings_list -@@ -0,0 +1 @@ -+128 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu129/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu129/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu129/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu13/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu13/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu13/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu130/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu130/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu130/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu131/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu131/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu131/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu132/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu132/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu132/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu133/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu133/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu133/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu134/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu134/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu134/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu135/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu135/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu135/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_id -new file mode 100644 -index 0000000..9813cea ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_id -@@ -0,0 +1 @@ -+2272 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings -new file mode 100644 -index 0000000..50fc716 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings_list -new file mode 100644 -index 0000000..8ece26a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136,144,152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings -new file mode 100644 -index 0000000..c05c51e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings_list -new file mode 100644 -index 0000000..7296f25 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu136/topology/thread_siblings_list -@@ -0,0 +1 @@ -+136 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu137/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu137/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu137/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu138/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu138/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu138/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu139/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu139/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu139/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu14/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu14/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu14/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu140/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu140/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu140/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu141/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu141/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu141/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu142/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu142/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu142/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu143/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu143/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu143/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_id -new file mode 100644 -index 0000000..acd19c9 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_id -@@ -0,0 +1 @@ -+2280 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings -new file mode 100644 -index 0000000..50fc716 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings_list -new file mode 100644 -index 0000000..8ece26a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136,144,152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings -new file mode 100644 -index 0000000..5630ba0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings_list -new file mode 100644 -index 0000000..a29644e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu144/topology/thread_siblings_list -@@ -0,0 +1 @@ -+144 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu145/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu145/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu145/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu146/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu146/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu146/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu147/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu147/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu147/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu148/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu148/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu148/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu149/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu149/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu149/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu15/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu15/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu15/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu150/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu150/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu150/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu151/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu151/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu151/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings -new file mode 100644 -index 0000000..50fc716 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01010101,01000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings_list -new file mode 100644 -index 0000000..8ece26a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/core_siblings_list -@@ -0,0 +1 @@ -+120,128,136,144,152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings -new file mode 100644 -index 0000000..4602fcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings_list -new file mode 100644 -index 0000000..492dff0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu152/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu153/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu153/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu153/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu154/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu154/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu154/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu155/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu155/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu155/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu156/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu156/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu156/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu157/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu157/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu157/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu158/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu158/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu158/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu159/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu159/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu159/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_id -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_id -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings -new file mode 100644 -index 0000000..f15bff6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings_list -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu16/topology/thread_siblings_list -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu17/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu17/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu17/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu18/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu18/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu18/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu19/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu19/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu19/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu2/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu2/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu2/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu20/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu20/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu20/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu21/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu21/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu21/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu22/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu22/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu22/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu23/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu23/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu23/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_id -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_id -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings -new file mode 100644 -index 0000000..c20308b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings_list -new file mode 100644 -index 0000000..a45fd52 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu24/topology/thread_siblings_list -@@ -0,0 +1 @@ -+24 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu25/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu25/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu25/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu26/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu26/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu26/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu27/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu27/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu27/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu28/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu28/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu28/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu29/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu29/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu29/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu3/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu3/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu3/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu30/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu30/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu30/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu31/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu31/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu31/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_id -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_id -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings -new file mode 100644 -index 0000000..086b155 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings_list -new file mode 100644 -index 0000000..f5c8955 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu32/topology/thread_siblings_list -@@ -0,0 +1 @@ -+32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu33/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu33/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu33/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu34/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu34/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu34/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu35/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu35/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu35/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu36/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu36/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu36/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu37/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu37/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu37/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu38/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu38/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu38/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu39/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu39/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu39/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu4/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu4/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu4/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_id -new file mode 100644 -index 0000000..a762560 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_id -@@ -0,0 +1 @@ -+160 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings -new file mode 100644 -index 0000000..513d74e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings_list -new file mode 100644 -index 0000000..1870c91 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,64,72 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings -new file mode 100644 -index 0000000..d98f0b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings_list -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu40/topology/thread_siblings_list -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu41/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu41/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu41/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu42/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu42/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu42/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu43/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu43/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu43/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu44/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu44/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu44/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu45/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu45/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu45/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu46/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu46/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu46/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu47/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu47/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu47/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_id -new file mode 100644 -index 0000000..de8febe ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_id -@@ -0,0 +1 @@ -+168 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings -new file mode 100644 -index 0000000..513d74e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings_list -new file mode 100644 -index 0000000..1870c91 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,64,72 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings -new file mode 100644 -index 0000000..943a83a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings_list -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu48/topology/thread_siblings_list -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu49/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu49/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu49/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu5/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu5/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu5/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu50/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu50/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu50/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu51/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu51/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu51/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu52/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu52/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu52/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu53/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu53/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu53/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu54/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu54/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu54/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu55/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu55/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu55/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_id -new file mode 100644 -index 0000000..1057e9a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_id -@@ -0,0 +1 @@ -+176 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings -new file mode 100644 -index 0000000..513d74e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings_list -new file mode 100644 -index 0000000..1870c91 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,64,72 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings -new file mode 100644 -index 0000000..d25e217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings_list -new file mode 100644 -index 0000000..f6b91e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu56/topology/thread_siblings_list -@@ -0,0 +1 @@ -+56 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu57/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu57/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu57/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu58/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu58/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu58/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu59/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu59/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu59/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu6/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu6/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu6/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu60/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu60/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu60/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu61/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu61/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu61/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu62/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu62/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu62/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu63/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu63/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu63/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_id -new file mode 100644 -index 0000000..20c9080 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_id -@@ -0,0 +1 @@ -+224 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings -new file mode 100644 -index 0000000..513d74e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings_list -new file mode 100644 -index 0000000..1870c91 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,64,72 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings -new file mode 100644 -index 0000000..2e6a251 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings_list -new file mode 100644 -index 0000000..900731f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu64/topology/thread_siblings_list -@@ -0,0 +1 @@ -+64 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu65/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu65/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu65/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu66/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu66/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu66/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu67/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu67/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu67/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu68/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu68/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu68/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu69/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu69/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu69/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu7/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu7/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu7/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu70/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu70/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu70/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu71/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu71/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu71/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_id -new file mode 100644 -index 0000000..7c022ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_id -@@ -0,0 +1 @@ -+232 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings -new file mode 100644 -index 0000000..513d74e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings_list -new file mode 100644 -index 0000000..1870c91 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,64,72 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings -new file mode 100644 -index 0000000..b85a0fd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings_list -new file mode 100644 -index 0000000..ea70ce0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu72/topology/thread_siblings_list -@@ -0,0 +1 @@ -+72 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu73/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu73/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu73/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu74/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu74/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu74/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu75/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu75/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu75/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu76/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu76/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu76/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu77/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu77/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu77/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu78/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu78/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu78/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu79/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu79/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu79/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_id -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_id -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings -new file mode 100644 -index 0000000..ffeb503 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings_list -new file mode 100644 -index 0000000..45a4fb7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu8/topology/thread_siblings_list -@@ -0,0 +1 @@ -+8 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_id -new file mode 100644 -index 0000000..9c4a93f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_id -@@ -0,0 +1 @@ -+2088 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings -new file mode 100644 -index 0000000..17461e4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings_list -new file mode 100644 -index 0000000..d15a2cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu80/topology/thread_siblings_list -@@ -0,0 +1 @@ -+80 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu81/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu81/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu81/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu82/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu82/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu82/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu83/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu83/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu83/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu84/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu84/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu84/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu85/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu85/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu85/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu86/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu86/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu86/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu87/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu87/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu87/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_id -new file mode 100644 -index 0000000..ce21c02 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_id -@@ -0,0 +1 @@ -+2096 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings -new file mode 100644 -index 0000000..8aa7b77 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings_list -new file mode 100644 -index 0000000..d22307c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu88/topology/thread_siblings_list -@@ -0,0 +1 @@ -+88 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu89/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu89/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu89/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu9/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu9/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu9/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu90/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu90/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu90/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu91/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu91/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu91/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu92/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu92/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu92/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu93/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu93/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu93/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu94/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu94/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu94/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu95/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu95/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu95/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_id -new file mode 100644 -index 0000000..cc14af1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_id -@@ -0,0 +1 @@ -+2144 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/physical_package_id b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings -new file mode 100644 -index 0000000..d5d4a45 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings_list -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu96/topology/thread_siblings_list -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu97/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu97/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu97/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu98/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu98/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu98/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/cpu99/online b/tests/nodeinfodata/linux-subcores1/cpu/cpu99/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/cpu99/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/kernel_max b/tests/nodeinfodata/linux-subcores1/cpu/kernel_max -new file mode 100644 -index 0000000..b6ac305 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/kernel_max -@@ -0,0 +1 @@ -+2047 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/offline b/tests/nodeinfodata/linux-subcores1/cpu/offline -new file mode 100644 -index 0000000..c15c056 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/offline -@@ -0,0 +1 @@ -+1-7,9-15,17-23,25-31,33-39,41-47,49-55,57-63,65-71,73-79,81-87,89-95,97-103,105-111,113-119,121-127,129-135,137-143,145-151,153-159 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/online b/tests/nodeinfodata/linux-subcores1/cpu/online -new file mode 100644 -index 0000000..d64565f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/online -@@ -0,0 +1 @@ -+0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/possible b/tests/nodeinfodata/linux-subcores1/cpu/possible -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/possible -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-subcores1/cpu/present b/tests/nodeinfodata/linux-subcores1/cpu/present -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/cpu/present -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu0 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu0 -new file mode 120000 -index 0000000..c841bea ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu0 -@@ -0,0 +1 @@ -+../../cpu/cpu0 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu1 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu1 -new file mode 120000 -index 0000000..5f45362 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu1 -@@ -0,0 +1 @@ -+../../cpu/cpu1 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu10 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu10 -new file mode 120000 -index 0000000..a6dc6bb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu10 -@@ -0,0 +1 @@ -+../../cpu/cpu10 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu11 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu11 -new file mode 120000 -index 0000000..e29d898 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu11 -@@ -0,0 +1 @@ -+../../cpu/cpu11 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu12 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu12 -new file mode 120000 -index 0000000..211519e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu12 -@@ -0,0 +1 @@ -+../../cpu/cpu12 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu13 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu13 -new file mode 120000 -index 0000000..52d3b69 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu13 -@@ -0,0 +1 @@ -+../../cpu/cpu13 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu14 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu14 -new file mode 120000 -index 0000000..24cb3b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu14 -@@ -0,0 +1 @@ -+../../cpu/cpu14 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu15 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu15 -new file mode 120000 -index 0000000..e905d85 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu15 -@@ -0,0 +1 @@ -+../../cpu/cpu15 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu16 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu16 -new file mode 120000 -index 0000000..445de40 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu16 -@@ -0,0 +1 @@ -+../../cpu/cpu16 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu17 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu17 -new file mode 120000 -index 0000000..13929db ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu17 -@@ -0,0 +1 @@ -+../../cpu/cpu17 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu18 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu18 -new file mode 120000 -index 0000000..3809adc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu18 -@@ -0,0 +1 @@ -+../../cpu/cpu18 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu19 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu19 -new file mode 120000 -index 0000000..c671083 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu19 -@@ -0,0 +1 @@ -+../../cpu/cpu19 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu2 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu2 -new file mode 120000 -index 0000000..2dcca33 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu2 -@@ -0,0 +1 @@ -+../../cpu/cpu2 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu20 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu20 -new file mode 120000 -index 0000000..a37c370 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu20 -@@ -0,0 +1 @@ -+../../cpu/cpu20 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu21 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu21 -new file mode 120000 -index 0000000..68a7cad ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu21 -@@ -0,0 +1 @@ -+../../cpu/cpu21 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu22 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu22 -new file mode 120000 -index 0000000..2c226ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu22 -@@ -0,0 +1 @@ -+../../cpu/cpu22 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu23 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu23 -new file mode 120000 -index 0000000..75c2f57 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu23 -@@ -0,0 +1 @@ -+../../cpu/cpu23 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu24 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu24 -new file mode 120000 -index 0000000..ad0a618 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu24 -@@ -0,0 +1 @@ -+../../cpu/cpu24 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu25 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu25 -new file mode 120000 -index 0000000..3145742 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu25 -@@ -0,0 +1 @@ -+../../cpu/cpu25 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu26 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu26 -new file mode 120000 -index 0000000..1dd180f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu26 -@@ -0,0 +1 @@ -+../../cpu/cpu26 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu27 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu27 -new file mode 120000 -index 0000000..74ced19 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu27 -@@ -0,0 +1 @@ -+../../cpu/cpu27 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu28 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu28 -new file mode 120000 -index 0000000..83269be ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu28 -@@ -0,0 +1 @@ -+../../cpu/cpu28 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu29 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu29 -new file mode 120000 -index 0000000..fa37dc6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu29 -@@ -0,0 +1 @@ -+../../cpu/cpu29 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu3 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu3 -new file mode 120000 -index 0000000..c7690e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu3 -@@ -0,0 +1 @@ -+../../cpu/cpu3 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu30 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu30 -new file mode 120000 -index 0000000..80226fa ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu30 -@@ -0,0 +1 @@ -+../../cpu/cpu30 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu31 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu31 -new file mode 120000 -index 0000000..6a9a569 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu31 -@@ -0,0 +1 @@ -+../../cpu/cpu31 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu32 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu32 -new file mode 120000 -index 0000000..bbca866 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu32 -@@ -0,0 +1 @@ -+../../cpu/cpu32 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu33 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu33 -new file mode 120000 -index 0000000..b7a9f8d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu33 -@@ -0,0 +1 @@ -+../../cpu/cpu33 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu34 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu34 -new file mode 120000 -index 0000000..0c0e738 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu34 -@@ -0,0 +1 @@ -+../../cpu/cpu34 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu35 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu35 -new file mode 120000 -index 0000000..47654d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu35 -@@ -0,0 +1 @@ -+../../cpu/cpu35 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu36 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu36 -new file mode 120000 -index 0000000..5e53f70 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu36 -@@ -0,0 +1 @@ -+../../cpu/cpu36 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu37 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu37 -new file mode 120000 -index 0000000..41b4ce7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu37 -@@ -0,0 +1 @@ -+../../cpu/cpu37 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu38 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu38 -new file mode 120000 -index 0000000..7231eb4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu38 -@@ -0,0 +1 @@ -+../../cpu/cpu38 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu39 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu39 -new file mode 120000 -index 0000000..d465480 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu39 -@@ -0,0 +1 @@ -+../../cpu/cpu39 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu4 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu4 -new file mode 120000 -index 0000000..9e77a64 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu4 -@@ -0,0 +1 @@ -+../../cpu/cpu4 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu5 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu5 -new file mode 120000 -index 0000000..cc07c3b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu5 -@@ -0,0 +1 @@ -+../../cpu/cpu5 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu6 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu6 -new file mode 120000 -index 0000000..2e75763 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu6 -@@ -0,0 +1 @@ -+../../cpu/cpu6 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu7 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu7 -new file mode 120000 -index 0000000..09e3f79 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu7 -@@ -0,0 +1 @@ -+../../cpu/cpu7 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu8 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu8 -new file mode 120000 -index 0000000..bda10cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu8 -@@ -0,0 +1 @@ -+../../cpu/cpu8 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/cpu9 b/tests/nodeinfodata/linux-subcores1/node/node0/cpu9 -new file mode 120000 -index 0000000..1ec1db2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/cpu9 -@@ -0,0 +1 @@ -+../../cpu/cpu9 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node0/meminfo b/tests/nodeinfodata/linux-subcores1/node/node0/meminfo -new file mode 100644 -index 0000000..38d9512 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node0/meminfo -@@ -0,0 +1,29 @@ -+Node 0 MemTotal: 67108864 kB -+Node 0 MemFree: 61610496 kB -+Node 0 MemUsed: 5498368 kB -+Node 0 Active: 214080 kB -+Node 0 Inactive: 242560 kB -+Node 0 Active(anon): 144896 kB -+Node 0 Inactive(anon): 8960 kB -+Node 0 Active(file): 69184 kB -+Node 0 Inactive(file): 233600 kB -+Node 0 Unevictable: 0 kB -+Node 0 Mlocked: 0 kB -+Node 0 Dirty: 145024 kB -+Node 0 Writeback: 0 kB -+Node 0 FilePages: 337408 kB -+Node 0 Mapped: 49792 kB -+Node 0 AnonPages: 131584 kB -+Node 0 Shmem: 22272 kB -+Node 0 KernelStack: 11936 kB -+Node 0 PageTables: 2688 kB -+Node 0 NFS_Unstable: 0 kB -+Node 0 Bounce: 0 kB -+Node 0 WritebackTmp: 0 kB -+Node 0 Slab: 257536 kB -+Node 0 SReclaimable: 40832 kB -+Node 0 SUnreclaim: 216704 kB -+Node 0 AnonHugePages: 0 kB -+Node 0 HugePages_Total: 0 -+Node 0 HugePages_Free: 0 -+Node 0 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu40 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu40 -new file mode 120000 -index 0000000..c727d46 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu40 -@@ -0,0 +1 @@ -+../../cpu/cpu40 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu41 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu41 -new file mode 120000 -index 0000000..cc0b78c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu41 -@@ -0,0 +1 @@ -+../../cpu/cpu41 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu42 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu42 -new file mode 120000 -index 0000000..8ebd18e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu42 -@@ -0,0 +1 @@ -+../../cpu/cpu42 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu43 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu43 -new file mode 120000 -index 0000000..03b2d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu43 -@@ -0,0 +1 @@ -+../../cpu/cpu43 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu44 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu44 -new file mode 120000 -index 0000000..859e4fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu44 -@@ -0,0 +1 @@ -+../../cpu/cpu44 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu45 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu45 -new file mode 120000 -index 0000000..58c3ca3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu45 -@@ -0,0 +1 @@ -+../../cpu/cpu45 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu46 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu46 -new file mode 120000 -index 0000000..55223e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu46 -@@ -0,0 +1 @@ -+../../cpu/cpu46 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu47 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu47 -new file mode 120000 -index 0000000..19407d4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu47 -@@ -0,0 +1 @@ -+../../cpu/cpu47 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu48 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu48 -new file mode 120000 -index 0000000..60a190c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu48 -@@ -0,0 +1 @@ -+../../cpu/cpu48 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu49 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu49 -new file mode 120000 -index 0000000..0ff1796 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu49 -@@ -0,0 +1 @@ -+../../cpu/cpu49 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu50 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu50 -new file mode 120000 -index 0000000..ddc5361 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu50 -@@ -0,0 +1 @@ -+../../cpu/cpu50 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu51 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu51 -new file mode 120000 -index 0000000..41163a9 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu51 -@@ -0,0 +1 @@ -+../../cpu/cpu51 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu52 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu52 -new file mode 120000 -index 0000000..be09dc8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu52 -@@ -0,0 +1 @@ -+../../cpu/cpu52 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu53 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu53 -new file mode 120000 -index 0000000..470ab22 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu53 -@@ -0,0 +1 @@ -+../../cpu/cpu53 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu54 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu54 -new file mode 120000 -index 0000000..5c11dfd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu54 -@@ -0,0 +1 @@ -+../../cpu/cpu54 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu55 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu55 -new file mode 120000 -index 0000000..e858949 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu55 -@@ -0,0 +1 @@ -+../../cpu/cpu55 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu56 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu56 -new file mode 120000 -index 0000000..586050f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu56 -@@ -0,0 +1 @@ -+../../cpu/cpu56 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu57 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu57 -new file mode 120000 -index 0000000..4276ac5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu57 -@@ -0,0 +1 @@ -+../../cpu/cpu57 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu58 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu58 -new file mode 120000 -index 0000000..3c10d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu58 -@@ -0,0 +1 @@ -+../../cpu/cpu58 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu59 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu59 -new file mode 120000 -index 0000000..06ddb97 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu59 -@@ -0,0 +1 @@ -+../../cpu/cpu59 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu60 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu60 -new file mode 120000 -index 0000000..c062761 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu60 -@@ -0,0 +1 @@ -+../../cpu/cpu60 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu61 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu61 -new file mode 120000 -index 0000000..5a2c12f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu61 -@@ -0,0 +1 @@ -+../../cpu/cpu61 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu62 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu62 -new file mode 120000 -index 0000000..9056072 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu62 -@@ -0,0 +1 @@ -+../../cpu/cpu62 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu63 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu63 -new file mode 120000 -index 0000000..1511953 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu63 -@@ -0,0 +1 @@ -+../../cpu/cpu63 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu64 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu64 -new file mode 120000 -index 0000000..1664a2b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu64 -@@ -0,0 +1 @@ -+../../cpu/cpu64 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu65 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu65 -new file mode 120000 -index 0000000..52712cf ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu65 -@@ -0,0 +1 @@ -+../../cpu/cpu65 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu66 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu66 -new file mode 120000 -index 0000000..93a4f32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu66 -@@ -0,0 +1 @@ -+../../cpu/cpu66 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu67 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu67 -new file mode 120000 -index 0000000..db73e74 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu67 -@@ -0,0 +1 @@ -+../../cpu/cpu67 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu68 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu68 -new file mode 120000 -index 0000000..4f40eb8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu68 -@@ -0,0 +1 @@ -+../../cpu/cpu68 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu69 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu69 -new file mode 120000 -index 0000000..9f32d96 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu69 -@@ -0,0 +1 @@ -+../../cpu/cpu69 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu70 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu70 -new file mode 120000 -index 0000000..a0e8fd2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu70 -@@ -0,0 +1 @@ -+../../cpu/cpu70 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu71 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu71 -new file mode 120000 -index 0000000..898c9f2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu71 -@@ -0,0 +1 @@ -+../../cpu/cpu71 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu72 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu72 -new file mode 120000 -index 0000000..d731cf5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu72 -@@ -0,0 +1 @@ -+../../cpu/cpu72 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu73 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu73 -new file mode 120000 -index 0000000..99f1a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu73 -@@ -0,0 +1 @@ -+../../cpu/cpu73 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu74 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu74 -new file mode 120000 -index 0000000..84a3139 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu74 -@@ -0,0 +1 @@ -+../../cpu/cpu74 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu75 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu75 -new file mode 120000 -index 0000000..0693a99 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu75 -@@ -0,0 +1 @@ -+../../cpu/cpu75 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu76 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu76 -new file mode 120000 -index 0000000..5ff7021 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu76 -@@ -0,0 +1 @@ -+../../cpu/cpu76 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu77 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu77 -new file mode 120000 -index 0000000..05099c6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu77 -@@ -0,0 +1 @@ -+../../cpu/cpu77 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu78 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu78 -new file mode 120000 -index 0000000..20eb9cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu78 -@@ -0,0 +1 @@ -+../../cpu/cpu78 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/cpu79 b/tests/nodeinfodata/linux-subcores1/node/node1/cpu79 -new file mode 120000 -index 0000000..4813a63 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/cpu79 -@@ -0,0 +1 @@ -+../../cpu/cpu79 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node1/meminfo b/tests/nodeinfodata/linux-subcores1/node/node1/meminfo -new file mode 100644 -index 0000000..e3c891a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node1/meminfo -@@ -0,0 +1,29 @@ -+Node 1 MemTotal: 67108864 kB -+Node 1 MemFree: 66559168 kB -+Node 1 MemUsed: 549696 kB -+Node 1 Active: 24192 kB -+Node 1 Inactive: 6016 kB -+Node 1 Active(anon): 21440 kB -+Node 1 Inactive(anon): 128 kB -+Node 1 Active(file): 2752 kB -+Node 1 Inactive(file): 5888 kB -+Node 1 Unevictable: 0 kB -+Node 1 Mlocked: 0 kB -+Node 1 Dirty: 0 kB -+Node 1 Writeback: 0 kB -+Node 1 FilePages: 9088 kB -+Node 1 Mapped: 5056 kB -+Node 1 AnonPages: 21120 kB -+Node 1 Shmem: 448 kB -+Node 1 KernelStack: 5472 kB -+Node 1 PageTables: 64 kB -+Node 1 NFS_Unstable: 0 kB -+Node 1 Bounce: 0 kB -+Node 1 WritebackTmp: 0 kB -+Node 1 Slab: 59712 kB -+Node 1 SReclaimable: 5952 kB -+Node 1 SUnreclaim: 53760 kB -+Node 1 AnonHugePages: 0 kB -+Node 1 HugePages_Total: 0 -+Node 1 HugePages_Free: 0 -+Node 1 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu100 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu100 -new file mode 120000 -index 0000000..ffb1446 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu100 -@@ -0,0 +1 @@ -+../../cpu/cpu100 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu101 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu101 -new file mode 120000 -index 0000000..2b399e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu101 -@@ -0,0 +1 @@ -+../../cpu/cpu101 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu102 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu102 -new file mode 120000 -index 0000000..f06eb7d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu102 -@@ -0,0 +1 @@ -+../../cpu/cpu102 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu103 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu103 -new file mode 120000 -index 0000000..722b506 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu103 -@@ -0,0 +1 @@ -+../../cpu/cpu103 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu104 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu104 -new file mode 120000 -index 0000000..7692606 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu104 -@@ -0,0 +1 @@ -+../../cpu/cpu104 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu105 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu105 -new file mode 120000 -index 0000000..77d25d5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu105 -@@ -0,0 +1 @@ -+../../cpu/cpu105 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu106 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu106 -new file mode 120000 -index 0000000..f8bff26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu106 -@@ -0,0 +1 @@ -+../../cpu/cpu106 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu107 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu107 -new file mode 120000 -index 0000000..d475c15 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu107 -@@ -0,0 +1 @@ -+../../cpu/cpu107 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu108 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu108 -new file mode 120000 -index 0000000..4352ab8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu108 -@@ -0,0 +1 @@ -+../../cpu/cpu108 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu109 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu109 -new file mode 120000 -index 0000000..c74e8ec ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu109 -@@ -0,0 +1 @@ -+../../cpu/cpu109 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu110 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu110 -new file mode 120000 -index 0000000..fb66aa1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu110 -@@ -0,0 +1 @@ -+../../cpu/cpu110 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu111 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu111 -new file mode 120000 -index 0000000..b2da00c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu111 -@@ -0,0 +1 @@ -+../../cpu/cpu111 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu112 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu112 -new file mode 120000 -index 0000000..e65062a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu112 -@@ -0,0 +1 @@ -+../../cpu/cpu112 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu113 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu113 -new file mode 120000 -index 0000000..f8380bf ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu113 -@@ -0,0 +1 @@ -+../../cpu/cpu113 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu114 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu114 -new file mode 120000 -index 0000000..4c33e35 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu114 -@@ -0,0 +1 @@ -+../../cpu/cpu114 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu115 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu115 -new file mode 120000 -index 0000000..2b4fbce ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu115 -@@ -0,0 +1 @@ -+../../cpu/cpu115 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu116 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu116 -new file mode 120000 -index 0000000..7e07a2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu116 -@@ -0,0 +1 @@ -+../../cpu/cpu116 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu117 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu117 -new file mode 120000 -index 0000000..2d65930 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu117 -@@ -0,0 +1 @@ -+../../cpu/cpu117 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu118 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu118 -new file mode 120000 -index 0000000..b09093c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu118 -@@ -0,0 +1 @@ -+../../cpu/cpu118 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu119 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu119 -new file mode 120000 -index 0000000..59a5bf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu119 -@@ -0,0 +1 @@ -+../../cpu/cpu119 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu80 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu80 -new file mode 120000 -index 0000000..ce5ed81 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu80 -@@ -0,0 +1 @@ -+../../cpu/cpu80 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu81 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu81 -new file mode 120000 -index 0000000..dcd9a05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu81 -@@ -0,0 +1 @@ -+../../cpu/cpu81 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu82 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu82 -new file mode 120000 -index 0000000..c91ce01 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu82 -@@ -0,0 +1 @@ -+../../cpu/cpu82 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu83 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu83 -new file mode 120000 -index 0000000..22ba3c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu83 -@@ -0,0 +1 @@ -+../../cpu/cpu83 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu84 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu84 -new file mode 120000 -index 0000000..c7e4d26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu84 -@@ -0,0 +1 @@ -+../../cpu/cpu84 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu85 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu85 -new file mode 120000 -index 0000000..6779d27 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu85 -@@ -0,0 +1 @@ -+../../cpu/cpu85 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu86 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu86 -new file mode 120000 -index 0000000..9e777be ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu86 -@@ -0,0 +1 @@ -+../../cpu/cpu86 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu87 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu87 -new file mode 120000 -index 0000000..0359c58 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu87 -@@ -0,0 +1 @@ -+../../cpu/cpu87 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu88 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu88 -new file mode 120000 -index 0000000..3825c50 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu88 -@@ -0,0 +1 @@ -+../../cpu/cpu88 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu89 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu89 -new file mode 120000 -index 0000000..9a72211 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu89 -@@ -0,0 +1 @@ -+../../cpu/cpu89 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu90 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu90 -new file mode 120000 -index 0000000..75d10b3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu90 -@@ -0,0 +1 @@ -+../../cpu/cpu90 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu91 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu91 -new file mode 120000 -index 0000000..8e9e4a4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu91 -@@ -0,0 +1 @@ -+../../cpu/cpu91 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu92 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu92 -new file mode 120000 -index 0000000..f8d5f05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu92 -@@ -0,0 +1 @@ -+../../cpu/cpu92 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu93 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu93 -new file mode 120000 -index 0000000..5a302ad ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu93 -@@ -0,0 +1 @@ -+../../cpu/cpu93 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu94 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu94 -new file mode 120000 -index 0000000..9e6239f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu94 -@@ -0,0 +1 @@ -+../../cpu/cpu94 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu95 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu95 -new file mode 120000 -index 0000000..d87b5e3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu95 -@@ -0,0 +1 @@ -+../../cpu/cpu95 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu96 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu96 -new file mode 120000 -index 0000000..50d1edc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu96 -@@ -0,0 +1 @@ -+../../cpu/cpu96 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu97 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu97 -new file mode 120000 -index 0000000..38b5a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu97 -@@ -0,0 +1 @@ -+../../cpu/cpu97 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu98 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu98 -new file mode 120000 -index 0000000..df97c6c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu98 -@@ -0,0 +1 @@ -+../../cpu/cpu98 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/cpu99 b/tests/nodeinfodata/linux-subcores1/node/node16/cpu99 -new file mode 120000 -index 0000000..a3a6164 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/cpu99 -@@ -0,0 +1 @@ -+../../cpu/cpu99 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node16/meminfo b/tests/nodeinfodata/linux-subcores1/node/node16/meminfo -new file mode 100644 -index 0000000..fcc53e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node16/meminfo -@@ -0,0 +1,29 @@ -+Node 16 MemTotal: 67108864 kB -+Node 16 MemFree: 66459328 kB -+Node 16 MemUsed: 649536 kB -+Node 16 Active: 17920 kB -+Node 16 Inactive: 65600 kB -+Node 16 Active(anon): 9728 kB -+Node 16 Inactive(anon): 64 kB -+Node 16 Active(file): 8192 kB -+Node 16 Inactive(file): 65536 kB -+Node 16 Unevictable: 0 kB -+Node 16 Mlocked: 0 kB -+Node 16 Dirty: 0 kB -+Node 16 Writeback: 0 kB -+Node 16 FilePages: 73792 kB -+Node 16 Mapped: 4672 kB -+Node 16 AnonPages: 9664 kB -+Node 16 Shmem: 128 kB -+Node 16 KernelStack: 5072 kB -+Node 16 PageTables: 64 kB -+Node 16 NFS_Unstable: 0 kB -+Node 16 Bounce: 0 kB -+Node 16 WritebackTmp: 0 kB -+Node 16 Slab: 91968 kB -+Node 16 SReclaimable: 10944 kB -+Node 16 SUnreclaim: 81024 kB -+Node 16 AnonHugePages: 0 kB -+Node 16 HugePages_Total: 0 -+Node 16 HugePages_Free: 0 -+Node 16 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu120 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu120 -new file mode 120000 -index 0000000..17a18b1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu120 -@@ -0,0 +1 @@ -+../../cpu/cpu120 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu121 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu121 -new file mode 120000 -index 0000000..321bbc2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu121 -@@ -0,0 +1 @@ -+../../cpu/cpu121 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu122 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu122 -new file mode 120000 -index 0000000..e03f5a3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu122 -@@ -0,0 +1 @@ -+../../cpu/cpu122 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu123 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu123 -new file mode 120000 -index 0000000..3021e4f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu123 -@@ -0,0 +1 @@ -+../../cpu/cpu123 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu124 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu124 -new file mode 120000 -index 0000000..10b32dc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu124 -@@ -0,0 +1 @@ -+../../cpu/cpu124 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu125 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu125 -new file mode 120000 -index 0000000..9e06e6e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu125 -@@ -0,0 +1 @@ -+../../cpu/cpu125 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu126 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu126 -new file mode 120000 -index 0000000..2a4708a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu126 -@@ -0,0 +1 @@ -+../../cpu/cpu126 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu127 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu127 -new file mode 120000 -index 0000000..96b5143 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu127 -@@ -0,0 +1 @@ -+../../cpu/cpu127 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu128 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu128 -new file mode 120000 -index 0000000..3142217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu128 -@@ -0,0 +1 @@ -+../../cpu/cpu128 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu129 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu129 -new file mode 120000 -index 0000000..dc84401 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu129 -@@ -0,0 +1 @@ -+../../cpu/cpu129 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu130 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu130 -new file mode 120000 -index 0000000..59a50b8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu130 -@@ -0,0 +1 @@ -+../../cpu/cpu130 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu131 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu131 -new file mode 120000 -index 0000000..ca1f958 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu131 -@@ -0,0 +1 @@ -+../../cpu/cpu131 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu132 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu132 -new file mode 120000 -index 0000000..a1f7ea1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu132 -@@ -0,0 +1 @@ -+../../cpu/cpu132 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu133 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu133 -new file mode 120000 -index 0000000..89e453b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu133 -@@ -0,0 +1 @@ -+../../cpu/cpu133 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu134 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu134 -new file mode 120000 -index 0000000..a46c33e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu134 -@@ -0,0 +1 @@ -+../../cpu/cpu134 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu135 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu135 -new file mode 120000 -index 0000000..4efd76f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu135 -@@ -0,0 +1 @@ -+../../cpu/cpu135 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu136 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu136 -new file mode 120000 -index 0000000..cfd61b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu136 -@@ -0,0 +1 @@ -+../../cpu/cpu136 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu137 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu137 -new file mode 120000 -index 0000000..6a1ec92 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu137 -@@ -0,0 +1 @@ -+../../cpu/cpu137 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu138 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu138 -new file mode 120000 -index 0000000..890aad3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu138 -@@ -0,0 +1 @@ -+../../cpu/cpu138 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu139 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu139 -new file mode 120000 -index 0000000..afb925f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu139 -@@ -0,0 +1 @@ -+../../cpu/cpu139 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu140 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu140 -new file mode 120000 -index 0000000..2faf4c0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu140 -@@ -0,0 +1 @@ -+../../cpu/cpu140 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu141 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu141 -new file mode 120000 -index 0000000..6cf8cf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu141 -@@ -0,0 +1 @@ -+../../cpu/cpu141 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu142 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu142 -new file mode 120000 -index 0000000..fa73d61 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu142 -@@ -0,0 +1 @@ -+../../cpu/cpu142 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu143 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu143 -new file mode 120000 -index 0000000..04dcaa4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu143 -@@ -0,0 +1 @@ -+../../cpu/cpu143 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu144 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu144 -new file mode 120000 -index 0000000..ccecb10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu144 -@@ -0,0 +1 @@ -+../../cpu/cpu144 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu145 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu145 -new file mode 120000 -index 0000000..00def86 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu145 -@@ -0,0 +1 @@ -+../../cpu/cpu145 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu146 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu146 -new file mode 120000 -index 0000000..6a13966 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu146 -@@ -0,0 +1 @@ -+../../cpu/cpu146 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu147 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu147 -new file mode 120000 -index 0000000..143c5a7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu147 -@@ -0,0 +1 @@ -+../../cpu/cpu147 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu148 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu148 -new file mode 120000 -index 0000000..21bae94 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu148 -@@ -0,0 +1 @@ -+../../cpu/cpu148 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu149 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu149 -new file mode 120000 -index 0000000..fdb0f17 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu149 -@@ -0,0 +1 @@ -+../../cpu/cpu149 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu150 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu150 -new file mode 120000 -index 0000000..da363e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu150 -@@ -0,0 +1 @@ -+../../cpu/cpu150 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu151 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu151 -new file mode 120000 -index 0000000..069de6b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu151 -@@ -0,0 +1 @@ -+../../cpu/cpu151 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu152 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu152 -new file mode 120000 -index 0000000..0fb022e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu152 -@@ -0,0 +1 @@ -+../../cpu/cpu152 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu153 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu153 -new file mode 120000 -index 0000000..d7e0f9e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu153 -@@ -0,0 +1 @@ -+../../cpu/cpu153 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu154 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu154 -new file mode 120000 -index 0000000..0a6117a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu154 -@@ -0,0 +1 @@ -+../../cpu/cpu154 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu155 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu155 -new file mode 120000 -index 0000000..201f0f5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu155 -@@ -0,0 +1 @@ -+../../cpu/cpu155 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu156 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu156 -new file mode 120000 -index 0000000..da7f12b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu156 -@@ -0,0 +1 @@ -+../../cpu/cpu156 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu157 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu157 -new file mode 120000 -index 0000000..c2aa5c2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu157 -@@ -0,0 +1 @@ -+../../cpu/cpu157 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu158 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu158 -new file mode 120000 -index 0000000..4376692 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu158 -@@ -0,0 +1 @@ -+../../cpu/cpu158 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/cpu159 b/tests/nodeinfodata/linux-subcores1/node/node17/cpu159 -new file mode 120000 -index 0000000..852a0c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/cpu159 -@@ -0,0 +1 @@ -+../../cpu/cpu159 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores1/node/node17/meminfo b/tests/nodeinfodata/linux-subcores1/node/node17/meminfo -new file mode 100644 -index 0000000..9c53e37 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/node17/meminfo -@@ -0,0 +1,29 @@ -+Node 17 MemTotal: 67108864 kB -+Node 17 MemFree: 66328320 kB -+Node 17 MemUsed: 780544 kB -+Node 17 Active: 5440 kB -+Node 17 Inactive: 2560 kB -+Node 17 Active(anon): 4736 kB -+Node 17 Inactive(anon): 128 kB -+Node 17 Active(file): 704 kB -+Node 17 Inactive(file): 2432 kB -+Node 17 Unevictable: 0 kB -+Node 17 Mlocked: 0 kB -+Node 17 Dirty: 0 kB -+Node 17 Writeback: 0 kB -+Node 17 FilePages: 3392 kB -+Node 17 Mapped: 192 kB -+Node 17 AnonPages: 4672 kB -+Node 17 Shmem: 256 kB -+Node 17 KernelStack: 5488 kB -+Node 17 PageTables: 128 kB -+Node 17 NFS_Unstable: 0 kB -+Node 17 Bounce: 0 kB -+Node 17 WritebackTmp: 0 kB -+Node 17 Slab: 41536 kB -+Node 17 SReclaimable: 2496 kB -+Node 17 SUnreclaim: 39040 kB -+Node 17 AnonHugePages: 0 kB -+Node 17 HugePages_Total: 0 -+Node 17 HugePages_Free: 0 -+Node 17 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores1/node/online b/tests/nodeinfodata/linux-subcores1/node/online -new file mode 100644 -index 0000000..a41eb32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/online -@@ -0,0 +1 @@ -+0-1,16-17 -diff --git a/tests/nodeinfodata/linux-subcores1/node/possible b/tests/nodeinfodata/linux-subcores1/node/possible -new file mode 100644 -index 0000000..8d232c7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores1/node/possible -@@ -0,0 +1 @@ -+0-255 -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index ccef4a9..4e3e1c9 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -235,6 +235,8 @@ mymain(void) - {"f21-mustang", VIR_ARCH_AARCH64}, - {"rhelsa-3.19.0-mustang", VIR_ARCH_AARCH64}, - {"deconf-cpus", VIR_ARCH_PPC64}, -+ /* subcores, default configuration */ -+ {"subcores1", VIR_ARCH_PPC64}, - }; - - if (virInitialize() < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Add-subcores2-nodeinfo-test.patch b/SOURCES/libvirt-tests-Add-subcores2-nodeinfo-test.patch deleted file mode 100644 index 2bef35d..0000000 --- a/SOURCES/libvirt-tests-Add-subcores2-nodeinfo-test.patch +++ /dev/null @@ -1,4212 +0,0 @@ -From bc30103639d51b9ed3cda1f9f9c680bc37683b7d Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:38 +0200 -Subject: [PATCH] tests: Add subcores2 nodeinfo test - -This makes sure CPUs are counted correctly when some of the cores are -completely offline. - -(cherry picked from commit 28616e8e70eb71ee5b378f4e7c20fde0254731f3) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/nodeinfodata/linux-ppc64-subcores2.cpuinfo | 45 ++++++++++++++++++++++ - tests/nodeinfodata/linux-ppc64-subcores2.expected | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu0/online | 1 + - .../linux-subcores2/cpu/cpu0/topology/core_id | 1 + - .../cpu/cpu0/topology/core_siblings | 1 + - .../cpu/cpu0/topology/core_siblings_list | 1 + - .../cpu/cpu0/topology/physical_package_id | 1 + - .../cpu/cpu0/topology/thread_siblings | 1 + - .../cpu/cpu0/topology/thread_siblings_list | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu1/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu10/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu100/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu101/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu102/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu103/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu104/online | 1 + - .../linux-subcores2/cpu/cpu104/topology/core_id | 1 + - .../cpu/cpu104/topology/core_siblings | 1 + - .../cpu/cpu104/topology/core_siblings_list | 1 + - .../cpu/cpu104/topology/physical_package_id | 1 + - .../cpu/cpu104/topology/thread_siblings | 1 + - .../cpu/cpu104/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu105/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu106/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu107/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu108/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu109/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu11/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu110/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu111/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu112/online | 1 + - .../linux-subcores2/cpu/cpu112/topology/core_id | 1 + - .../cpu/cpu112/topology/core_siblings | 1 + - .../cpu/cpu112/topology/core_siblings_list | 1 + - .../cpu/cpu112/topology/physical_package_id | 1 + - .../cpu/cpu112/topology/thread_siblings | 1 + - .../cpu/cpu112/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu113/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu114/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu115/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu116/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu117/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu118/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu119/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu12/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu120/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu121/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu122/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu123/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu124/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu125/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu126/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu127/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu128/online | 1 + - .../linux-subcores2/cpu/cpu128/topology/core_id | 1 + - .../cpu/cpu128/topology/core_siblings | 1 + - .../cpu/cpu128/topology/core_siblings_list | 1 + - .../cpu/cpu128/topology/physical_package_id | 1 + - .../cpu/cpu128/topology/thread_siblings | 1 + - .../cpu/cpu128/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu129/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu13/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu130/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu131/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu132/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu133/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu134/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu135/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu136/online | 1 + - .../linux-subcores2/cpu/cpu136/topology/core_id | 1 + - .../cpu/cpu136/topology/core_siblings | 1 + - .../cpu/cpu136/topology/core_siblings_list | 1 + - .../cpu/cpu136/topology/physical_package_id | 1 + - .../cpu/cpu136/topology/thread_siblings | 1 + - .../cpu/cpu136/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu137/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu138/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu139/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu14/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu140/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu141/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu142/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu143/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu144/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu145/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu146/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu147/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu148/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu149/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu15/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu150/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu151/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu152/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu153/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu154/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu155/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu156/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu157/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu158/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu159/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu16/online | 1 + - .../linux-subcores2/cpu/cpu16/topology/core_id | 1 + - .../cpu/cpu16/topology/core_siblings | 1 + - .../cpu/cpu16/topology/core_siblings_list | 1 + - .../cpu/cpu16/topology/physical_package_id | 1 + - .../cpu/cpu16/topology/thread_siblings | 1 + - .../cpu/cpu16/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu17/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu18/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu19/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu2/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu20/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu21/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu22/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu23/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu24/online | 1 + - .../linux-subcores2/cpu/cpu24/topology/core_id | 1 + - .../cpu/cpu24/topology/core_siblings | 1 + - .../cpu/cpu24/topology/core_siblings_list | 1 + - .../cpu/cpu24/topology/physical_package_id | 1 + - .../cpu/cpu24/topology/thread_siblings | 1 + - .../cpu/cpu24/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu25/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu26/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu27/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu28/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu29/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu3/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu30/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu31/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu32/online | 1 + - .../linux-subcores2/cpu/cpu32/topology/core_id | 1 + - .../cpu/cpu32/topology/core_siblings | 1 + - .../cpu/cpu32/topology/core_siblings_list | 1 + - .../cpu/cpu32/topology/physical_package_id | 1 + - .../cpu/cpu32/topology/thread_siblings | 1 + - .../cpu/cpu32/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu33/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu34/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu35/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu36/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu37/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu38/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu39/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu4/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu40/online | 1 + - .../linux-subcores2/cpu/cpu40/topology/core_id | 1 + - .../cpu/cpu40/topology/core_siblings | 1 + - .../cpu/cpu40/topology/core_siblings_list | 1 + - .../cpu/cpu40/topology/physical_package_id | 1 + - .../cpu/cpu40/topology/thread_siblings | 1 + - .../cpu/cpu40/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu41/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu42/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu43/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu44/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu45/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu46/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu47/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu48/online | 1 + - .../linux-subcores2/cpu/cpu48/topology/core_id | 1 + - .../cpu/cpu48/topology/core_siblings | 1 + - .../cpu/cpu48/topology/core_siblings_list | 1 + - .../cpu/cpu48/topology/physical_package_id | 1 + - .../cpu/cpu48/topology/thread_siblings | 1 + - .../cpu/cpu48/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu49/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu5/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu50/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu51/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu52/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu53/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu54/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu55/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu56/online | 1 + - .../linux-subcores2/cpu/cpu56/topology/core_id | 1 + - .../cpu/cpu56/topology/core_siblings | 1 + - .../cpu/cpu56/topology/core_siblings_list | 1 + - .../cpu/cpu56/topology/physical_package_id | 1 + - .../cpu/cpu56/topology/thread_siblings | 1 + - .../cpu/cpu56/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu57/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu58/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu59/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu6/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu60/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu61/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu62/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu63/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu64/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu65/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu66/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu67/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu68/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu69/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu7/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu70/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu71/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu72/online | 1 + - .../linux-subcores2/cpu/cpu72/topology/core_id | 1 + - .../cpu/cpu72/topology/core_siblings | 1 + - .../cpu/cpu72/topology/core_siblings_list | 1 + - .../cpu/cpu72/topology/physical_package_id | 1 + - .../cpu/cpu72/topology/thread_siblings | 1 + - .../cpu/cpu72/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu73/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu74/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu75/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu76/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu77/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu78/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu79/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu8/online | 1 + - .../linux-subcores2/cpu/cpu8/topology/core_id | 1 + - .../cpu/cpu8/topology/core_siblings | 1 + - .../cpu/cpu8/topology/core_siblings_list | 1 + - .../cpu/cpu8/topology/physical_package_id | 1 + - .../cpu/cpu8/topology/thread_siblings | 1 + - .../cpu/cpu8/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu80/online | 1 + - .../linux-subcores2/cpu/cpu80/topology/core_id | 1 + - .../cpu/cpu80/topology/core_siblings | 1 + - .../cpu/cpu80/topology/core_siblings_list | 1 + - .../cpu/cpu80/topology/physical_package_id | 1 + - .../cpu/cpu80/topology/thread_siblings | 1 + - .../cpu/cpu80/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu81/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu82/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu83/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu84/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu85/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu86/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu87/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu88/online | 1 + - .../linux-subcores2/cpu/cpu88/topology/core_id | 1 + - .../cpu/cpu88/topology/core_siblings | 1 + - .../cpu/cpu88/topology/core_siblings_list | 1 + - .../cpu/cpu88/topology/physical_package_id | 1 + - .../cpu/cpu88/topology/thread_siblings | 1 + - .../cpu/cpu88/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu89/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/cpu9/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu90/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu91/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu92/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu93/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu94/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu95/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu96/online | 1 + - .../linux-subcores2/cpu/cpu96/topology/core_id | 1 + - .../cpu/cpu96/topology/core_siblings | 1 + - .../cpu/cpu96/topology/core_siblings_list | 1 + - .../cpu/cpu96/topology/physical_package_id | 1 + - .../cpu/cpu96/topology/thread_siblings | 1 + - .../cpu/cpu96/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu97/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu98/online | 1 + - .../nodeinfodata/linux-subcores2/cpu/cpu99/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/kernel_max | 1 + - tests/nodeinfodata/linux-subcores2/cpu/offline | 1 + - tests/nodeinfodata/linux-subcores2/cpu/online | 1 + - tests/nodeinfodata/linux-subcores2/cpu/possible | 1 + - tests/nodeinfodata/linux-subcores2/cpu/present | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu0 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu1 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu10 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu11 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu12 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu13 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu14 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu15 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu16 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu17 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu18 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu19 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu2 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu20 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu21 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu22 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu23 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu24 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu25 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu26 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu27 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu28 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu29 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu3 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu30 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu31 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu32 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu33 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu34 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu35 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu36 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu37 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu38 | 1 + - .../nodeinfodata/linux-subcores2/node/node0/cpu39 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu4 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu5 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu6 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu7 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu8 | 1 + - tests/nodeinfodata/linux-subcores2/node/node0/cpu9 | 1 + - .../linux-subcores2/node/node0/meminfo | 29 ++++++++++++++ - .../nodeinfodata/linux-subcores2/node/node1/cpu40 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu41 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu42 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu43 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu44 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu45 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu46 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu47 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu48 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu49 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu50 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu51 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu52 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu53 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu54 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu55 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu56 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu57 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu58 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu59 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu60 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu61 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu62 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu63 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu64 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu65 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu66 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu67 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu68 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu69 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu70 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu71 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu72 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu73 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu74 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu75 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu76 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu77 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu78 | 1 + - .../nodeinfodata/linux-subcores2/node/node1/cpu79 | 1 + - .../linux-subcores2/node/node1/meminfo | 29 ++++++++++++++ - .../linux-subcores2/node/node16/cpu100 | 1 + - .../linux-subcores2/node/node16/cpu101 | 1 + - .../linux-subcores2/node/node16/cpu102 | 1 + - .../linux-subcores2/node/node16/cpu103 | 1 + - .../linux-subcores2/node/node16/cpu104 | 1 + - .../linux-subcores2/node/node16/cpu105 | 1 + - .../linux-subcores2/node/node16/cpu106 | 1 + - .../linux-subcores2/node/node16/cpu107 | 1 + - .../linux-subcores2/node/node16/cpu108 | 1 + - .../linux-subcores2/node/node16/cpu109 | 1 + - .../linux-subcores2/node/node16/cpu110 | 1 + - .../linux-subcores2/node/node16/cpu111 | 1 + - .../linux-subcores2/node/node16/cpu112 | 1 + - .../linux-subcores2/node/node16/cpu113 | 1 + - .../linux-subcores2/node/node16/cpu114 | 1 + - .../linux-subcores2/node/node16/cpu115 | 1 + - .../linux-subcores2/node/node16/cpu116 | 1 + - .../linux-subcores2/node/node16/cpu117 | 1 + - .../linux-subcores2/node/node16/cpu118 | 1 + - .../linux-subcores2/node/node16/cpu119 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu80 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu81 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu82 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu83 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu84 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu85 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu86 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu87 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu88 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu89 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu90 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu91 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu92 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu93 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu94 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu95 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu96 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu97 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu98 | 1 + - .../nodeinfodata/linux-subcores2/node/node16/cpu99 | 1 + - .../linux-subcores2/node/node16/meminfo | 29 ++++++++++++++ - .../linux-subcores2/node/node17/cpu120 | 1 + - .../linux-subcores2/node/node17/cpu121 | 1 + - .../linux-subcores2/node/node17/cpu122 | 1 + - .../linux-subcores2/node/node17/cpu123 | 1 + - .../linux-subcores2/node/node17/cpu124 | 1 + - .../linux-subcores2/node/node17/cpu125 | 1 + - .../linux-subcores2/node/node17/cpu126 | 1 + - .../linux-subcores2/node/node17/cpu127 | 1 + - .../linux-subcores2/node/node17/cpu128 | 1 + - .../linux-subcores2/node/node17/cpu129 | 1 + - .../linux-subcores2/node/node17/cpu130 | 1 + - .../linux-subcores2/node/node17/cpu131 | 1 + - .../linux-subcores2/node/node17/cpu132 | 1 + - .../linux-subcores2/node/node17/cpu133 | 1 + - .../linux-subcores2/node/node17/cpu134 | 1 + - .../linux-subcores2/node/node17/cpu135 | 1 + - .../linux-subcores2/node/node17/cpu136 | 1 + - .../linux-subcores2/node/node17/cpu137 | 1 + - .../linux-subcores2/node/node17/cpu138 | 1 + - .../linux-subcores2/node/node17/cpu139 | 1 + - .../linux-subcores2/node/node17/cpu140 | 1 + - .../linux-subcores2/node/node17/cpu141 | 1 + - .../linux-subcores2/node/node17/cpu142 | 1 + - .../linux-subcores2/node/node17/cpu143 | 1 + - .../linux-subcores2/node/node17/cpu144 | 1 + - .../linux-subcores2/node/node17/cpu145 | 1 + - .../linux-subcores2/node/node17/cpu146 | 1 + - .../linux-subcores2/node/node17/cpu147 | 1 + - .../linux-subcores2/node/node17/cpu148 | 1 + - .../linux-subcores2/node/node17/cpu149 | 1 + - .../linux-subcores2/node/node17/cpu150 | 1 + - .../linux-subcores2/node/node17/cpu151 | 1 + - .../linux-subcores2/node/node17/cpu152 | 1 + - .../linux-subcores2/node/node17/cpu153 | 1 + - .../linux-subcores2/node/node17/cpu154 | 1 + - .../linux-subcores2/node/node17/cpu155 | 1 + - .../linux-subcores2/node/node17/cpu156 | 1 + - .../linux-subcores2/node/node17/cpu157 | 1 + - .../linux-subcores2/node/node17/cpu158 | 1 + - .../linux-subcores2/node/node17/cpu159 | 1 + - .../linux-subcores2/node/node17/meminfo | 29 ++++++++++++++ - tests/nodeinfodata/linux-subcores2/node/online | 1 + - tests/nodeinfodata/linux-subcores2/node/possible | 1 + - tests/nodeinfotest.c | 2 + - 430 files changed, 587 insertions(+) - create mode 100644 tests/nodeinfodata/linux-ppc64-subcores2.cpuinfo - create mode 100644 tests/nodeinfodata/linux-ppc64-subcores2.expected - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu1/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu10/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu100/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu101/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu102/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu103/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu105/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu106/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu107/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu108/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu109/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu11/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu110/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu111/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu113/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu114/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu115/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu116/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu117/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu118/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu119/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu12/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu120/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu121/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu122/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu123/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu124/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu125/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu126/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu127/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu129/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu13/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu130/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu131/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu132/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu133/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu134/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu135/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu137/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu138/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu139/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu14/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu140/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu141/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu142/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu143/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu144/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu145/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu146/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu147/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu148/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu149/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu15/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu150/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu151/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu152/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu153/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu154/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu155/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu156/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu157/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu158/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu159/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu17/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu18/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu19/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu2/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu20/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu21/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu22/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu23/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu25/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu26/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu27/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu28/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu29/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu3/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu30/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu31/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu33/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu34/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu35/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu36/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu37/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu38/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu39/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu4/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu41/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu42/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu43/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu44/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu45/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu46/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu47/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu49/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu5/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu50/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu51/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu52/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu53/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu54/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu55/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu57/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu58/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu59/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu6/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu60/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu61/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu62/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu63/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu64/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu65/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu66/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu67/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu68/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu69/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu7/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu70/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu71/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu73/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu74/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu75/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu76/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu77/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu78/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu79/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu81/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu82/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu83/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu84/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu85/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu86/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu87/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu89/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu9/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu90/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu91/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu92/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu93/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu94/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu95/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu97/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu98/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/cpu99/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/kernel_max - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/offline - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/online - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/possible - create mode 100644 tests/nodeinfodata/linux-subcores2/cpu/present - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu0 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu1 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu10 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu11 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu12 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu13 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu14 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu15 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu16 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu17 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu18 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu19 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu2 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu20 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu21 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu22 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu23 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu24 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu25 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu26 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu27 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu28 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu29 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu3 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu30 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu31 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu32 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu33 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu34 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu35 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu36 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu37 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu38 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu39 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu4 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu5 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu6 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu7 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu8 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node0/cpu9 - create mode 100644 tests/nodeinfodata/linux-subcores2/node/node0/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu40 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu41 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu42 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu43 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu44 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu45 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu46 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu47 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu48 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu49 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu50 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu51 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu52 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu53 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu54 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu55 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu56 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu57 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu58 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu59 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu60 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu61 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu62 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu63 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu64 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu65 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu66 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu67 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu68 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu69 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu70 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu71 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu72 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu73 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu74 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu75 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu76 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu77 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu78 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node1/cpu79 - create mode 100644 tests/nodeinfodata/linux-subcores2/node/node1/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu100 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu101 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu102 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu103 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu104 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu105 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu106 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu107 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu108 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu109 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu110 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu111 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu112 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu113 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu114 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu115 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu116 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu117 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu118 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu119 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu80 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu81 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu82 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu83 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu84 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu85 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu86 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu87 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu88 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu89 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu90 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu91 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu92 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu93 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu94 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu95 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu96 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu97 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu98 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node16/cpu99 - create mode 100644 tests/nodeinfodata/linux-subcores2/node/node16/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu120 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu121 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu122 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu123 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu124 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu125 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu126 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu127 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu128 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu129 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu130 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu131 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu132 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu133 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu134 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu135 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu136 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu137 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu138 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu139 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu140 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu141 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu142 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu143 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu144 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu145 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu146 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu147 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu148 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu149 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu150 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu151 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu152 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu153 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu154 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu155 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu156 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu157 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu158 - create mode 120000 tests/nodeinfodata/linux-subcores2/node/node17/cpu159 - create mode 100644 tests/nodeinfodata/linux-subcores2/node/node17/meminfo - create mode 100644 tests/nodeinfodata/linux-subcores2/node/online - create mode 100644 tests/nodeinfodata/linux-subcores2/node/possible - -diff --git a/tests/nodeinfodata/linux-ppc64-subcores2.cpuinfo b/tests/nodeinfodata/linux-ppc64-subcores2.cpuinfo -new file mode 100644 -index 0000000..ca0ac66 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-subcores2.cpuinfo -@@ -0,0 +1,45 @@ -+processor : 0 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 8 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 16 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 24 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 32 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 48 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 96 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 136 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+timebase : 512000000 -+platform : PowerNV -+model : 8247-22L -+machine : PowerNV 8247-22L -+firmware : OPAL v3 -diff --git a/tests/nodeinfodata/linux-ppc64-subcores2.expected b/tests/nodeinfodata/linux-ppc64-subcores2.expected -new file mode 100644 -index 0000000..e9709b5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-subcores2.expected -@@ -0,0 +1 @@ -+CPUs: 64/160, MHz: 3690, Nodes: 4, Sockets: 1, Cores: 5, Threads: 8 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_id -new file mode 100644 -index 0000000..f5c8955 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_id -@@ -0,0 +1 @@ -+32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings -new file mode 100644 -index 0000000..b7ec4e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings_list -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu0/topology/thread_siblings_list -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu1/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu1/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu1/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu10/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu10/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu10/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu100/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu100/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu100/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu101/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu101/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu101/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu102/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu102/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu102/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu103/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu103/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu103/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_id -new file mode 100644 -index 0000000..9bb71ca ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_id -@@ -0,0 +1 @@ -+2152 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings -new file mode 100644 -index 0000000..b4fa391 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings_list -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu104/topology/thread_siblings_list -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu105/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu105/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu105/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu106/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu106/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu106/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu107/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu107/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu107/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu108/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu108/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu108/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu109/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu109/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu109/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu11/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu11/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu11/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu110/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu110/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu110/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu111/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu111/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu111/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_id -new file mode 100644 -index 0000000..317509b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_id -@@ -0,0 +1 @@ -+2160 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings -new file mode 100644 -index 0000000..968e322 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings_list -new file mode 100644 -index 0000000..194b81c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu112/topology/thread_siblings_list -@@ -0,0 +1 @@ -+112 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu113/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu113/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu113/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu114/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu114/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu114/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu115/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu115/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu115/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu116/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu116/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu116/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu117/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu117/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu117/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu118/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu118/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu118/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu119/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu119/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu119/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu12/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu12/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu12/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu120/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu120/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu120/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu121/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu121/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu121/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu122/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu122/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu122/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu123/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu123/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu123/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu124/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu124/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu124/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu125/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu125/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu125/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu126/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu126/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu126/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu127/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu127/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu127/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_id -new file mode 100644 -index 0000000..5c54d10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_id -@@ -0,0 +1 @@ -+2216 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings -new file mode 100644 -index 0000000..379bb52 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings_list -new file mode 100644 -index 0000000..6c2f63b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings -new file mode 100644 -index 0000000..7e18bfb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings_list -new file mode 100644 -index 0000000..a949a93 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu128/topology/thread_siblings_list -@@ -0,0 +1 @@ -+128 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu129/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu129/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu129/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu13/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu13/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu13/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu130/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu130/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu130/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu131/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu131/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu131/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu132/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu132/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu132/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu133/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu133/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu133/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu134/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu134/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu134/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu135/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu135/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu135/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_id -new file mode 100644 -index 0000000..9813cea ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_id -@@ -0,0 +1 @@ -+2272 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings -new file mode 100644 -index 0000000..c05c51e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings_list -new file mode 100644 -index 0000000..7296f25 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/core_siblings_list -@@ -0,0 +1 @@ -+136 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings -new file mode 100644 -index 0000000..c05c51e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings_list -new file mode 100644 -index 0000000..7296f25 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu136/topology/thread_siblings_list -@@ -0,0 +1 @@ -+136 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu137/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu137/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu137/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu138/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu138/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu138/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu139/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu139/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu139/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu14/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu14/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu14/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu140/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu140/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu140/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu141/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu141/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu141/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu142/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu142/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu142/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu143/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu143/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu143/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu144/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu144/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu144/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu145/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu145/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu145/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu146/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu146/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu146/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu147/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu147/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu147/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu148/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu148/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu148/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu149/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu149/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu149/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu15/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu15/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu15/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu150/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu150/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu150/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu151/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu151/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu151/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu152/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu152/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu152/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu153/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu153/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu153/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu154/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu154/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu154/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu155/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu155/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu155/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu156/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu156/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu156/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu157/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu157/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu157/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu158/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu158/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu158/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu159/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu159/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu159/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_id -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_id -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings -new file mode 100644 -index 0000000..f15bff6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings_list -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu16/topology/thread_siblings_list -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu17/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu17/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu17/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu18/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu18/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu18/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu19/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu19/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu19/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu2/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu2/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu2/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu20/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu20/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu20/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu21/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu21/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu21/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu22/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu22/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu22/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu23/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu23/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu23/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_id -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_id -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings -new file mode 100644 -index 0000000..c20308b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings_list -new file mode 100644 -index 0000000..a45fd52 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu24/topology/thread_siblings_list -@@ -0,0 +1 @@ -+24 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu25/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu25/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu25/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu26/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu26/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu26/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu27/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu27/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu27/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu28/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu28/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu28/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu29/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu29/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu29/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu3/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu3/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu3/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu30/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu30/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu30/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu31/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu31/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu31/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_id -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_id -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings -new file mode 100644 -index 0000000..086b155 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings_list -new file mode 100644 -index 0000000..f5c8955 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu32/topology/thread_siblings_list -@@ -0,0 +1 @@ -+32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu33/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu33/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu33/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu34/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu34/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu34/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu35/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu35/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu35/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu36/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu36/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu36/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu37/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu37/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu37/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu38/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu38/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu38/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu39/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu39/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu39/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu4/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu4/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu4/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_id -new file mode 100644 -index 0000000..a762560 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_id -@@ -0,0 +1 @@ -+160 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings -new file mode 100644 -index 0000000..75e64d3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings_list -new file mode 100644 -index 0000000..07f0941 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,72 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings -new file mode 100644 -index 0000000..d98f0b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings_list -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu40/topology/thread_siblings_list -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu41/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu41/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu41/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu42/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu42/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu42/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu43/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu43/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu43/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu44/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu44/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu44/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu45/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu45/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu45/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu46/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu46/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu46/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu47/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu47/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu47/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_id -new file mode 100644 -index 0000000..de8febe ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_id -@@ -0,0 +1 @@ -+168 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings -new file mode 100644 -index 0000000..943a83a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings_list -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/core_siblings_list -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings -new file mode 100644 -index 0000000..943a83a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings_list -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu48/topology/thread_siblings_list -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu49/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu49/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu49/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu5/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu5/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu5/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu50/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu50/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu50/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu51/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu51/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu51/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu52/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu52/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu52/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu53/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu53/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu53/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu54/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu54/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu54/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu55/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu55/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu55/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_id -new file mode 100644 -index 0000000..1057e9a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_id -@@ -0,0 +1 @@ -+176 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings -new file mode 100644 -index 0000000..75e64d3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings_list -new file mode 100644 -index 0000000..07f0941 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,72 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings -new file mode 100644 -index 0000000..d25e217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings_list -new file mode 100644 -index 0000000..f6b91e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu56/topology/thread_siblings_list -@@ -0,0 +1 @@ -+56 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu57/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu57/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu57/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu58/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu58/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu58/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu59/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu59/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu59/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu6/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu6/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu6/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu60/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu60/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu60/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu61/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu61/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu61/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu62/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu62/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu62/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu63/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu63/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu63/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu64/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu64/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu64/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu65/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu65/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu65/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu66/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu66/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu66/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu67/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu67/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu67/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu68/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu68/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu68/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu69/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu69/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu69/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu7/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu7/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu7/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu70/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu70/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu70/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu71/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu71/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu71/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_id -new file mode 100644 -index 0000000..7c022ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_id -@@ -0,0 +1 @@ -+232 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings -new file mode 100644 -index 0000000..75e64d3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings_list -new file mode 100644 -index 0000000..07f0941 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,72 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings -new file mode 100644 -index 0000000..b85a0fd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings_list -new file mode 100644 -index 0000000..ea70ce0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu72/topology/thread_siblings_list -@@ -0,0 +1 @@ -+72 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu73/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu73/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu73/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu74/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu74/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu74/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu75/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu75/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu75/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu76/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu76/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu76/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu77/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu77/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu77/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu78/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu78/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu78/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu79/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu79/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu79/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_id -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_id -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings -new file mode 100644 -index 0000000..54d3782 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,01010101 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings_list -new file mode 100644 -index 0000000..d99ff75 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/core_siblings_list -@@ -0,0 +1 @@ -+0,8,16,24,32 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings -new file mode 100644 -index 0000000..ffeb503 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings_list -new file mode 100644 -index 0000000..45a4fb7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu8/topology/thread_siblings_list -@@ -0,0 +1 @@ -+8 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_id -new file mode 100644 -index 0000000..9c4a93f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_id -@@ -0,0 +1 @@ -+2088 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings -new file mode 100644 -index 0000000..17461e4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings_list -new file mode 100644 -index 0000000..d15a2cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu80/topology/thread_siblings_list -@@ -0,0 +1 @@ -+80 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu81/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu81/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu81/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu82/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu82/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu82/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu83/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu83/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu83/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu84/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu84/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu84/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu85/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu85/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu85/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu86/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu86/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu86/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu87/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu87/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu87/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_id -new file mode 100644 -index 0000000..ce21c02 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_id -@@ -0,0 +1 @@ -+2096 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings -new file mode 100644 -index 0000000..8aa7b77 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings_list -new file mode 100644 -index 0000000..d22307c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu88/topology/thread_siblings_list -@@ -0,0 +1 @@ -+88 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu89/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu89/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu89/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu9/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu9/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu9/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu90/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu90/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu90/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu91/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu91/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu91/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu92/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu92/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu92/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu93/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu93/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu93/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu94/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu94/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu94/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu95/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu95/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu95/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_id -new file mode 100644 -index 0000000..cc14af1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_id -@@ -0,0 +1 @@ -+2144 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings -new file mode 100644 -index 0000000..d5d4a45 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings_list -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/core_siblings_list -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/physical_package_id b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings -new file mode 100644 -index 0000000..d5d4a45 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings_list -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu96/topology/thread_siblings_list -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu97/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu97/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu97/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu98/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu98/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu98/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/cpu99/online b/tests/nodeinfodata/linux-subcores2/cpu/cpu99/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/cpu99/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/kernel_max b/tests/nodeinfodata/linux-subcores2/cpu/kernel_max -new file mode 100644 -index 0000000..b6ac305 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/kernel_max -@@ -0,0 +1 @@ -+2047 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/offline b/tests/nodeinfodata/linux-subcores2/cpu/offline -new file mode 100644 -index 0000000..eadee0c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/offline -@@ -0,0 +1 @@ -+1-7,9-15,17-23,25-31,33-47,49-95,97-135,137-159 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/online b/tests/nodeinfodata/linux-subcores2/cpu/online -new file mode 100644 -index 0000000..5aeee65 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/online -@@ -0,0 +1 @@ -+0,8,16,24,32,48,96,136 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/possible b/tests/nodeinfodata/linux-subcores2/cpu/possible -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/possible -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-subcores2/cpu/present b/tests/nodeinfodata/linux-subcores2/cpu/present -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/cpu/present -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu0 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu0 -new file mode 120000 -index 0000000..c841bea ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu0 -@@ -0,0 +1 @@ -+../../cpu/cpu0 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu1 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu1 -new file mode 120000 -index 0000000..5f45362 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu1 -@@ -0,0 +1 @@ -+../../cpu/cpu1 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu10 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu10 -new file mode 120000 -index 0000000..a6dc6bb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu10 -@@ -0,0 +1 @@ -+../../cpu/cpu10 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu11 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu11 -new file mode 120000 -index 0000000..e29d898 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu11 -@@ -0,0 +1 @@ -+../../cpu/cpu11 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu12 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu12 -new file mode 120000 -index 0000000..211519e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu12 -@@ -0,0 +1 @@ -+../../cpu/cpu12 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu13 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu13 -new file mode 120000 -index 0000000..52d3b69 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu13 -@@ -0,0 +1 @@ -+../../cpu/cpu13 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu14 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu14 -new file mode 120000 -index 0000000..24cb3b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu14 -@@ -0,0 +1 @@ -+../../cpu/cpu14 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu15 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu15 -new file mode 120000 -index 0000000..e905d85 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu15 -@@ -0,0 +1 @@ -+../../cpu/cpu15 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu16 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu16 -new file mode 120000 -index 0000000..445de40 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu16 -@@ -0,0 +1 @@ -+../../cpu/cpu16 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu17 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu17 -new file mode 120000 -index 0000000..13929db ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu17 -@@ -0,0 +1 @@ -+../../cpu/cpu17 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu18 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu18 -new file mode 120000 -index 0000000..3809adc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu18 -@@ -0,0 +1 @@ -+../../cpu/cpu18 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu19 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu19 -new file mode 120000 -index 0000000..c671083 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu19 -@@ -0,0 +1 @@ -+../../cpu/cpu19 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu2 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu2 -new file mode 120000 -index 0000000..2dcca33 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu2 -@@ -0,0 +1 @@ -+../../cpu/cpu2 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu20 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu20 -new file mode 120000 -index 0000000..a37c370 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu20 -@@ -0,0 +1 @@ -+../../cpu/cpu20 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu21 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu21 -new file mode 120000 -index 0000000..68a7cad ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu21 -@@ -0,0 +1 @@ -+../../cpu/cpu21 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu22 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu22 -new file mode 120000 -index 0000000..2c226ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu22 -@@ -0,0 +1 @@ -+../../cpu/cpu22 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu23 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu23 -new file mode 120000 -index 0000000..75c2f57 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu23 -@@ -0,0 +1 @@ -+../../cpu/cpu23 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu24 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu24 -new file mode 120000 -index 0000000..ad0a618 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu24 -@@ -0,0 +1 @@ -+../../cpu/cpu24 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu25 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu25 -new file mode 120000 -index 0000000..3145742 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu25 -@@ -0,0 +1 @@ -+../../cpu/cpu25 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu26 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu26 -new file mode 120000 -index 0000000..1dd180f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu26 -@@ -0,0 +1 @@ -+../../cpu/cpu26 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu27 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu27 -new file mode 120000 -index 0000000..74ced19 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu27 -@@ -0,0 +1 @@ -+../../cpu/cpu27 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu28 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu28 -new file mode 120000 -index 0000000..83269be ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu28 -@@ -0,0 +1 @@ -+../../cpu/cpu28 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu29 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu29 -new file mode 120000 -index 0000000..fa37dc6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu29 -@@ -0,0 +1 @@ -+../../cpu/cpu29 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu3 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu3 -new file mode 120000 -index 0000000..c7690e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu3 -@@ -0,0 +1 @@ -+../../cpu/cpu3 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu30 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu30 -new file mode 120000 -index 0000000..80226fa ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu30 -@@ -0,0 +1 @@ -+../../cpu/cpu30 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu31 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu31 -new file mode 120000 -index 0000000..6a9a569 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu31 -@@ -0,0 +1 @@ -+../../cpu/cpu31 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu32 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu32 -new file mode 120000 -index 0000000..bbca866 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu32 -@@ -0,0 +1 @@ -+../../cpu/cpu32 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu33 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu33 -new file mode 120000 -index 0000000..b7a9f8d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu33 -@@ -0,0 +1 @@ -+../../cpu/cpu33 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu34 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu34 -new file mode 120000 -index 0000000..0c0e738 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu34 -@@ -0,0 +1 @@ -+../../cpu/cpu34 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu35 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu35 -new file mode 120000 -index 0000000..47654d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu35 -@@ -0,0 +1 @@ -+../../cpu/cpu35 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu36 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu36 -new file mode 120000 -index 0000000..5e53f70 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu36 -@@ -0,0 +1 @@ -+../../cpu/cpu36 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu37 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu37 -new file mode 120000 -index 0000000..41b4ce7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu37 -@@ -0,0 +1 @@ -+../../cpu/cpu37 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu38 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu38 -new file mode 120000 -index 0000000..7231eb4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu38 -@@ -0,0 +1 @@ -+../../cpu/cpu38 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu39 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu39 -new file mode 120000 -index 0000000..d465480 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu39 -@@ -0,0 +1 @@ -+../../cpu/cpu39 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu4 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu4 -new file mode 120000 -index 0000000..9e77a64 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu4 -@@ -0,0 +1 @@ -+../../cpu/cpu4 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu5 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu5 -new file mode 120000 -index 0000000..cc07c3b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu5 -@@ -0,0 +1 @@ -+../../cpu/cpu5 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu6 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu6 -new file mode 120000 -index 0000000..2e75763 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu6 -@@ -0,0 +1 @@ -+../../cpu/cpu6 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu7 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu7 -new file mode 120000 -index 0000000..09e3f79 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu7 -@@ -0,0 +1 @@ -+../../cpu/cpu7 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu8 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu8 -new file mode 120000 -index 0000000..bda10cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu8 -@@ -0,0 +1 @@ -+../../cpu/cpu8 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/cpu9 b/tests/nodeinfodata/linux-subcores2/node/node0/cpu9 -new file mode 120000 -index 0000000..1ec1db2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/cpu9 -@@ -0,0 +1 @@ -+../../cpu/cpu9 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node0/meminfo b/tests/nodeinfodata/linux-subcores2/node/node0/meminfo -new file mode 100644 -index 0000000..b049e0d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node0/meminfo -@@ -0,0 +1,29 @@ -+Node 0 MemTotal: 67108864 kB -+Node 0 MemFree: 61653504 kB -+Node 0 MemUsed: 5455360 kB -+Node 0 Active: 221184 kB -+Node 0 Inactive: 212032 kB -+Node 0 Active(anon): 144576 kB -+Node 0 Inactive(anon): 8960 kB -+Node 0 Active(file): 76608 kB -+Node 0 Inactive(file): 203072 kB -+Node 0 Unevictable: 0 kB -+Node 0 Mlocked: 0 kB -+Node 0 Dirty: 92992 kB -+Node 0 Writeback: 0 kB -+Node 0 FilePages: 301504 kB -+Node 0 Mapped: 49792 kB -+Node 0 AnonPages: 131456 kB -+Node 0 Shmem: 22272 kB -+Node 0 KernelStack: 12016 kB -+Node 0 PageTables: 2048 kB -+Node 0 NFS_Unstable: 0 kB -+Node 0 Bounce: 0 kB -+Node 0 WritebackTmp: 0 kB -+Node 0 Slab: 249536 kB -+Node 0 SReclaimable: 44928 kB -+Node 0 SUnreclaim: 204608 kB -+Node 0 AnonHugePages: 0 kB -+Node 0 HugePages_Total: 0 -+Node 0 HugePages_Free: 0 -+Node 0 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu40 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu40 -new file mode 120000 -index 0000000..c727d46 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu40 -@@ -0,0 +1 @@ -+../../cpu/cpu40 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu41 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu41 -new file mode 120000 -index 0000000..cc0b78c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu41 -@@ -0,0 +1 @@ -+../../cpu/cpu41 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu42 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu42 -new file mode 120000 -index 0000000..8ebd18e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu42 -@@ -0,0 +1 @@ -+../../cpu/cpu42 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu43 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu43 -new file mode 120000 -index 0000000..03b2d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu43 -@@ -0,0 +1 @@ -+../../cpu/cpu43 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu44 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu44 -new file mode 120000 -index 0000000..859e4fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu44 -@@ -0,0 +1 @@ -+../../cpu/cpu44 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu45 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu45 -new file mode 120000 -index 0000000..58c3ca3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu45 -@@ -0,0 +1 @@ -+../../cpu/cpu45 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu46 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu46 -new file mode 120000 -index 0000000..55223e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu46 -@@ -0,0 +1 @@ -+../../cpu/cpu46 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu47 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu47 -new file mode 120000 -index 0000000..19407d4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu47 -@@ -0,0 +1 @@ -+../../cpu/cpu47 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu48 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu48 -new file mode 120000 -index 0000000..60a190c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu48 -@@ -0,0 +1 @@ -+../../cpu/cpu48 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu49 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu49 -new file mode 120000 -index 0000000..0ff1796 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu49 -@@ -0,0 +1 @@ -+../../cpu/cpu49 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu50 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu50 -new file mode 120000 -index 0000000..ddc5361 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu50 -@@ -0,0 +1 @@ -+../../cpu/cpu50 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu51 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu51 -new file mode 120000 -index 0000000..41163a9 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu51 -@@ -0,0 +1 @@ -+../../cpu/cpu51 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu52 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu52 -new file mode 120000 -index 0000000..be09dc8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu52 -@@ -0,0 +1 @@ -+../../cpu/cpu52 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu53 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu53 -new file mode 120000 -index 0000000..470ab22 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu53 -@@ -0,0 +1 @@ -+../../cpu/cpu53 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu54 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu54 -new file mode 120000 -index 0000000..5c11dfd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu54 -@@ -0,0 +1 @@ -+../../cpu/cpu54 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu55 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu55 -new file mode 120000 -index 0000000..e858949 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu55 -@@ -0,0 +1 @@ -+../../cpu/cpu55 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu56 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu56 -new file mode 120000 -index 0000000..586050f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu56 -@@ -0,0 +1 @@ -+../../cpu/cpu56 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu57 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu57 -new file mode 120000 -index 0000000..4276ac5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu57 -@@ -0,0 +1 @@ -+../../cpu/cpu57 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu58 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu58 -new file mode 120000 -index 0000000..3c10d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu58 -@@ -0,0 +1 @@ -+../../cpu/cpu58 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu59 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu59 -new file mode 120000 -index 0000000..06ddb97 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu59 -@@ -0,0 +1 @@ -+../../cpu/cpu59 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu60 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu60 -new file mode 120000 -index 0000000..c062761 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu60 -@@ -0,0 +1 @@ -+../../cpu/cpu60 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu61 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu61 -new file mode 120000 -index 0000000..5a2c12f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu61 -@@ -0,0 +1 @@ -+../../cpu/cpu61 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu62 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu62 -new file mode 120000 -index 0000000..9056072 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu62 -@@ -0,0 +1 @@ -+../../cpu/cpu62 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu63 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu63 -new file mode 120000 -index 0000000..1511953 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu63 -@@ -0,0 +1 @@ -+../../cpu/cpu63 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu64 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu64 -new file mode 120000 -index 0000000..1664a2b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu64 -@@ -0,0 +1 @@ -+../../cpu/cpu64 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu65 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu65 -new file mode 120000 -index 0000000..52712cf ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu65 -@@ -0,0 +1 @@ -+../../cpu/cpu65 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu66 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu66 -new file mode 120000 -index 0000000..93a4f32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu66 -@@ -0,0 +1 @@ -+../../cpu/cpu66 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu67 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu67 -new file mode 120000 -index 0000000..db73e74 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu67 -@@ -0,0 +1 @@ -+../../cpu/cpu67 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu68 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu68 -new file mode 120000 -index 0000000..4f40eb8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu68 -@@ -0,0 +1 @@ -+../../cpu/cpu68 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu69 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu69 -new file mode 120000 -index 0000000..9f32d96 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu69 -@@ -0,0 +1 @@ -+../../cpu/cpu69 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu70 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu70 -new file mode 120000 -index 0000000..a0e8fd2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu70 -@@ -0,0 +1 @@ -+../../cpu/cpu70 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu71 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu71 -new file mode 120000 -index 0000000..898c9f2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu71 -@@ -0,0 +1 @@ -+../../cpu/cpu71 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu72 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu72 -new file mode 120000 -index 0000000..d731cf5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu72 -@@ -0,0 +1 @@ -+../../cpu/cpu72 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu73 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu73 -new file mode 120000 -index 0000000..99f1a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu73 -@@ -0,0 +1 @@ -+../../cpu/cpu73 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu74 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu74 -new file mode 120000 -index 0000000..84a3139 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu74 -@@ -0,0 +1 @@ -+../../cpu/cpu74 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu75 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu75 -new file mode 120000 -index 0000000..0693a99 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu75 -@@ -0,0 +1 @@ -+../../cpu/cpu75 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu76 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu76 -new file mode 120000 -index 0000000..5ff7021 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu76 -@@ -0,0 +1 @@ -+../../cpu/cpu76 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu77 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu77 -new file mode 120000 -index 0000000..05099c6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu77 -@@ -0,0 +1 @@ -+../../cpu/cpu77 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu78 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu78 -new file mode 120000 -index 0000000..20eb9cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu78 -@@ -0,0 +1 @@ -+../../cpu/cpu78 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/cpu79 b/tests/nodeinfodata/linux-subcores2/node/node1/cpu79 -new file mode 120000 -index 0000000..4813a63 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/cpu79 -@@ -0,0 +1 @@ -+../../cpu/cpu79 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node1/meminfo b/tests/nodeinfodata/linux-subcores2/node/node1/meminfo -new file mode 100644 -index 0000000..10e3c69 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node1/meminfo -@@ -0,0 +1,29 @@ -+Node 1 MemTotal: 67108864 kB -+Node 1 MemFree: 66562176 kB -+Node 1 MemUsed: 546688 kB -+Node 1 Active: 24576 kB -+Node 1 Inactive: 6016 kB -+Node 1 Active(anon): 21824 kB -+Node 1 Inactive(anon): 128 kB -+Node 1 Active(file): 2752 kB -+Node 1 Inactive(file): 5888 kB -+Node 1 Unevictable: 0 kB -+Node 1 Mlocked: 0 kB -+Node 1 Dirty: 0 kB -+Node 1 Writeback: 0 kB -+Node 1 FilePages: 9088 kB -+Node 1 Mapped: 5056 kB -+Node 1 AnonPages: 21504 kB -+Node 1 Shmem: 448 kB -+Node 1 KernelStack: 5520 kB -+Node 1 PageTables: 64 kB -+Node 1 NFS_Unstable: 0 kB -+Node 1 Bounce: 0 kB -+Node 1 WritebackTmp: 0 kB -+Node 1 Slab: 58304 kB -+Node 1 SReclaimable: 5952 kB -+Node 1 SUnreclaim: 52352 kB -+Node 1 AnonHugePages: 0 kB -+Node 1 HugePages_Total: 0 -+Node 1 HugePages_Free: 0 -+Node 1 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu100 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu100 -new file mode 120000 -index 0000000..ffb1446 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu100 -@@ -0,0 +1 @@ -+../../cpu/cpu100 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu101 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu101 -new file mode 120000 -index 0000000..2b399e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu101 -@@ -0,0 +1 @@ -+../../cpu/cpu101 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu102 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu102 -new file mode 120000 -index 0000000..f06eb7d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu102 -@@ -0,0 +1 @@ -+../../cpu/cpu102 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu103 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu103 -new file mode 120000 -index 0000000..722b506 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu103 -@@ -0,0 +1 @@ -+../../cpu/cpu103 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu104 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu104 -new file mode 120000 -index 0000000..7692606 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu104 -@@ -0,0 +1 @@ -+../../cpu/cpu104 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu105 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu105 -new file mode 120000 -index 0000000..77d25d5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu105 -@@ -0,0 +1 @@ -+../../cpu/cpu105 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu106 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu106 -new file mode 120000 -index 0000000..f8bff26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu106 -@@ -0,0 +1 @@ -+../../cpu/cpu106 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu107 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu107 -new file mode 120000 -index 0000000..d475c15 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu107 -@@ -0,0 +1 @@ -+../../cpu/cpu107 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu108 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu108 -new file mode 120000 -index 0000000..4352ab8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu108 -@@ -0,0 +1 @@ -+../../cpu/cpu108 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu109 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu109 -new file mode 120000 -index 0000000..c74e8ec ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu109 -@@ -0,0 +1 @@ -+../../cpu/cpu109 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu110 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu110 -new file mode 120000 -index 0000000..fb66aa1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu110 -@@ -0,0 +1 @@ -+../../cpu/cpu110 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu111 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu111 -new file mode 120000 -index 0000000..b2da00c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu111 -@@ -0,0 +1 @@ -+../../cpu/cpu111 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu112 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu112 -new file mode 120000 -index 0000000..e65062a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu112 -@@ -0,0 +1 @@ -+../../cpu/cpu112 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu113 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu113 -new file mode 120000 -index 0000000..f8380bf ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu113 -@@ -0,0 +1 @@ -+../../cpu/cpu113 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu114 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu114 -new file mode 120000 -index 0000000..4c33e35 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu114 -@@ -0,0 +1 @@ -+../../cpu/cpu114 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu115 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu115 -new file mode 120000 -index 0000000..2b4fbce ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu115 -@@ -0,0 +1 @@ -+../../cpu/cpu115 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu116 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu116 -new file mode 120000 -index 0000000..7e07a2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu116 -@@ -0,0 +1 @@ -+../../cpu/cpu116 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu117 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu117 -new file mode 120000 -index 0000000..2d65930 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu117 -@@ -0,0 +1 @@ -+../../cpu/cpu117 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu118 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu118 -new file mode 120000 -index 0000000..b09093c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu118 -@@ -0,0 +1 @@ -+../../cpu/cpu118 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu119 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu119 -new file mode 120000 -index 0000000..59a5bf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu119 -@@ -0,0 +1 @@ -+../../cpu/cpu119 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu80 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu80 -new file mode 120000 -index 0000000..ce5ed81 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu80 -@@ -0,0 +1 @@ -+../../cpu/cpu80 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu81 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu81 -new file mode 120000 -index 0000000..dcd9a05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu81 -@@ -0,0 +1 @@ -+../../cpu/cpu81 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu82 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu82 -new file mode 120000 -index 0000000..c91ce01 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu82 -@@ -0,0 +1 @@ -+../../cpu/cpu82 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu83 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu83 -new file mode 120000 -index 0000000..22ba3c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu83 -@@ -0,0 +1 @@ -+../../cpu/cpu83 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu84 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu84 -new file mode 120000 -index 0000000..c7e4d26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu84 -@@ -0,0 +1 @@ -+../../cpu/cpu84 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu85 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu85 -new file mode 120000 -index 0000000..6779d27 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu85 -@@ -0,0 +1 @@ -+../../cpu/cpu85 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu86 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu86 -new file mode 120000 -index 0000000..9e777be ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu86 -@@ -0,0 +1 @@ -+../../cpu/cpu86 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu87 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu87 -new file mode 120000 -index 0000000..0359c58 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu87 -@@ -0,0 +1 @@ -+../../cpu/cpu87 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu88 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu88 -new file mode 120000 -index 0000000..3825c50 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu88 -@@ -0,0 +1 @@ -+../../cpu/cpu88 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu89 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu89 -new file mode 120000 -index 0000000..9a72211 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu89 -@@ -0,0 +1 @@ -+../../cpu/cpu89 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu90 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu90 -new file mode 120000 -index 0000000..75d10b3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu90 -@@ -0,0 +1 @@ -+../../cpu/cpu90 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu91 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu91 -new file mode 120000 -index 0000000..8e9e4a4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu91 -@@ -0,0 +1 @@ -+../../cpu/cpu91 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu92 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu92 -new file mode 120000 -index 0000000..f8d5f05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu92 -@@ -0,0 +1 @@ -+../../cpu/cpu92 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu93 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu93 -new file mode 120000 -index 0000000..5a302ad ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu93 -@@ -0,0 +1 @@ -+../../cpu/cpu93 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu94 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu94 -new file mode 120000 -index 0000000..9e6239f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu94 -@@ -0,0 +1 @@ -+../../cpu/cpu94 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu95 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu95 -new file mode 120000 -index 0000000..d87b5e3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu95 -@@ -0,0 +1 @@ -+../../cpu/cpu95 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu96 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu96 -new file mode 120000 -index 0000000..50d1edc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu96 -@@ -0,0 +1 @@ -+../../cpu/cpu96 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu97 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu97 -new file mode 120000 -index 0000000..38b5a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu97 -@@ -0,0 +1 @@ -+../../cpu/cpu97 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu98 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu98 -new file mode 120000 -index 0000000..df97c6c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu98 -@@ -0,0 +1 @@ -+../../cpu/cpu98 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/cpu99 b/tests/nodeinfodata/linux-subcores2/node/node16/cpu99 -new file mode 120000 -index 0000000..a3a6164 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/cpu99 -@@ -0,0 +1 @@ -+../../cpu/cpu99 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node16/meminfo b/tests/nodeinfodata/linux-subcores2/node/node16/meminfo -new file mode 100644 -index 0000000..c731729 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node16/meminfo -@@ -0,0 +1,29 @@ -+Node 16 MemTotal: 67108864 kB -+Node 16 MemFree: 66470528 kB -+Node 16 MemUsed: 638336 kB -+Node 16 Active: 17920 kB -+Node 16 Inactive: 65600 kB -+Node 16 Active(anon): 9728 kB -+Node 16 Inactive(anon): 64 kB -+Node 16 Active(file): 8192 kB -+Node 16 Inactive(file): 65536 kB -+Node 16 Unevictable: 0 kB -+Node 16 Mlocked: 0 kB -+Node 16 Dirty: 0 kB -+Node 16 Writeback: 0 kB -+Node 16 FilePages: 73792 kB -+Node 16 Mapped: 4672 kB -+Node 16 AnonPages: 9664 kB -+Node 16 Shmem: 128 kB -+Node 16 KernelStack: 5136 kB -+Node 16 PageTables: 64 kB -+Node 16 NFS_Unstable: 0 kB -+Node 16 Bounce: 0 kB -+Node 16 WritebackTmp: 0 kB -+Node 16 Slab: 82048 kB -+Node 16 SReclaimable: 9792 kB -+Node 16 SUnreclaim: 72256 kB -+Node 16 AnonHugePages: 0 kB -+Node 16 HugePages_Total: 0 -+Node 16 HugePages_Free: 0 -+Node 16 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu120 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu120 -new file mode 120000 -index 0000000..17a18b1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu120 -@@ -0,0 +1 @@ -+../../cpu/cpu120 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu121 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu121 -new file mode 120000 -index 0000000..321bbc2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu121 -@@ -0,0 +1 @@ -+../../cpu/cpu121 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu122 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu122 -new file mode 120000 -index 0000000..e03f5a3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu122 -@@ -0,0 +1 @@ -+../../cpu/cpu122 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu123 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu123 -new file mode 120000 -index 0000000..3021e4f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu123 -@@ -0,0 +1 @@ -+../../cpu/cpu123 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu124 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu124 -new file mode 120000 -index 0000000..10b32dc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu124 -@@ -0,0 +1 @@ -+../../cpu/cpu124 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu125 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu125 -new file mode 120000 -index 0000000..9e06e6e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu125 -@@ -0,0 +1 @@ -+../../cpu/cpu125 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu126 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu126 -new file mode 120000 -index 0000000..2a4708a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu126 -@@ -0,0 +1 @@ -+../../cpu/cpu126 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu127 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu127 -new file mode 120000 -index 0000000..96b5143 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu127 -@@ -0,0 +1 @@ -+../../cpu/cpu127 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu128 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu128 -new file mode 120000 -index 0000000..3142217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu128 -@@ -0,0 +1 @@ -+../../cpu/cpu128 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu129 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu129 -new file mode 120000 -index 0000000..dc84401 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu129 -@@ -0,0 +1 @@ -+../../cpu/cpu129 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu130 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu130 -new file mode 120000 -index 0000000..59a50b8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu130 -@@ -0,0 +1 @@ -+../../cpu/cpu130 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu131 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu131 -new file mode 120000 -index 0000000..ca1f958 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu131 -@@ -0,0 +1 @@ -+../../cpu/cpu131 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu132 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu132 -new file mode 120000 -index 0000000..a1f7ea1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu132 -@@ -0,0 +1 @@ -+../../cpu/cpu132 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu133 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu133 -new file mode 120000 -index 0000000..89e453b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu133 -@@ -0,0 +1 @@ -+../../cpu/cpu133 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu134 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu134 -new file mode 120000 -index 0000000..a46c33e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu134 -@@ -0,0 +1 @@ -+../../cpu/cpu134 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu135 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu135 -new file mode 120000 -index 0000000..4efd76f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu135 -@@ -0,0 +1 @@ -+../../cpu/cpu135 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu136 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu136 -new file mode 120000 -index 0000000..cfd61b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu136 -@@ -0,0 +1 @@ -+../../cpu/cpu136 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu137 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu137 -new file mode 120000 -index 0000000..6a1ec92 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu137 -@@ -0,0 +1 @@ -+../../cpu/cpu137 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu138 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu138 -new file mode 120000 -index 0000000..890aad3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu138 -@@ -0,0 +1 @@ -+../../cpu/cpu138 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu139 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu139 -new file mode 120000 -index 0000000..afb925f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu139 -@@ -0,0 +1 @@ -+../../cpu/cpu139 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu140 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu140 -new file mode 120000 -index 0000000..2faf4c0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu140 -@@ -0,0 +1 @@ -+../../cpu/cpu140 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu141 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu141 -new file mode 120000 -index 0000000..6cf8cf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu141 -@@ -0,0 +1 @@ -+../../cpu/cpu141 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu142 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu142 -new file mode 120000 -index 0000000..fa73d61 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu142 -@@ -0,0 +1 @@ -+../../cpu/cpu142 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu143 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu143 -new file mode 120000 -index 0000000..04dcaa4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu143 -@@ -0,0 +1 @@ -+../../cpu/cpu143 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu144 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu144 -new file mode 120000 -index 0000000..ccecb10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu144 -@@ -0,0 +1 @@ -+../../cpu/cpu144 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu145 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu145 -new file mode 120000 -index 0000000..00def86 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu145 -@@ -0,0 +1 @@ -+../../cpu/cpu145 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu146 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu146 -new file mode 120000 -index 0000000..6a13966 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu146 -@@ -0,0 +1 @@ -+../../cpu/cpu146 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu147 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu147 -new file mode 120000 -index 0000000..143c5a7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu147 -@@ -0,0 +1 @@ -+../../cpu/cpu147 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu148 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu148 -new file mode 120000 -index 0000000..21bae94 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu148 -@@ -0,0 +1 @@ -+../../cpu/cpu148 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu149 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu149 -new file mode 120000 -index 0000000..fdb0f17 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu149 -@@ -0,0 +1 @@ -+../../cpu/cpu149 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu150 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu150 -new file mode 120000 -index 0000000..da363e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu150 -@@ -0,0 +1 @@ -+../../cpu/cpu150 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu151 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu151 -new file mode 120000 -index 0000000..069de6b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu151 -@@ -0,0 +1 @@ -+../../cpu/cpu151 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu152 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu152 -new file mode 120000 -index 0000000..0fb022e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu152 -@@ -0,0 +1 @@ -+../../cpu/cpu152 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu153 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu153 -new file mode 120000 -index 0000000..d7e0f9e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu153 -@@ -0,0 +1 @@ -+../../cpu/cpu153 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu154 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu154 -new file mode 120000 -index 0000000..0a6117a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu154 -@@ -0,0 +1 @@ -+../../cpu/cpu154 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu155 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu155 -new file mode 120000 -index 0000000..201f0f5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu155 -@@ -0,0 +1 @@ -+../../cpu/cpu155 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu156 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu156 -new file mode 120000 -index 0000000..da7f12b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu156 -@@ -0,0 +1 @@ -+../../cpu/cpu156 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu157 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu157 -new file mode 120000 -index 0000000..c2aa5c2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu157 -@@ -0,0 +1 @@ -+../../cpu/cpu157 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu158 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu158 -new file mode 120000 -index 0000000..4376692 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu158 -@@ -0,0 +1 @@ -+../../cpu/cpu158 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/cpu159 b/tests/nodeinfodata/linux-subcores2/node/node17/cpu159 -new file mode 120000 -index 0000000..852a0c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/cpu159 -@@ -0,0 +1 @@ -+../../cpu/cpu159 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores2/node/node17/meminfo b/tests/nodeinfodata/linux-subcores2/node/node17/meminfo -new file mode 100644 -index 0000000..3bf1172 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/node17/meminfo -@@ -0,0 +1,29 @@ -+Node 17 MemTotal: 67108864 kB -+Node 17 MemFree: 66329472 kB -+Node 17 MemUsed: 779392 kB -+Node 17 Active: 5504 kB -+Node 17 Inactive: 2560 kB -+Node 17 Active(anon): 4800 kB -+Node 17 Inactive(anon): 128 kB -+Node 17 Active(file): 704 kB -+Node 17 Inactive(file): 2432 kB -+Node 17 Unevictable: 0 kB -+Node 17 Mlocked: 0 kB -+Node 17 Dirty: 0 kB -+Node 17 Writeback: 0 kB -+Node 17 FilePages: 3392 kB -+Node 17 Mapped: 192 kB -+Node 17 AnonPages: 4672 kB -+Node 17 Shmem: 256 kB -+Node 17 KernelStack: 5536 kB -+Node 17 PageTables: 128 kB -+Node 17 NFS_Unstable: 0 kB -+Node 17 Bounce: 0 kB -+Node 17 WritebackTmp: 0 kB -+Node 17 Slab: 41472 kB -+Node 17 SReclaimable: 2496 kB -+Node 17 SUnreclaim: 38976 kB -+Node 17 AnonHugePages: 0 kB -+Node 17 HugePages_Total: 0 -+Node 17 HugePages_Free: 0 -+Node 17 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores2/node/online b/tests/nodeinfodata/linux-subcores2/node/online -new file mode 100644 -index 0000000..a41eb32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/online -@@ -0,0 +1 @@ -+0-1,16-17 -diff --git a/tests/nodeinfodata/linux-subcores2/node/possible b/tests/nodeinfodata/linux-subcores2/node/possible -new file mode 100644 -index 0000000..8d232c7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores2/node/possible -@@ -0,0 +1 @@ -+0-255 -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index 4e3e1c9..127eb3b 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -237,6 +237,8 @@ mymain(void) - {"deconf-cpus", VIR_ARCH_PPC64}, - /* subcores, default configuration */ - {"subcores1", VIR_ARCH_PPC64}, -+ /* subcores, some of the cores are offline */ -+ {"subcores2", VIR_ARCH_PPC64}, - }; - - if (virInitialize() < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Add-subcores3-nodeinfo-test.patch b/SOURCES/libvirt-tests-Add-subcores3-nodeinfo-test.patch deleted file mode 100644 index 5523a9f..0000000 --- a/SOURCES/libvirt-tests-Add-subcores3-nodeinfo-test.patch +++ /dev/null @@ -1,4547 +0,0 @@ -From 0de6ee07d5eda55111510e702ffb57acc2b5ad15 Mon Sep 17 00:00:00 2001 -Message-Id: <0de6ee07d5eda55111510e702ffb57acc2b5ad15@dist-git> -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:39 +0200 -Subject: [PATCH] tests: Add subcores3 nodeinfo test - -This makes sure the subcore-unaware CPU counting logic is used -whenever the configuration is invalid. - -(cherry picked from commit b7102e9031e7f53187d817ef39b074ca208fbf6d) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/nodeinfodata/linux-ppc64-subcores3.cpuinfo | 110 +++++++++++++++++++++ - tests/nodeinfodata/linux-ppc64-subcores3.expected | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu0/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu1/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu10/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu100/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu101/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu102/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu103/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu104/online | 1 + - .../linux-subcores3/cpu/cpu104/topology/core_id | 1 + - .../cpu/cpu104/topology/core_siblings | 1 + - .../cpu/cpu104/topology/core_siblings_list | 1 + - .../cpu/cpu104/topology/physical_package_id | 1 + - .../cpu/cpu104/topology/thread_siblings | 1 + - .../cpu/cpu104/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu105/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu106/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu107/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu108/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu109/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu11/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu110/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu111/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu112/online | 1 + - .../linux-subcores3/cpu/cpu112/topology/core_id | 1 + - .../cpu/cpu112/topology/core_siblings | 1 + - .../cpu/cpu112/topology/core_siblings_list | 1 + - .../cpu/cpu112/topology/physical_package_id | 1 + - .../cpu/cpu112/topology/thread_siblings | 1 + - .../cpu/cpu112/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu113/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu114/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu115/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu116/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu117/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu118/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu119/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu12/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu120/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu121/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu122/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu123/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu124/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu125/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu126/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu127/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu128/online | 1 + - .../linux-subcores3/cpu/cpu128/topology/core_id | 1 + - .../cpu/cpu128/topology/core_siblings | 1 + - .../cpu/cpu128/topology/core_siblings_list | 1 + - .../cpu/cpu128/topology/physical_package_id | 1 + - .../cpu/cpu128/topology/thread_siblings | 1 + - .../cpu/cpu128/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu129/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu13/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu130/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu131/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu132/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu133/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu134/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu135/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu136/online | 1 + - .../linux-subcores3/cpu/cpu136/topology/core_id | 1 + - .../cpu/cpu136/topology/core_siblings | 1 + - .../cpu/cpu136/topology/core_siblings_list | 1 + - .../cpu/cpu136/topology/physical_package_id | 1 + - .../cpu/cpu136/topology/thread_siblings | 1 + - .../cpu/cpu136/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu137/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu138/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu139/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu14/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu140/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu141/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu142/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu143/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu144/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu145/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu146/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu147/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu148/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu149/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu15/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu150/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu151/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu152/online | 1 + - .../linux-subcores3/cpu/cpu152/topology/core_id | 1 + - .../cpu/cpu152/topology/core_siblings | 1 + - .../cpu/cpu152/topology/core_siblings_list | 1 + - .../cpu/cpu152/topology/physical_package_id | 1 + - .../cpu/cpu152/topology/thread_siblings | 1 + - .../cpu/cpu152/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu153/online | 1 + - .../linux-subcores3/cpu/cpu153/topology/core_id | 1 + - .../cpu/cpu153/topology/core_siblings | 1 + - .../cpu/cpu153/topology/core_siblings_list | 1 + - .../cpu/cpu153/topology/physical_package_id | 1 + - .../cpu/cpu153/topology/thread_siblings | 1 + - .../cpu/cpu153/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu154/online | 1 + - .../linux-subcores3/cpu/cpu154/topology/core_id | 1 + - .../cpu/cpu154/topology/core_siblings | 1 + - .../cpu/cpu154/topology/core_siblings_list | 1 + - .../cpu/cpu154/topology/physical_package_id | 1 + - .../cpu/cpu154/topology/thread_siblings | 1 + - .../cpu/cpu154/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu155/online | 1 + - .../linux-subcores3/cpu/cpu155/topology/core_id | 1 + - .../cpu/cpu155/topology/core_siblings | 1 + - .../cpu/cpu155/topology/core_siblings_list | 1 + - .../cpu/cpu155/topology/physical_package_id | 1 + - .../cpu/cpu155/topology/thread_siblings | 1 + - .../cpu/cpu155/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu156/online | 1 + - .../linux-subcores3/cpu/cpu156/topology/core_id | 1 + - .../cpu/cpu156/topology/core_siblings | 1 + - .../cpu/cpu156/topology/core_siblings_list | 1 + - .../cpu/cpu156/topology/physical_package_id | 1 + - .../cpu/cpu156/topology/thread_siblings | 1 + - .../cpu/cpu156/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu157/online | 1 + - .../linux-subcores3/cpu/cpu157/topology/core_id | 1 + - .../cpu/cpu157/topology/core_siblings | 1 + - .../cpu/cpu157/topology/core_siblings_list | 1 + - .../cpu/cpu157/topology/physical_package_id | 1 + - .../cpu/cpu157/topology/thread_siblings | 1 + - .../cpu/cpu157/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu158/online | 1 + - .../linux-subcores3/cpu/cpu158/topology/core_id | 1 + - .../cpu/cpu158/topology/core_siblings | 1 + - .../cpu/cpu158/topology/core_siblings_list | 1 + - .../cpu/cpu158/topology/physical_package_id | 1 + - .../cpu/cpu158/topology/thread_siblings | 1 + - .../cpu/cpu158/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu159/online | 1 + - .../linux-subcores3/cpu/cpu159/topology/core_id | 1 + - .../cpu/cpu159/topology/core_siblings | 1 + - .../cpu/cpu159/topology/core_siblings_list | 1 + - .../cpu/cpu159/topology/physical_package_id | 1 + - .../cpu/cpu159/topology/thread_siblings | 1 + - .../cpu/cpu159/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu16/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu17/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu18/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu19/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu2/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu20/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu21/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu22/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu23/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu24/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu25/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu26/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu27/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu28/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu29/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu3/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu30/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu31/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu32/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu33/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu34/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu35/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu36/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu37/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu38/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu39/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu4/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu40/online | 1 + - .../linux-subcores3/cpu/cpu40/topology/core_id | 1 + - .../cpu/cpu40/topology/core_siblings | 1 + - .../cpu/cpu40/topology/core_siblings_list | 1 + - .../cpu/cpu40/topology/physical_package_id | 1 + - .../cpu/cpu40/topology/thread_siblings | 1 + - .../cpu/cpu40/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu41/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu42/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu43/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu44/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu45/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu46/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu47/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu48/online | 1 + - .../linux-subcores3/cpu/cpu48/topology/core_id | 1 + - .../cpu/cpu48/topology/core_siblings | 1 + - .../cpu/cpu48/topology/core_siblings_list | 1 + - .../cpu/cpu48/topology/physical_package_id | 1 + - .../cpu/cpu48/topology/thread_siblings | 1 + - .../cpu/cpu48/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu49/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu5/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu50/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu51/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu52/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu53/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu54/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu55/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu56/online | 1 + - .../linux-subcores3/cpu/cpu56/topology/core_id | 1 + - .../cpu/cpu56/topology/core_siblings | 1 + - .../cpu/cpu56/topology/core_siblings_list | 1 + - .../cpu/cpu56/topology/physical_package_id | 1 + - .../cpu/cpu56/topology/thread_siblings | 1 + - .../cpu/cpu56/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu57/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu58/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu59/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu6/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu60/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu61/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu62/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu63/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu64/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu65/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu66/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu67/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu68/online | 1 + - .../linux-subcores3/cpu/cpu68/topology/core_id | 1 + - .../cpu/cpu68/topology/core_siblings | 1 + - .../cpu/cpu68/topology/core_siblings_list | 1 + - .../cpu/cpu68/topology/physical_package_id | 1 + - .../cpu/cpu68/topology/thread_siblings | 1 + - .../cpu/cpu68/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu69/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu7/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu70/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu71/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu72/online | 1 + - .../linux-subcores3/cpu/cpu72/topology/core_id | 1 + - .../cpu/cpu72/topology/core_siblings | 1 + - .../cpu/cpu72/topology/core_siblings_list | 1 + - .../cpu/cpu72/topology/physical_package_id | 1 + - .../cpu/cpu72/topology/thread_siblings | 1 + - .../cpu/cpu72/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu73/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu74/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu75/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu76/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu77/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu78/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu79/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu8/online | 1 + - .../linux-subcores3/cpu/cpu8/topology/core_id | 1 + - .../cpu/cpu8/topology/core_siblings | 1 + - .../cpu/cpu8/topology/core_siblings_list | 1 + - .../cpu/cpu8/topology/physical_package_id | 1 + - .../cpu/cpu8/topology/thread_siblings | 1 + - .../cpu/cpu8/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu80/online | 1 + - .../linux-subcores3/cpu/cpu80/topology/core_id | 1 + - .../cpu/cpu80/topology/core_siblings | 1 + - .../cpu/cpu80/topology/core_siblings_list | 1 + - .../cpu/cpu80/topology/physical_package_id | 1 + - .../cpu/cpu80/topology/thread_siblings | 1 + - .../cpu/cpu80/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu81/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu82/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu83/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu84/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu85/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu86/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu87/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu88/online | 1 + - .../linux-subcores3/cpu/cpu88/topology/core_id | 1 + - .../cpu/cpu88/topology/core_siblings | 1 + - .../cpu/cpu88/topology/core_siblings_list | 1 + - .../cpu/cpu88/topology/physical_package_id | 1 + - .../cpu/cpu88/topology/thread_siblings | 1 + - .../cpu/cpu88/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu89/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/cpu9/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu90/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu91/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu92/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu93/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu94/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu95/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu96/online | 1 + - .../linux-subcores3/cpu/cpu96/topology/core_id | 1 + - .../cpu/cpu96/topology/core_siblings | 1 + - .../cpu/cpu96/topology/core_siblings_list | 1 + - .../cpu/cpu96/topology/physical_package_id | 1 + - .../cpu/cpu96/topology/thread_siblings | 1 + - .../cpu/cpu96/topology/thread_siblings_list | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu97/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu98/online | 1 + - .../nodeinfodata/linux-subcores3/cpu/cpu99/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/kernel_max | 1 + - tests/nodeinfodata/linux-subcores3/cpu/offline | 1 + - tests/nodeinfodata/linux-subcores3/cpu/online | 1 + - tests/nodeinfodata/linux-subcores3/cpu/possible | 1 + - tests/nodeinfodata/linux-subcores3/cpu/present | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu0 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu1 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu10 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu11 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu12 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu13 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu14 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu15 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu16 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu17 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu18 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu19 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu2 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu20 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu21 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu22 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu23 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu24 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu25 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu26 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu27 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu28 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu29 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu3 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu30 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu31 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu32 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu33 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu34 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu35 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu36 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu37 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu38 | 1 + - .../nodeinfodata/linux-subcores3/node/node0/cpu39 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu4 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu5 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu6 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu7 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu8 | 1 + - tests/nodeinfodata/linux-subcores3/node/node0/cpu9 | 1 + - .../linux-subcores3/node/node0/meminfo | 29 ++++++ - .../nodeinfodata/linux-subcores3/node/node1/cpu40 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu41 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu42 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu43 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu44 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu45 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu46 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu47 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu48 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu49 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu50 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu51 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu52 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu53 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu54 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu55 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu56 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu57 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu58 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu59 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu60 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu61 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu62 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu63 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu64 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu65 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu66 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu67 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu68 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu69 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu70 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu71 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu72 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu73 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu74 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu75 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu76 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu77 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu78 | 1 + - .../nodeinfodata/linux-subcores3/node/node1/cpu79 | 1 + - .../linux-subcores3/node/node1/meminfo | 29 ++++++ - .../linux-subcores3/node/node16/cpu100 | 1 + - .../linux-subcores3/node/node16/cpu101 | 1 + - .../linux-subcores3/node/node16/cpu102 | 1 + - .../linux-subcores3/node/node16/cpu103 | 1 + - .../linux-subcores3/node/node16/cpu104 | 1 + - .../linux-subcores3/node/node16/cpu105 | 1 + - .../linux-subcores3/node/node16/cpu106 | 1 + - .../linux-subcores3/node/node16/cpu107 | 1 + - .../linux-subcores3/node/node16/cpu108 | 1 + - .../linux-subcores3/node/node16/cpu109 | 1 + - .../linux-subcores3/node/node16/cpu110 | 1 + - .../linux-subcores3/node/node16/cpu111 | 1 + - .../linux-subcores3/node/node16/cpu112 | 1 + - .../linux-subcores3/node/node16/cpu113 | 1 + - .../linux-subcores3/node/node16/cpu114 | 1 + - .../linux-subcores3/node/node16/cpu115 | 1 + - .../linux-subcores3/node/node16/cpu116 | 1 + - .../linux-subcores3/node/node16/cpu117 | 1 + - .../linux-subcores3/node/node16/cpu118 | 1 + - .../linux-subcores3/node/node16/cpu119 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu80 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu81 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu82 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu83 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu84 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu85 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu86 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu87 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu88 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu89 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu90 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu91 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu92 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu93 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu94 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu95 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu96 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu97 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu98 | 1 + - .../nodeinfodata/linux-subcores3/node/node16/cpu99 | 1 + - .../linux-subcores3/node/node16/meminfo | 29 ++++++ - .../linux-subcores3/node/node17/cpu120 | 1 + - .../linux-subcores3/node/node17/cpu121 | 1 + - .../linux-subcores3/node/node17/cpu122 | 1 + - .../linux-subcores3/node/node17/cpu123 | 1 + - .../linux-subcores3/node/node17/cpu124 | 1 + - .../linux-subcores3/node/node17/cpu125 | 1 + - .../linux-subcores3/node/node17/cpu126 | 1 + - .../linux-subcores3/node/node17/cpu127 | 1 + - .../linux-subcores3/node/node17/cpu128 | 1 + - .../linux-subcores3/node/node17/cpu129 | 1 + - .../linux-subcores3/node/node17/cpu130 | 1 + - .../linux-subcores3/node/node17/cpu131 | 1 + - .../linux-subcores3/node/node17/cpu132 | 1 + - .../linux-subcores3/node/node17/cpu133 | 1 + - .../linux-subcores3/node/node17/cpu134 | 1 + - .../linux-subcores3/node/node17/cpu135 | 1 + - .../linux-subcores3/node/node17/cpu136 | 1 + - .../linux-subcores3/node/node17/cpu137 | 1 + - .../linux-subcores3/node/node17/cpu138 | 1 + - .../linux-subcores3/node/node17/cpu139 | 1 + - .../linux-subcores3/node/node17/cpu140 | 1 + - .../linux-subcores3/node/node17/cpu141 | 1 + - .../linux-subcores3/node/node17/cpu142 | 1 + - .../linux-subcores3/node/node17/cpu143 | 1 + - .../linux-subcores3/node/node17/cpu144 | 1 + - .../linux-subcores3/node/node17/cpu145 | 1 + - .../linux-subcores3/node/node17/cpu146 | 1 + - .../linux-subcores3/node/node17/cpu147 | 1 + - .../linux-subcores3/node/node17/cpu148 | 1 + - .../linux-subcores3/node/node17/cpu149 | 1 + - .../linux-subcores3/node/node17/cpu150 | 1 + - .../linux-subcores3/node/node17/cpu151 | 1 + - .../linux-subcores3/node/node17/cpu152 | 1 + - .../linux-subcores3/node/node17/cpu153 | 1 + - .../linux-subcores3/node/node17/cpu154 | 1 + - .../linux-subcores3/node/node17/cpu155 | 1 + - .../linux-subcores3/node/node17/cpu156 | 1 + - .../linux-subcores3/node/node17/cpu157 | 1 + - .../linux-subcores3/node/node17/cpu158 | 1 + - .../linux-subcores3/node/node17/cpu159 | 1 + - .../linux-subcores3/node/node17/meminfo | 29 ++++++ - tests/nodeinfodata/linux-subcores3/node/online | 1 + - tests/nodeinfodata/linux-subcores3/node/possible | 1 + - tests/nodeinfotest.c | 2 + - 460 files changed, 682 insertions(+) - create mode 100644 tests/nodeinfodata/linux-ppc64-subcores3.cpuinfo - create mode 100644 tests/nodeinfodata/linux-ppc64-subcores3.expected - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu0/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu1/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu10/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu100/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu101/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu102/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu103/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu105/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu106/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu107/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu108/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu109/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu11/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu110/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu111/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu113/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu114/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu115/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu116/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu117/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu118/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu119/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu12/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu120/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu121/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu122/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu123/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu124/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu125/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu126/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu127/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu129/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu13/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu130/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu131/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu132/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu133/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu134/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu135/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu137/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu138/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu139/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu14/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu140/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu141/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu142/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu143/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu144/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu145/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu146/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu147/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu148/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu149/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu15/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu150/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu151/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu16/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu17/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu18/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu19/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu2/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu20/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu21/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu22/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu23/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu24/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu25/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu26/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu27/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu28/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu29/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu3/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu30/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu31/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu32/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu33/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu34/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu35/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu36/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu37/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu38/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu39/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu4/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu41/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu42/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu43/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu44/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu45/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu46/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu47/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu49/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu5/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu50/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu51/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu52/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu53/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu54/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu55/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu57/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu58/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu59/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu6/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu60/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu61/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu62/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu63/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu64/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu65/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu66/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu67/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu69/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu7/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu70/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu71/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu73/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu74/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu75/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu76/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu77/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu78/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu79/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu81/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu82/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu83/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu84/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu85/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu86/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu87/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu89/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu9/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu90/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu91/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu92/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu93/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu94/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu95/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/physical_package_id - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings_list - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu97/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu98/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/cpu99/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/kernel_max - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/offline - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/online - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/possible - create mode 100644 tests/nodeinfodata/linux-subcores3/cpu/present - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu0 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu1 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu10 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu11 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu12 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu13 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu14 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu15 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu16 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu17 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu18 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu19 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu2 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu20 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu21 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu22 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu23 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu24 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu25 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu26 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu27 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu28 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu29 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu3 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu30 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu31 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu32 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu33 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu34 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu35 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu36 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu37 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu38 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu39 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu4 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu5 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu6 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu7 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu8 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node0/cpu9 - create mode 100644 tests/nodeinfodata/linux-subcores3/node/node0/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu40 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu41 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu42 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu43 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu44 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu45 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu46 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu47 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu48 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu49 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu50 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu51 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu52 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu53 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu54 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu55 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu56 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu57 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu58 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu59 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu60 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu61 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu62 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu63 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu64 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu65 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu66 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu67 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu68 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu69 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu70 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu71 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu72 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu73 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu74 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu75 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu76 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu77 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu78 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node1/cpu79 - create mode 100644 tests/nodeinfodata/linux-subcores3/node/node1/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu100 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu101 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu102 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu103 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu104 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu105 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu106 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu107 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu108 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu109 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu110 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu111 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu112 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu113 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu114 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu115 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu116 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu117 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu118 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu119 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu80 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu81 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu82 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu83 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu84 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu85 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu86 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu87 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu88 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu89 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu90 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu91 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu92 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu93 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu94 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu95 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu96 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu97 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu98 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node16/cpu99 - create mode 100644 tests/nodeinfodata/linux-subcores3/node/node16/meminfo - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu120 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu121 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu122 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu123 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu124 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu125 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu126 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu127 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu128 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu129 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu130 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu131 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu132 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu133 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu134 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu135 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu136 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu137 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu138 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu139 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu140 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu141 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu142 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu143 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu144 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu145 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu146 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu147 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu148 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu149 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu150 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu151 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu152 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu153 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu154 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu155 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu156 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu157 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu158 - create mode 120000 tests/nodeinfodata/linux-subcores3/node/node17/cpu159 - create mode 100644 tests/nodeinfodata/linux-subcores3/node/node17/meminfo - create mode 100644 tests/nodeinfodata/linux-subcores3/node/online - create mode 100644 tests/nodeinfodata/linux-subcores3/node/possible - -diff --git a/tests/nodeinfodata/linux-ppc64-subcores3.cpuinfo b/tests/nodeinfodata/linux-ppc64-subcores3.cpuinfo -new file mode 100644 -index 0000000..2ec7b46 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-subcores3.cpuinfo -@@ -0,0 +1,110 @@ -+processor : 8 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 40 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 48 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 56 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 68 -+cpu : POWER8E (raw), altivec supported -+clock : 2061.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 72 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 80 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 88 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 96 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 104 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 112 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 128 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 136 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 152 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 153 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 154 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 155 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 156 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 157 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 158 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 159 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+timebase : 512000000 -+platform : PowerNV -+model : 8247-22L -+machine : PowerNV 8247-22L -+firmware : OPAL v3 -diff --git a/tests/nodeinfodata/linux-ppc64-subcores3.expected b/tests/nodeinfodata/linux-ppc64-subcores3.expected -new file mode 100644 -index 0000000..716bab2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-subcores3.expected -@@ -0,0 +1 @@ -+CPUs: 21/160, MHz: 3690, Nodes: 4, Sockets: 1, Cores: 5, Threads: 8 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu0/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu0/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu0/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu1/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu1/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu1/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu10/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu10/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu10/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu100/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu100/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu100/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu101/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu101/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu101/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu102/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu102/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu102/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu103/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu103/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu103/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_id -new file mode 100644 -index 0000000..9bb71ca ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_id -@@ -0,0 +1 @@ -+2152 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings -new file mode 100644 -index 0000000..b4fa391 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings_list -new file mode 100644 -index 0000000..b16e5f7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu104/topology/thread_siblings_list -@@ -0,0 +1 @@ -+104 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu105/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu105/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu105/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu106/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu106/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu106/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu107/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu107/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu107/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu108/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu108/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu108/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu109/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu109/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu109/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu11/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu11/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu11/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu110/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu110/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu110/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu111/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu111/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu111/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_id -new file mode 100644 -index 0000000..317509b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_id -@@ -0,0 +1 @@ -+2160 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings -new file mode 100644 -index 0000000..968e322 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings_list -new file mode 100644 -index 0000000..194b81c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu112/topology/thread_siblings_list -@@ -0,0 +1 @@ -+112 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu113/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu113/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu113/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu114/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu114/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu114/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu115/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu115/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu115/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu116/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu116/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu116/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu117/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu117/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu117/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu118/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu118/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu118/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu119/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu119/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu119/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu12/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu12/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu12/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu120/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu120/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu120/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu121/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu121/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu121/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu122/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu122/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu122/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu123/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu123/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu123/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu124/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu124/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu124/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu125/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu125/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu125/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu126/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu126/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu126/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu127/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu127/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu127/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_id -new file mode 100644 -index 0000000..5c54d10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_id -@@ -0,0 +1 @@ -+2216 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings -new file mode 100644 -index 0000000..7e18bfb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings_list -new file mode 100644 -index 0000000..a949a93 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu128/topology/thread_siblings_list -@@ -0,0 +1 @@ -+128 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu129/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu129/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu129/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu13/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu13/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu13/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu130/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu130/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu130/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu131/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu131/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu131/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu132/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu132/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu132/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu133/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu133/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu133/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu134/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu134/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu134/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu135/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu135/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu135/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_id -new file mode 100644 -index 0000000..9813cea ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_id -@@ -0,0 +1 @@ -+2272 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings -new file mode 100644 -index 0000000..c05c51e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings_list -new file mode 100644 -index 0000000..7296f25 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu136/topology/thread_siblings_list -@@ -0,0 +1 @@ -+136 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu137/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu137/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu137/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu138/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu138/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu138/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu139/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu139/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu139/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu14/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu14/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu14/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu140/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu140/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu140/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu141/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu141/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu141/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu142/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu142/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu142/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu143/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu143/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu143/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu144/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu144/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu144/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu145/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu145/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu145/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu146/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu146/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu146/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu147/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu147/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu147/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu148/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu148/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu148/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu149/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu149/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu149/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu15/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu15/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu15/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu150/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu150/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu150/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu151/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu151/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu151/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu152/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu153/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu154/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu155/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu156/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu157/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu158/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_id -new file mode 100644 -index 0000000..f0e709d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_id -@@ -0,0 +1 @@ -+2288 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings -new file mode 100644 -index 0000000..2d19993 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000101,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings_list -new file mode 100644 -index 0000000..633764e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/core_siblings_list -@@ -0,0 +1 @@ -+128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/physical_package_id -new file mode 100644 -index 0000000..98d9bcb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/physical_package_id -@@ -0,0 +1 @@ -+17 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings -new file mode 100644 -index 0000000..79ef01b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,ff000000,00000000,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings_list -new file mode 100644 -index 0000000..1d46252 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu159/topology/thread_siblings_list -@@ -0,0 +1 @@ -+152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu16/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu16/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu16/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu17/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu17/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu17/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu18/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu18/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu18/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu19/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu19/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu19/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu2/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu2/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu2/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu20/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu20/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu20/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu21/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu21/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu21/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu22/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu22/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu22/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu23/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu23/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu23/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu24/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu24/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu24/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu25/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu25/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu25/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu26/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu26/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu26/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu27/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu27/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu27/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu28/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu28/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu28/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu29/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu29/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu29/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu3/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu3/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu3/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu30/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu30/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu30/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu31/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu31/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu31/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu32/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu32/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu32/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu33/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu33/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu33/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu34/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu34/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu34/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu35/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu35/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu35/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu36/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu36/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu36/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu37/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu37/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu37/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu38/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu38/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu38/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu39/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu39/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu39/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu4/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu4/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu4/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_id -new file mode 100644 -index 0000000..a762560 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_id -@@ -0,0 +1 @@ -+160 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings -new file mode 100644 -index 0000000..226dfb1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000110,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings_list -new file mode 100644 -index 0000000..061c6d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,68,72 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings -new file mode 100644 -index 0000000..d98f0b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings_list -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu40/topology/thread_siblings_list -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu41/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu41/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu41/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu42/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu42/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu42/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu43/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu43/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu43/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu44/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu44/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu44/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu45/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu45/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu45/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu46/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu46/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu46/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu47/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu47/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu47/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_id -new file mode 100644 -index 0000000..de8febe ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_id -@@ -0,0 +1 @@ -+168 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings -new file mode 100644 -index 0000000..226dfb1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000110,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings_list -new file mode 100644 -index 0000000..061c6d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,68,72 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings -new file mode 100644 -index 0000000..943a83a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings_list -new file mode 100644 -index 0000000..21e72e8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu48/topology/thread_siblings_list -@@ -0,0 +1 @@ -+48 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu49/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu49/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu49/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu5/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu5/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu5/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu50/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu50/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu50/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu51/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu51/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu51/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu52/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu52/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu52/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu53/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu53/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu53/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu54/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu54/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu54/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu55/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu55/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu55/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_id -new file mode 100644 -index 0000000..1057e9a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_id -@@ -0,0 +1 @@ -+176 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings -new file mode 100644 -index 0000000..226dfb1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000110,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings_list -new file mode 100644 -index 0000000..061c6d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,68,72 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings -new file mode 100644 -index 0000000..d25e217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings_list -new file mode 100644 -index 0000000..f6b91e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu56/topology/thread_siblings_list -@@ -0,0 +1 @@ -+56 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu57/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu57/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu57/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu58/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu58/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu58/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu59/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu59/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu59/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu6/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu6/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu6/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu60/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu60/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu60/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu61/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu61/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu61/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu62/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu62/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu62/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu63/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu63/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu63/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu64/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu64/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu64/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu65/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu65/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu65/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu66/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu66/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu66/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu67/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu67/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu67/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_id -new file mode 100644 -index 0000000..20c9080 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_id -@@ -0,0 +1 @@ -+224 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings -new file mode 100644 -index 0000000..226dfb1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000110,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings_list -new file mode 100644 -index 0000000..061c6d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,68,72 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings -new file mode 100644 -index 0000000..41e89b2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000010,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings_list -new file mode 100644 -index 0000000..38b10c1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu68/topology/thread_siblings_list -@@ -0,0 +1 @@ -+68 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu69/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu69/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu69/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu7/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu7/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu7/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu70/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu70/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu70/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu71/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu71/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu71/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_id -new file mode 100644 -index 0000000..7c022ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_id -@@ -0,0 +1 @@ -+232 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings -new file mode 100644 -index 0000000..226dfb1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000110,01010100,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings_list -new file mode 100644 -index 0000000..061c6d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/core_siblings_list -@@ -0,0 +1 @@ -+40,48,56,68,72 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/physical_package_id -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/physical_package_id -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings -new file mode 100644 -index 0000000..b85a0fd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings_list -new file mode 100644 -index 0000000..ea70ce0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu72/topology/thread_siblings_list -@@ -0,0 +1 @@ -+72 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu73/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu73/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu73/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu74/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu74/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu74/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu75/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu75/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu75/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu76/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu76/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu76/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu77/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu77/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu77/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu78/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu78/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu78/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu79/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu79/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu79/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_id -new file mode 100644 -index 0000000..425151f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_id -@@ -0,0 +1 @@ -+40 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings -new file mode 100644 -index 0000000..ffeb503 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings_list -new file mode 100644 -index 0000000..45a4fb7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/core_siblings_list -@@ -0,0 +1 @@ -+8 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/physical_package_id -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/physical_package_id -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings -new file mode 100644 -index 0000000..ffeb503 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings_list -new file mode 100644 -index 0000000..45a4fb7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu8/topology/thread_siblings_list -@@ -0,0 +1 @@ -+8 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_id -new file mode 100644 -index 0000000..9c4a93f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_id -@@ -0,0 +1 @@ -+2088 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings -new file mode 100644 -index 0000000..17461e4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings_list -new file mode 100644 -index 0000000..d15a2cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu80/topology/thread_siblings_list -@@ -0,0 +1 @@ -+80 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu81/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu81/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu81/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu82/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu82/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu82/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu83/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu83/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu83/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu84/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu84/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu84/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu85/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu85/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu85/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu86/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu86/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu86/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu87/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu87/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu87/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_id -new file mode 100644 -index 0000000..ce21c02 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_id -@@ -0,0 +1 @@ -+2096 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings -new file mode 100644 -index 0000000..8aa7b77 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,01000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings_list -new file mode 100644 -index 0000000..d22307c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu88/topology/thread_siblings_list -@@ -0,0 +1 @@ -+88 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu89/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu89/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu89/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu9/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu9/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu9/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu90/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu90/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu90/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu91/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu91/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu91/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu92/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu92/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu92/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu93/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu93/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu93/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu94/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu94/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu94/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu95/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu95/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu95/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/online -new file mode 100644 -index 0000000..d00491f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/online -@@ -0,0 +1 @@ -+1 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_id -new file mode 100644 -index 0000000..cc14af1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_id -@@ -0,0 +1 @@ -+2144 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings -new file mode 100644 -index 0000000..c98a5a2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010101,01010000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings_list -new file mode 100644 -index 0000000..e0e478b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/core_siblings_list -@@ -0,0 +1 @@ -+80,88,96,104,112 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/physical_package_id b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/physical_package_id -new file mode 100644 -index 0000000..b6a7d89 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/physical_package_id -@@ -0,0 +1 @@ -+16 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings -new file mode 100644 -index 0000000..d5d4a45 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings -@@ -0,0 +1 @@ -+00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001,00000000,00000000,00000000 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings_list b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings_list -new file mode 100644 -index 0000000..f906e18 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu96/topology/thread_siblings_list -@@ -0,0 +1 @@ -+96 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu97/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu97/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu97/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu98/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu98/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu98/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/cpu99/online b/tests/nodeinfodata/linux-subcores3/cpu/cpu99/online -new file mode 100644 -index 0000000..573541a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/cpu99/online -@@ -0,0 +1 @@ -+0 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/kernel_max b/tests/nodeinfodata/linux-subcores3/cpu/kernel_max -new file mode 100644 -index 0000000..b6ac305 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/kernel_max -@@ -0,0 +1 @@ -+2047 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/offline b/tests/nodeinfodata/linux-subcores3/cpu/offline -new file mode 100644 -index 0000000..74796ec ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/offline -@@ -0,0 +1 @@ -+0-7,9-39,41-47,49-55,57-67,69-71,73-79,81-87,89-95,97-103,105-111,113-127,129-135,137-151 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/online b/tests/nodeinfodata/linux-subcores3/cpu/online -new file mode 100644 -index 0000000..3b0ba7e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/online -@@ -0,0 +1 @@ -+8,40,48,56,68,72,80,88,96,104,112,128,136,152-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/possible b/tests/nodeinfodata/linux-subcores3/cpu/possible -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/possible -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-subcores3/cpu/present b/tests/nodeinfodata/linux-subcores3/cpu/present -new file mode 100644 -index 0000000..7a662d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/cpu/present -@@ -0,0 +1 @@ -+0-159 -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu0 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu0 -new file mode 120000 -index 0000000..c841bea ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu0 -@@ -0,0 +1 @@ -+../../cpu/cpu0 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu1 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu1 -new file mode 120000 -index 0000000..5f45362 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu1 -@@ -0,0 +1 @@ -+../../cpu/cpu1 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu10 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu10 -new file mode 120000 -index 0000000..a6dc6bb ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu10 -@@ -0,0 +1 @@ -+../../cpu/cpu10 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu11 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu11 -new file mode 120000 -index 0000000..e29d898 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu11 -@@ -0,0 +1 @@ -+../../cpu/cpu11 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu12 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu12 -new file mode 120000 -index 0000000..211519e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu12 -@@ -0,0 +1 @@ -+../../cpu/cpu12 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu13 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu13 -new file mode 120000 -index 0000000..52d3b69 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu13 -@@ -0,0 +1 @@ -+../../cpu/cpu13 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu14 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu14 -new file mode 120000 -index 0000000..24cb3b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu14 -@@ -0,0 +1 @@ -+../../cpu/cpu14 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu15 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu15 -new file mode 120000 -index 0000000..e905d85 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu15 -@@ -0,0 +1 @@ -+../../cpu/cpu15 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu16 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu16 -new file mode 120000 -index 0000000..445de40 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu16 -@@ -0,0 +1 @@ -+../../cpu/cpu16 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu17 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu17 -new file mode 120000 -index 0000000..13929db ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu17 -@@ -0,0 +1 @@ -+../../cpu/cpu17 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu18 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu18 -new file mode 120000 -index 0000000..3809adc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu18 -@@ -0,0 +1 @@ -+../../cpu/cpu18 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu19 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu19 -new file mode 120000 -index 0000000..c671083 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu19 -@@ -0,0 +1 @@ -+../../cpu/cpu19 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu2 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu2 -new file mode 120000 -index 0000000..2dcca33 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu2 -@@ -0,0 +1 @@ -+../../cpu/cpu2 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu20 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu20 -new file mode 120000 -index 0000000..a37c370 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu20 -@@ -0,0 +1 @@ -+../../cpu/cpu20 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu21 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu21 -new file mode 120000 -index 0000000..68a7cad ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu21 -@@ -0,0 +1 @@ -+../../cpu/cpu21 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu22 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu22 -new file mode 120000 -index 0000000..2c226ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu22 -@@ -0,0 +1 @@ -+../../cpu/cpu22 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu23 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu23 -new file mode 120000 -index 0000000..75c2f57 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu23 -@@ -0,0 +1 @@ -+../../cpu/cpu23 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu24 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu24 -new file mode 120000 -index 0000000..ad0a618 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu24 -@@ -0,0 +1 @@ -+../../cpu/cpu24 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu25 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu25 -new file mode 120000 -index 0000000..3145742 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu25 -@@ -0,0 +1 @@ -+../../cpu/cpu25 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu26 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu26 -new file mode 120000 -index 0000000..1dd180f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu26 -@@ -0,0 +1 @@ -+../../cpu/cpu26 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu27 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu27 -new file mode 120000 -index 0000000..74ced19 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu27 -@@ -0,0 +1 @@ -+../../cpu/cpu27 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu28 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu28 -new file mode 120000 -index 0000000..83269be ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu28 -@@ -0,0 +1 @@ -+../../cpu/cpu28 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu29 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu29 -new file mode 120000 -index 0000000..fa37dc6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu29 -@@ -0,0 +1 @@ -+../../cpu/cpu29 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu3 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu3 -new file mode 120000 -index 0000000..c7690e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu3 -@@ -0,0 +1 @@ -+../../cpu/cpu3 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu30 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu30 -new file mode 120000 -index 0000000..80226fa ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu30 -@@ -0,0 +1 @@ -+../../cpu/cpu30 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu31 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu31 -new file mode 120000 -index 0000000..6a9a569 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu31 -@@ -0,0 +1 @@ -+../../cpu/cpu31 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu32 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu32 -new file mode 120000 -index 0000000..bbca866 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu32 -@@ -0,0 +1 @@ -+../../cpu/cpu32 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu33 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu33 -new file mode 120000 -index 0000000..b7a9f8d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu33 -@@ -0,0 +1 @@ -+../../cpu/cpu33 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu34 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu34 -new file mode 120000 -index 0000000..0c0e738 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu34 -@@ -0,0 +1 @@ -+../../cpu/cpu34 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu35 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu35 -new file mode 120000 -index 0000000..47654d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu35 -@@ -0,0 +1 @@ -+../../cpu/cpu35 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu36 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu36 -new file mode 120000 -index 0000000..5e53f70 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu36 -@@ -0,0 +1 @@ -+../../cpu/cpu36 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu37 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu37 -new file mode 120000 -index 0000000..41b4ce7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu37 -@@ -0,0 +1 @@ -+../../cpu/cpu37 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu38 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu38 -new file mode 120000 -index 0000000..7231eb4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu38 -@@ -0,0 +1 @@ -+../../cpu/cpu38 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu39 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu39 -new file mode 120000 -index 0000000..d465480 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu39 -@@ -0,0 +1 @@ -+../../cpu/cpu39 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu4 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu4 -new file mode 120000 -index 0000000..9e77a64 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu4 -@@ -0,0 +1 @@ -+../../cpu/cpu4 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu5 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu5 -new file mode 120000 -index 0000000..cc07c3b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu5 -@@ -0,0 +1 @@ -+../../cpu/cpu5 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu6 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu6 -new file mode 120000 -index 0000000..2e75763 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu6 -@@ -0,0 +1 @@ -+../../cpu/cpu6 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu7 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu7 -new file mode 120000 -index 0000000..09e3f79 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu7 -@@ -0,0 +1 @@ -+../../cpu/cpu7 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu8 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu8 -new file mode 120000 -index 0000000..bda10cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu8 -@@ -0,0 +1 @@ -+../../cpu/cpu8 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/cpu9 b/tests/nodeinfodata/linux-subcores3/node/node0/cpu9 -new file mode 120000 -index 0000000..1ec1db2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/cpu9 -@@ -0,0 +1 @@ -+../../cpu/cpu9 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node0/meminfo b/tests/nodeinfodata/linux-subcores3/node/node0/meminfo -new file mode 100644 -index 0000000..bf719d2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node0/meminfo -@@ -0,0 +1,29 @@ -+Node 0 MemTotal: 67108864 kB -+Node 0 MemFree: 61482624 kB -+Node 0 MemUsed: 5626240 kB -+Node 0 Active: 298304 kB -+Node 0 Inactive: 314368 kB -+Node 0 Active(anon): 200192 kB -+Node 0 Inactive(anon): 9024 kB -+Node 0 Active(file): 98112 kB -+Node 0 Inactive(file): 305344 kB -+Node 0 Unevictable: 0 kB -+Node 0 Mlocked: 0 kB -+Node 0 Dirty: 145024 kB -+Node 0 Writeback: 0 kB -+Node 0 FilePages: 428480 kB -+Node 0 Mapped: 65408 kB -+Node 0 AnonPages: 186880 kB -+Node 0 Shmem: 22336 kB -+Node 0 KernelStack: 12336 kB -+Node 0 PageTables: 2496 kB -+Node 0 NFS_Unstable: 0 kB -+Node 0 Bounce: 0 kB -+Node 0 WritebackTmp: 0 kB -+Node 0 Slab: 237632 kB -+Node 0 SReclaimable: 46784 kB -+Node 0 SUnreclaim: 190848 kB -+Node 0 AnonHugePages: 0 kB -+Node 0 HugePages_Total: 0 -+Node 0 HugePages_Free: 0 -+Node 0 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu40 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu40 -new file mode 120000 -index 0000000..c727d46 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu40 -@@ -0,0 +1 @@ -+../../cpu/cpu40 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu41 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu41 -new file mode 120000 -index 0000000..cc0b78c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu41 -@@ -0,0 +1 @@ -+../../cpu/cpu41 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu42 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu42 -new file mode 120000 -index 0000000..8ebd18e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu42 -@@ -0,0 +1 @@ -+../../cpu/cpu42 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu43 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu43 -new file mode 120000 -index 0000000..03b2d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu43 -@@ -0,0 +1 @@ -+../../cpu/cpu43 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu44 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu44 -new file mode 120000 -index 0000000..859e4fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu44 -@@ -0,0 +1 @@ -+../../cpu/cpu44 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu45 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu45 -new file mode 120000 -index 0000000..58c3ca3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu45 -@@ -0,0 +1 @@ -+../../cpu/cpu45 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu46 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu46 -new file mode 120000 -index 0000000..55223e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu46 -@@ -0,0 +1 @@ -+../../cpu/cpu46 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu47 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu47 -new file mode 120000 -index 0000000..19407d4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu47 -@@ -0,0 +1 @@ -+../../cpu/cpu47 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu48 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu48 -new file mode 120000 -index 0000000..60a190c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu48 -@@ -0,0 +1 @@ -+../../cpu/cpu48 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu49 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu49 -new file mode 120000 -index 0000000..0ff1796 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu49 -@@ -0,0 +1 @@ -+../../cpu/cpu49 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu50 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu50 -new file mode 120000 -index 0000000..ddc5361 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu50 -@@ -0,0 +1 @@ -+../../cpu/cpu50 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu51 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu51 -new file mode 120000 -index 0000000..41163a9 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu51 -@@ -0,0 +1 @@ -+../../cpu/cpu51 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu52 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu52 -new file mode 120000 -index 0000000..be09dc8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu52 -@@ -0,0 +1 @@ -+../../cpu/cpu52 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu53 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu53 -new file mode 120000 -index 0000000..470ab22 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu53 -@@ -0,0 +1 @@ -+../../cpu/cpu53 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu54 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu54 -new file mode 120000 -index 0000000..5c11dfd ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu54 -@@ -0,0 +1 @@ -+../../cpu/cpu54 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu55 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu55 -new file mode 120000 -index 0000000..e858949 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu55 -@@ -0,0 +1 @@ -+../../cpu/cpu55 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu56 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu56 -new file mode 120000 -index 0000000..586050f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu56 -@@ -0,0 +1 @@ -+../../cpu/cpu56 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu57 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu57 -new file mode 120000 -index 0000000..4276ac5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu57 -@@ -0,0 +1 @@ -+../../cpu/cpu57 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu58 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu58 -new file mode 120000 -index 0000000..3c10d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu58 -@@ -0,0 +1 @@ -+../../cpu/cpu58 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu59 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu59 -new file mode 120000 -index 0000000..06ddb97 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu59 -@@ -0,0 +1 @@ -+../../cpu/cpu59 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu60 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu60 -new file mode 120000 -index 0000000..c062761 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu60 -@@ -0,0 +1 @@ -+../../cpu/cpu60 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu61 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu61 -new file mode 120000 -index 0000000..5a2c12f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu61 -@@ -0,0 +1 @@ -+../../cpu/cpu61 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu62 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu62 -new file mode 120000 -index 0000000..9056072 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu62 -@@ -0,0 +1 @@ -+../../cpu/cpu62 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu63 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu63 -new file mode 120000 -index 0000000..1511953 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu63 -@@ -0,0 +1 @@ -+../../cpu/cpu63 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu64 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu64 -new file mode 120000 -index 0000000..1664a2b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu64 -@@ -0,0 +1 @@ -+../../cpu/cpu64 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu65 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu65 -new file mode 120000 -index 0000000..52712cf ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu65 -@@ -0,0 +1 @@ -+../../cpu/cpu65 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu66 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu66 -new file mode 120000 -index 0000000..93a4f32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu66 -@@ -0,0 +1 @@ -+../../cpu/cpu66 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu67 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu67 -new file mode 120000 -index 0000000..db73e74 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu67 -@@ -0,0 +1 @@ -+../../cpu/cpu67 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu68 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu68 -new file mode 120000 -index 0000000..4f40eb8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu68 -@@ -0,0 +1 @@ -+../../cpu/cpu68 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu69 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu69 -new file mode 120000 -index 0000000..9f32d96 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu69 -@@ -0,0 +1 @@ -+../../cpu/cpu69 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu70 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu70 -new file mode 120000 -index 0000000..a0e8fd2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu70 -@@ -0,0 +1 @@ -+../../cpu/cpu70 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu71 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu71 -new file mode 120000 -index 0000000..898c9f2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu71 -@@ -0,0 +1 @@ -+../../cpu/cpu71 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu72 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu72 -new file mode 120000 -index 0000000..d731cf5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu72 -@@ -0,0 +1 @@ -+../../cpu/cpu72 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu73 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu73 -new file mode 120000 -index 0000000..99f1a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu73 -@@ -0,0 +1 @@ -+../../cpu/cpu73 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu74 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu74 -new file mode 120000 -index 0000000..84a3139 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu74 -@@ -0,0 +1 @@ -+../../cpu/cpu74 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu75 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu75 -new file mode 120000 -index 0000000..0693a99 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu75 -@@ -0,0 +1 @@ -+../../cpu/cpu75 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu76 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu76 -new file mode 120000 -index 0000000..5ff7021 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu76 -@@ -0,0 +1 @@ -+../../cpu/cpu76 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu77 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu77 -new file mode 120000 -index 0000000..05099c6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu77 -@@ -0,0 +1 @@ -+../../cpu/cpu77 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu78 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu78 -new file mode 120000 -index 0000000..20eb9cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu78 -@@ -0,0 +1 @@ -+../../cpu/cpu78 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/cpu79 b/tests/nodeinfodata/linux-subcores3/node/node1/cpu79 -new file mode 120000 -index 0000000..4813a63 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/cpu79 -@@ -0,0 +1 @@ -+../../cpu/cpu79 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node1/meminfo b/tests/nodeinfodata/linux-subcores3/node/node1/meminfo -new file mode 100644 -index 0000000..de2002f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node1/meminfo -@@ -0,0 +1,29 @@ -+Node 1 MemTotal: 67108864 kB -+Node 1 MemFree: 66551040 kB -+Node 1 MemUsed: 557824 kB -+Node 1 Active: 33152 kB -+Node 1 Inactive: 6080 kB -+Node 1 Active(anon): 30400 kB -+Node 1 Inactive(anon): 192 kB -+Node 1 Active(file): 2752 kB -+Node 1 Inactive(file): 5888 kB -+Node 1 Unevictable: 0 kB -+Node 1 Mlocked: 0 kB -+Node 1 Dirty: 0 kB -+Node 1 Writeback: 0 kB -+Node 1 FilePages: 9472 kB -+Node 1 Mapped: 5120 kB -+Node 1 AnonPages: 30144 kB -+Node 1 Shmem: 832 kB -+Node 1 KernelStack: 5584 kB -+Node 1 PageTables: 192 kB -+Node 1 NFS_Unstable: 0 kB -+Node 1 Bounce: 0 kB -+Node 1 WritebackTmp: 0 kB -+Node 1 Slab: 58304 kB -+Node 1 SReclaimable: 5952 kB -+Node 1 SUnreclaim: 52352 kB -+Node 1 AnonHugePages: 0 kB -+Node 1 HugePages_Total: 0 -+Node 1 HugePages_Free: 0 -+Node 1 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu100 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu100 -new file mode 120000 -index 0000000..ffb1446 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu100 -@@ -0,0 +1 @@ -+../../cpu/cpu100 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu101 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu101 -new file mode 120000 -index 0000000..2b399e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu101 -@@ -0,0 +1 @@ -+../../cpu/cpu101 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu102 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu102 -new file mode 120000 -index 0000000..f06eb7d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu102 -@@ -0,0 +1 @@ -+../../cpu/cpu102 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu103 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu103 -new file mode 120000 -index 0000000..722b506 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu103 -@@ -0,0 +1 @@ -+../../cpu/cpu103 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu104 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu104 -new file mode 120000 -index 0000000..7692606 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu104 -@@ -0,0 +1 @@ -+../../cpu/cpu104 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu105 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu105 -new file mode 120000 -index 0000000..77d25d5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu105 -@@ -0,0 +1 @@ -+../../cpu/cpu105 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu106 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu106 -new file mode 120000 -index 0000000..f8bff26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu106 -@@ -0,0 +1 @@ -+../../cpu/cpu106 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu107 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu107 -new file mode 120000 -index 0000000..d475c15 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu107 -@@ -0,0 +1 @@ -+../../cpu/cpu107 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu108 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu108 -new file mode 120000 -index 0000000..4352ab8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu108 -@@ -0,0 +1 @@ -+../../cpu/cpu108 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu109 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu109 -new file mode 120000 -index 0000000..c74e8ec ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu109 -@@ -0,0 +1 @@ -+../../cpu/cpu109 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu110 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu110 -new file mode 120000 -index 0000000..fb66aa1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu110 -@@ -0,0 +1 @@ -+../../cpu/cpu110 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu111 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu111 -new file mode 120000 -index 0000000..b2da00c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu111 -@@ -0,0 +1 @@ -+../../cpu/cpu111 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu112 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu112 -new file mode 120000 -index 0000000..e65062a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu112 -@@ -0,0 +1 @@ -+../../cpu/cpu112 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu113 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu113 -new file mode 120000 -index 0000000..f8380bf ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu113 -@@ -0,0 +1 @@ -+../../cpu/cpu113 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu114 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu114 -new file mode 120000 -index 0000000..4c33e35 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu114 -@@ -0,0 +1 @@ -+../../cpu/cpu114 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu115 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu115 -new file mode 120000 -index 0000000..2b4fbce ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu115 -@@ -0,0 +1 @@ -+../../cpu/cpu115 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu116 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu116 -new file mode 120000 -index 0000000..7e07a2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu116 -@@ -0,0 +1 @@ -+../../cpu/cpu116 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu117 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu117 -new file mode 120000 -index 0000000..2d65930 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu117 -@@ -0,0 +1 @@ -+../../cpu/cpu117 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu118 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu118 -new file mode 120000 -index 0000000..b09093c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu118 -@@ -0,0 +1 @@ -+../../cpu/cpu118 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu119 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu119 -new file mode 120000 -index 0000000..59a5bf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu119 -@@ -0,0 +1 @@ -+../../cpu/cpu119 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu80 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu80 -new file mode 120000 -index 0000000..ce5ed81 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu80 -@@ -0,0 +1 @@ -+../../cpu/cpu80 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu81 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu81 -new file mode 120000 -index 0000000..dcd9a05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu81 -@@ -0,0 +1 @@ -+../../cpu/cpu81 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu82 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu82 -new file mode 120000 -index 0000000..c91ce01 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu82 -@@ -0,0 +1 @@ -+../../cpu/cpu82 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu83 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu83 -new file mode 120000 -index 0000000..22ba3c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu83 -@@ -0,0 +1 @@ -+../../cpu/cpu83 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu84 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu84 -new file mode 120000 -index 0000000..c7e4d26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu84 -@@ -0,0 +1 @@ -+../../cpu/cpu84 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu85 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu85 -new file mode 120000 -index 0000000..6779d27 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu85 -@@ -0,0 +1 @@ -+../../cpu/cpu85 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu86 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu86 -new file mode 120000 -index 0000000..9e777be ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu86 -@@ -0,0 +1 @@ -+../../cpu/cpu86 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu87 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu87 -new file mode 120000 -index 0000000..0359c58 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu87 -@@ -0,0 +1 @@ -+../../cpu/cpu87 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu88 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu88 -new file mode 120000 -index 0000000..3825c50 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu88 -@@ -0,0 +1 @@ -+../../cpu/cpu88 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu89 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu89 -new file mode 120000 -index 0000000..9a72211 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu89 -@@ -0,0 +1 @@ -+../../cpu/cpu89 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu90 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu90 -new file mode 120000 -index 0000000..75d10b3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu90 -@@ -0,0 +1 @@ -+../../cpu/cpu90 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu91 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu91 -new file mode 120000 -index 0000000..8e9e4a4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu91 -@@ -0,0 +1 @@ -+../../cpu/cpu91 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu92 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu92 -new file mode 120000 -index 0000000..f8d5f05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu92 -@@ -0,0 +1 @@ -+../../cpu/cpu92 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu93 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu93 -new file mode 120000 -index 0000000..5a302ad ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu93 -@@ -0,0 +1 @@ -+../../cpu/cpu93 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu94 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu94 -new file mode 120000 -index 0000000..9e6239f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu94 -@@ -0,0 +1 @@ -+../../cpu/cpu94 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu95 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu95 -new file mode 120000 -index 0000000..d87b5e3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu95 -@@ -0,0 +1 @@ -+../../cpu/cpu95 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu96 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu96 -new file mode 120000 -index 0000000..50d1edc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu96 -@@ -0,0 +1 @@ -+../../cpu/cpu96 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu97 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu97 -new file mode 120000 -index 0000000..38b5a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu97 -@@ -0,0 +1 @@ -+../../cpu/cpu97 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu98 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu98 -new file mode 120000 -index 0000000..df97c6c ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu98 -@@ -0,0 +1 @@ -+../../cpu/cpu98 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/cpu99 b/tests/nodeinfodata/linux-subcores3/node/node16/cpu99 -new file mode 120000 -index 0000000..a3a6164 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/cpu99 -@@ -0,0 +1 @@ -+../../cpu/cpu99 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node16/meminfo b/tests/nodeinfodata/linux-subcores3/node/node16/meminfo -new file mode 100644 -index 0000000..4291c32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node16/meminfo -@@ -0,0 +1,29 @@ -+Node 16 MemTotal: 67108864 kB -+Node 16 MemFree: 66472768 kB -+Node 16 MemUsed: 636096 kB -+Node 16 Active: 16320 kB -+Node 16 Inactive: 65600 kB -+Node 16 Active(anon): 8128 kB -+Node 16 Inactive(anon): 64 kB -+Node 16 Active(file): 8192 kB -+Node 16 Inactive(file): 65536 kB -+Node 16 Unevictable: 0 kB -+Node 16 Mlocked: 0 kB -+Node 16 Dirty: 0 kB -+Node 16 Writeback: 0 kB -+Node 16 FilePages: 73792 kB -+Node 16 Mapped: 4672 kB -+Node 16 AnonPages: 8064 kB -+Node 16 Shmem: 128 kB -+Node 16 KernelStack: 5136 kB -+Node 16 PageTables: 64 kB -+Node 16 NFS_Unstable: 0 kB -+Node 16 Bounce: 0 kB -+Node 16 WritebackTmp: 0 kB -+Node 16 Slab: 81408 kB -+Node 16 SReclaimable: 9600 kB -+Node 16 SUnreclaim: 71808 kB -+Node 16 AnonHugePages: 0 kB -+Node 16 HugePages_Total: 0 -+Node 16 HugePages_Free: 0 -+Node 16 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu120 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu120 -new file mode 120000 -index 0000000..17a18b1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu120 -@@ -0,0 +1 @@ -+../../cpu/cpu120 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu121 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu121 -new file mode 120000 -index 0000000..321bbc2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu121 -@@ -0,0 +1 @@ -+../../cpu/cpu121 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu122 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu122 -new file mode 120000 -index 0000000..e03f5a3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu122 -@@ -0,0 +1 @@ -+../../cpu/cpu122 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu123 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu123 -new file mode 120000 -index 0000000..3021e4f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu123 -@@ -0,0 +1 @@ -+../../cpu/cpu123 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu124 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu124 -new file mode 120000 -index 0000000..10b32dc ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu124 -@@ -0,0 +1 @@ -+../../cpu/cpu124 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu125 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu125 -new file mode 120000 -index 0000000..9e06e6e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu125 -@@ -0,0 +1 @@ -+../../cpu/cpu125 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu126 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu126 -new file mode 120000 -index 0000000..2a4708a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu126 -@@ -0,0 +1 @@ -+../../cpu/cpu126 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu127 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu127 -new file mode 120000 -index 0000000..96b5143 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu127 -@@ -0,0 +1 @@ -+../../cpu/cpu127 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu128 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu128 -new file mode 120000 -index 0000000..3142217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu128 -@@ -0,0 +1 @@ -+../../cpu/cpu128 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu129 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu129 -new file mode 120000 -index 0000000..dc84401 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu129 -@@ -0,0 +1 @@ -+../../cpu/cpu129 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu130 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu130 -new file mode 120000 -index 0000000..59a50b8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu130 -@@ -0,0 +1 @@ -+../../cpu/cpu130 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu131 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu131 -new file mode 120000 -index 0000000..ca1f958 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu131 -@@ -0,0 +1 @@ -+../../cpu/cpu131 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu132 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu132 -new file mode 120000 -index 0000000..a1f7ea1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu132 -@@ -0,0 +1 @@ -+../../cpu/cpu132 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu133 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu133 -new file mode 120000 -index 0000000..89e453b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu133 -@@ -0,0 +1 @@ -+../../cpu/cpu133 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu134 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu134 -new file mode 120000 -index 0000000..a46c33e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu134 -@@ -0,0 +1 @@ -+../../cpu/cpu134 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu135 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu135 -new file mode 120000 -index 0000000..4efd76f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu135 -@@ -0,0 +1 @@ -+../../cpu/cpu135 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu136 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu136 -new file mode 120000 -index 0000000..cfd61b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu136 -@@ -0,0 +1 @@ -+../../cpu/cpu136 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu137 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu137 -new file mode 120000 -index 0000000..6a1ec92 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu137 -@@ -0,0 +1 @@ -+../../cpu/cpu137 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu138 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu138 -new file mode 120000 -index 0000000..890aad3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu138 -@@ -0,0 +1 @@ -+../../cpu/cpu138 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu139 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu139 -new file mode 120000 -index 0000000..afb925f ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu139 -@@ -0,0 +1 @@ -+../../cpu/cpu139 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu140 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu140 -new file mode 120000 -index 0000000..2faf4c0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu140 -@@ -0,0 +1 @@ -+../../cpu/cpu140 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu141 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu141 -new file mode 120000 -index 0000000..6cf8cf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu141 -@@ -0,0 +1 @@ -+../../cpu/cpu141 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu142 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu142 -new file mode 120000 -index 0000000..fa73d61 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu142 -@@ -0,0 +1 @@ -+../../cpu/cpu142 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu143 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu143 -new file mode 120000 -index 0000000..04dcaa4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu143 -@@ -0,0 +1 @@ -+../../cpu/cpu143 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu144 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu144 -new file mode 120000 -index 0000000..ccecb10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu144 -@@ -0,0 +1 @@ -+../../cpu/cpu144 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu145 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu145 -new file mode 120000 -index 0000000..00def86 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu145 -@@ -0,0 +1 @@ -+../../cpu/cpu145 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu146 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu146 -new file mode 120000 -index 0000000..6a13966 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu146 -@@ -0,0 +1 @@ -+../../cpu/cpu146 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu147 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu147 -new file mode 120000 -index 0000000..143c5a7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu147 -@@ -0,0 +1 @@ -+../../cpu/cpu147 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu148 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu148 -new file mode 120000 -index 0000000..21bae94 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu148 -@@ -0,0 +1 @@ -+../../cpu/cpu148 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu149 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu149 -new file mode 120000 -index 0000000..fdb0f17 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu149 -@@ -0,0 +1 @@ -+../../cpu/cpu149 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu150 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu150 -new file mode 120000 -index 0000000..da363e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu150 -@@ -0,0 +1 @@ -+../../cpu/cpu150 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu151 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu151 -new file mode 120000 -index 0000000..069de6b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu151 -@@ -0,0 +1 @@ -+../../cpu/cpu151 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu152 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu152 -new file mode 120000 -index 0000000..0fb022e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu152 -@@ -0,0 +1 @@ -+../../cpu/cpu152 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu153 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu153 -new file mode 120000 -index 0000000..d7e0f9e ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu153 -@@ -0,0 +1 @@ -+../../cpu/cpu153 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu154 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu154 -new file mode 120000 -index 0000000..0a6117a ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu154 -@@ -0,0 +1 @@ -+../../cpu/cpu154 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu155 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu155 -new file mode 120000 -index 0000000..201f0f5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu155 -@@ -0,0 +1 @@ -+../../cpu/cpu155 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu156 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu156 -new file mode 120000 -index 0000000..da7f12b ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu156 -@@ -0,0 +1 @@ -+../../cpu/cpu156 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu157 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu157 -new file mode 120000 -index 0000000..c2aa5c2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu157 -@@ -0,0 +1 @@ -+../../cpu/cpu157 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu158 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu158 -new file mode 120000 -index 0000000..4376692 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu158 -@@ -0,0 +1 @@ -+../../cpu/cpu158 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/cpu159 b/tests/nodeinfodata/linux-subcores3/node/node17/cpu159 -new file mode 120000 -index 0000000..852a0c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/cpu159 -@@ -0,0 +1 @@ -+../../cpu/cpu159 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-subcores3/node/node17/meminfo b/tests/nodeinfodata/linux-subcores3/node/node17/meminfo -new file mode 100644 -index 0000000..3925a60 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/node17/meminfo -@@ -0,0 +1,29 @@ -+Node 17 MemTotal: 67108864 kB -+Node 17 MemFree: 66329280 kB -+Node 17 MemUsed: 779584 kB -+Node 17 Active: 5568 kB -+Node 17 Inactive: 2688 kB -+Node 17 Active(anon): 4800 kB -+Node 17 Inactive(anon): 256 kB -+Node 17 Active(file): 768 kB -+Node 17 Inactive(file): 2432 kB -+Node 17 Unevictable: 0 kB -+Node 17 Mlocked: 0 kB -+Node 17 Dirty: 0 kB -+Node 17 Writeback: 0 kB -+Node 17 FilePages: 3584 kB -+Node 17 Mapped: 192 kB -+Node 17 AnonPages: 4672 kB -+Node 17 Shmem: 384 kB -+Node 17 KernelStack: 5536 kB -+Node 17 PageTables: 128 kB -+Node 17 NFS_Unstable: 0 kB -+Node 17 Bounce: 0 kB -+Node 17 WritebackTmp: 0 kB -+Node 17 Slab: 41472 kB -+Node 17 SReclaimable: 2496 kB -+Node 17 SUnreclaim: 38976 kB -+Node 17 AnonHugePages: 0 kB -+Node 17 HugePages_Total: 0 -+Node 17 HugePages_Free: 0 -+Node 17 HugePages_Surp: 0 -diff --git a/tests/nodeinfodata/linux-subcores3/node/online b/tests/nodeinfodata/linux-subcores3/node/online -new file mode 100644 -index 0000000..a41eb32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/online -@@ -0,0 +1 @@ -+0-1,16-17 -diff --git a/tests/nodeinfodata/linux-subcores3/node/possible b/tests/nodeinfodata/linux-subcores3/node/possible -new file mode 100644 -index 0000000..8d232c7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-subcores3/node/possible -@@ -0,0 +1 @@ -+0-255 -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index 127eb3b..d8eace5 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -239,6 +239,8 @@ mymain(void) - {"subcores1", VIR_ARCH_PPC64}, - /* subcores, some of the cores are offline */ - {"subcores2", VIR_ARCH_PPC64}, -+ /* subcores, invalid configuration */ -+ {"subcores3", VIR_ARCH_PPC64}, - }; - - if (virInitialize() < 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Add-test-infrastructure-for-qemuMonitorGetCPUInfo.patch b/SOURCES/libvirt-tests-Add-test-infrastructure-for-qemuMonitorGetCPUInfo.patch new file mode 100644 index 0000000..89ae0db --- /dev/null +++ b/SOURCES/libvirt-tests-Add-test-infrastructure-for-qemuMonitorGetCPUInfo.patch @@ -0,0 +1,375 @@ +From 684d63adc58a29183d7ff4161b3ed93f09896375 Mon Sep 17 00:00:00 2001 +Message-Id: <684d63adc58a29183d7ff4161b3ed93f09896375@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:25 -0400 +Subject: [PATCH] tests: Add test infrastructure for qemuMonitorGetCPUInfo + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +As the combination algorithm is rather complex and ugly it's necessary +to make sure it works properly. Add test suite infrastructure for +testing it along with a basic test based on x86_64 platform. + +(cherry picked from commit f8638471d7f203a654e3b157dfd042a2239e2cb0) +--- + ...nitorjson-cpuinfo-x86-basic-pluggable-cpus.json | 50 ++++++++ + ...orjson-cpuinfo-x86-basic-pluggable-hotplug.json | 82 +++++++++++++ + ...emumonitorjson-cpuinfo-x86-basic-pluggable.data | 39 ++++++ + tests/qemumonitorjsontest.c | 134 +++++++++++++++++++++ + 4 files changed, 305 insertions(+) + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data + +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-cpus.json +new file mode 100644 +index 0000000..7a49731 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-cpus.json +@@ -0,0 +1,50 @@ ++{ ++ "return": [ ++ { ++ "arch": "x86", ++ "current": true, ++ "CPU": 0, ++ "qom_path": "/machine/unattached/device[0]", ++ "pc": -2130415978, ++ "halted": true, ++ "thread_id": 518291 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 1, ++ "qom_path": "/machine/unattached/device[2]", ++ "pc": -2130415978, ++ "halted": true, ++ "thread_id": 518292 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 2, ++ "qom_path": "/machine/unattached/device[3]", ++ "pc": -2130415978, ++ "halted": true, ++ "thread_id": 518294 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 3, ++ "qom_path": "/machine/unattached/device[4]", ++ "pc": -2130415978, ++ "halted": true, ++ "thread_id": 518295 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 4, ++ "qom_path": "/machine/unattached/device[5]", ++ "pc": -2130415978, ++ "halted": true, ++ "thread_id": 518296 ++ } ++ ], ++ "id": "libvirt-22" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-hotplug.json +new file mode 100644 +index 0000000..3f35018 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable-hotplug.json +@@ -0,0 +1,82 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 1, ++ "thread-id": 1, ++ "socket-id": 1 ++ }, ++ "vcpus-count": 1, ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 1, ++ "thread-id": 0, ++ "socket-id": 1 ++ }, ++ "vcpus-count": 1, ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 1, ++ "socket-id": 1 ++ }, ++ "vcpus-count": 1, ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 1 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[5]", ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 1, ++ "thread-id": 1, ++ "socket-id": 0 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[4]", ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 1, ++ "thread-id": 0, ++ "socket-id": 0 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[3]", ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 1, ++ "socket-id": 0 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[2]", ++ "type": "qemu64-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 0 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[0]", ++ "type": "qemu64-x86_64-cpu" ++ } ++ ], ++ "id": "libvirt-23" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data +new file mode 100644 +index 0000000..a367a09 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-basic-pluggable.data +@@ -0,0 +1,39 @@ ++[vcpu libvirt-id='0'] ++ thread-id='518291' ++ qemu-id='1' ++ type='qemu64-x86_64-cpu' ++ qom_path='/machine/unattached/device[0]' ++ topology: socket='0' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='1'] ++ thread-id='518292' ++ qemu-id='2' ++ type='qemu64-x86_64-cpu' ++ qom_path='/machine/unattached/device[2]' ++ topology: socket='0' core='0' thread='1' vcpus='1' ++[vcpu libvirt-id='2'] ++ thread-id='518294' ++ qemu-id='3' ++ type='qemu64-x86_64-cpu' ++ qom_path='/machine/unattached/device[3]' ++ topology: socket='0' core='1' thread='0' vcpus='1' ++[vcpu libvirt-id='3'] ++ thread-id='518295' ++ qemu-id='4' ++ type='qemu64-x86_64-cpu' ++ qom_path='/machine/unattached/device[4]' ++ topology: socket='0' core='1' thread='1' vcpus='1' ++[vcpu libvirt-id='4'] ++ thread-id='518296' ++ qemu-id='5' ++ type='qemu64-x86_64-cpu' ++ qom_path='/machine/unattached/device[5]' ++ topology: socket='1' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='5'] ++ type='qemu64-x86_64-cpu' ++ topology: socket='1' core='0' thread='1' vcpus='1' ++[vcpu libvirt-id='6'] ++ type='qemu64-x86_64-cpu' ++ topology: socket='1' core='1' thread='0' vcpus='1' ++[vcpu libvirt-id='7'] ++ type='qemu64-x86_64-cpu' ++ topology: socket='1' core='1' thread='1' vcpus='1' +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 8c31005..22b4ccc 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -2336,6 +2336,130 @@ testQemuMonitorJSONGetIOThreads(const void *data) + return ret; + } + ++struct testCPUInfoData { ++ const char *name; ++ size_t maxvcpus; ++ virDomainXMLOptionPtr xmlopt; ++}; ++ ++ ++static char * ++testQemuMonitorCPUInfoFormat(qemuMonitorCPUInfoPtr vcpus, ++ size_t nvcpus) ++{ ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ qemuMonitorCPUInfoPtr vcpu; ++ size_t i; ++ ++ for (i = 0; i < nvcpus; i++) { ++ vcpu = vcpus + i; ++ ++ virBufferAsprintf(&buf, "[vcpu libvirt-id='%zu']\n", i); ++ virBufferAdjustIndent(&buf, 4); ++ ++ if (vcpu->tid) ++ virBufferAsprintf(&buf, "thread-id='%llu'\n", ++ (unsigned long long) vcpu->tid); ++ ++ if (vcpu->id != 0) ++ virBufferAsprintf(&buf, "qemu-id='%d'\n", vcpu->id); ++ ++ if (vcpu->type) ++ virBufferAsprintf(&buf, "type='%s'\n", vcpu->type); ++ ++ if (vcpu->alias) ++ virBufferAsprintf(&buf, "alias='%s'\n", vcpu->alias); ++ if (vcpu->qom_path) ++ virBufferAsprintf(&buf, "qom_path='%s'\n", vcpu->qom_path); ++ ++ if (vcpu->socket_id != -1 || vcpu->core_id != -1 || ++ vcpu->thread_id != -1 || vcpu->vcpus != 0) { ++ virBufferAddLit(&buf, "topology:"); ++ if (vcpu->socket_id != -1) ++ virBufferAsprintf(&buf, " socket='%d'", vcpu->socket_id); ++ if (vcpu->core_id != -1) ++ virBufferAsprintf(&buf, " core='%d'", vcpu->core_id); ++ if (vcpu->thread_id != -1) ++ virBufferAsprintf(&buf, " thread='%d'", vcpu->thread_id); ++ if (vcpu->vcpus != 0) ++ virBufferAsprintf(&buf, " vcpus='%u'", vcpu->vcpus); ++ virBufferAddLit(&buf, "\n"); ++ } ++ ++ virBufferAdjustIndent(&buf, -4); ++ } ++ ++ return virBufferContentAndReset(&buf); ++} ++ ++ ++static int ++testQemuMonitorCPUInfo(const void *opaque) ++{ ++ const struct testCPUInfoData *data = opaque; ++ qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, data->xmlopt); ++ char *queryCpusFile = NULL; ++ char *queryHotpluggableFile = NULL; ++ char *dataFile = NULL; ++ char *queryCpusStr = NULL; ++ char *queryHotpluggableStr = NULL; ++ char *actual = NULL; ++ qemuMonitorCPUInfoPtr vcpus = NULL; ++ int rc; ++ int ret = -1; ++ ++ if (!test) ++ return -1; ++ ++ if (virAsprintf(&queryCpusFile, ++ "%s/qemumonitorjsondata/qemumonitorjson-cpuinfo-%s-cpus.json", ++ abs_srcdir, data->name) < 0 || ++ virAsprintf(&queryHotpluggableFile, ++ "%s/qemumonitorjsondata/qemumonitorjson-cpuinfo-%s-hotplug.json", ++ abs_srcdir, data->name) < 0 || ++ virAsprintf(&dataFile, ++ "%s/qemumonitorjsondata/qemumonitorjson-cpuinfo-%s.data", ++ abs_srcdir, data->name) < 0) ++ goto cleanup; ++ ++ if (virTestLoadFile(queryCpusFile, &queryCpusStr) < 0) ++ goto cleanup; ++ ++ if (virTestLoadFile(queryHotpluggableFile, &queryHotpluggableStr) < 0) ++ goto cleanup; ++ ++ if (qemuMonitorTestAddItem(test, "query-hotpluggable-cpus", ++ queryHotpluggableStr) < 0) ++ goto cleanup; ++ ++ if (qemuMonitorTestAddItem(test, "query-cpus", queryCpusStr) < 0) ++ goto cleanup; ++ ++ rc = qemuMonitorGetCPUInfo(qemuMonitorTestGetMonitor(test), ++ &vcpus, data->maxvcpus, true); ++ ++ if (rc < 0) ++ goto cleanup; ++ ++ actual = testQemuMonitorCPUInfoFormat(vcpus, data->maxvcpus); ++ ++ if (virTestCompareToFile(actual, dataFile) < 0) ++ goto cleanup; ++ ++ ret = 0; ++ cleanup: ++ VIR_FREE(queryCpusFile); ++ VIR_FREE(queryHotpluggableFile); ++ VIR_FREE(dataFile); ++ VIR_FREE(queryCpusStr); ++ VIR_FREE(queryHotpluggableStr); ++ VIR_FREE(actual); ++ qemuMonitorCPUInfoFree(vcpus, data->maxvcpus); ++ qemuMonitorTestFree(test); ++ return ret; ++} ++ ++ + static int + mymain(void) + { +@@ -2378,6 +2502,14 @@ mymain(void) + ret = -1; \ + } while (0) + ++#define DO_TEST_CPU_INFO(name, maxvcpus) \ ++ do { \ ++ struct testCPUInfoData data = {name, maxvcpus, driver.xmlopt}; \ ++ if (virTestRun("GetCPUInfo(" name ")", testQemuMonitorCPUInfo, \ ++ &data) < 0) \ ++ ret = -1; \ ++ } while (0) ++ + DO_TEST(GetStatus); + DO_TEST(GetVersion); + DO_TEST(GetMachines); +@@ -2452,6 +2584,8 @@ mymain(void) + DO_TEST_CPU_DATA("full"); + DO_TEST_CPU_DATA("ecx"); + ++ DO_TEST_CPU_INFO("x86-basic-pluggable", 8); ++ + qemuTestDriverFree(&driver); + + return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +-- +2.10.0 + diff --git a/SOURCES/libvirt-tests-Add-testing-of-backing-store-string-parser.patch b/SOURCES/libvirt-tests-Add-testing-of-backing-store-string-parser.patch new file mode 100644 index 0000000..4ca8c5e --- /dev/null +++ b/SOURCES/libvirt-tests-Add-testing-of-backing-store-string-parser.patch @@ -0,0 +1,170 @@ +From e8f0d99c49eb518883235661fc3d9e14f65fc6fe Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:40 +0200 +Subject: [PATCH] tests: Add testing of backing store string parser + +As we already test that the extraction of the backing store string works +well additional tests for the backing store string parser can be made +simpler. + +Export virStorageSourceNewFromBackingAbsolute and use it to parse the +backing store strings, format them using virDomainDiskSourceFormat and +match them against expected XMLs. + +(cherry picked from commit 4e3dbfa2a5f049987d74bdf35f86226f739fcda6) + +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/libvirt_private.syms | 1 + + src/util/virstoragefile.c | 2 +- + src/util/virstoragefile.h | 3 ++ + tests/virstoragetest.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 85 insertions(+), 1 deletion(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index f73cfa2..3e4b2e7 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2353,6 +2353,7 @@ virStorageSourceIsBlockLocal; + virStorageSourceIsEmpty; + virStorageSourceIsLocalStorage; + virStorageSourceNewFromBacking; ++virStorageSourceNewFromBackingAbsolute; + virStorageSourceParseRBDColonString; + virStorageSourcePoolDefFree; + virStorageSourcePoolModeTypeFromString; +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 7dace8a..aa5f302 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2523,7 +2523,7 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src, + } + + +-static virStorageSourcePtr ++virStorageSourcePtr + virStorageSourceNewFromBackingAbsolute(const char *path) + { + virStorageSourcePtr ret; +diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h +index 78beaf4..1a76fad 100644 +--- a/src/util/virstoragefile.h ++++ b/src/util/virstoragefile.h +@@ -380,4 +380,7 @@ int virStorageFileGetRelativeBackingPath(virStorageSourcePtr from, + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); + + int virStorageFileCheckCompat(const char *compat); ++ ++virStorageSourcePtr virStorageSourceNewFromBackingAbsolute(const char *path); ++ + #endif /* __VIR_STORAGE_FILE_H__ */ +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 580065e..6016a3b 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -665,6 +665,58 @@ testPathRelative(const void *args) + } + + ++struct testBackingParseData { ++ const char *backing; ++ const char *expect; ++}; ++ ++static int ++testBackingParse(const void *args) ++{ ++ const struct testBackingParseData *data = args; ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ virStorageSourcePtr src = NULL; ++ char *xml = NULL; ++ int ret = -1; ++ ++ if (!(src = virStorageSourceNewFromBackingAbsolute(data->backing))) { ++ if (!data->expect) ++ ret = 0; ++ ++ goto cleanup; ++ } ++ ++ if (src && !data->expect) { ++ fprintf(stderr, "parsing of backing store string '%s' should " ++ "have failed\n", data->backing); ++ goto cleanup; ++ } ++ ++ if (virDomainDiskSourceFormat(&buf, src, 0, 0) < 0 || ++ !(xml = virBufferContentAndReset(&buf))) { ++ fprintf(stderr, "failed to format disk source xml\n"); ++ goto cleanup; ++ } ++ ++ if (!STREQ(xml, data->expect)) { ++ fprintf(stderr, "\n backing store string '%s'\n" ++ "expected storage source xml:\n%s\n" ++ "actual storage source xml:\n%s\n", ++ data->backing, data->expect, xml); ++ goto cleanup; ++ } ++ ++ ret = 0; ++ ++ cleanup: ++ virStorageSourceFree(src); ++ virBufferFreeAndReset(&buf); ++ VIR_FREE(xml); ++ ++ return ret; ++} ++ ++ + static int + mymain(void) + { +@@ -674,6 +726,7 @@ mymain(void) + struct testLookupData data2; + struct testPathCanonicalizeData data3; + struct testPathRelativeBacking data4; ++ struct testBackingParseData data5; + virStorageSourcePtr chain = NULL; + virStorageSourcePtr chain2; /* short for chain->backingStore */ + virStorageSourcePtr chain3; /* short for chain2->backingStore */ +@@ -1276,6 +1329,33 @@ mymain(void) + TEST_RELATIVE_BACKING(21, backingchain[10], backingchain[11], "../../../../blah/image4"); + TEST_RELATIVE_BACKING(22, backingchain[11], backingchain[11], "../blah/image4"); + ++ ++ virTestCounterReset("Backing store parse "); ++ ++#define TEST_BACKING_PARSE(bck, xml) \ ++ do { \ ++ data5.backing = bck; \ ++ data5.expect = xml; \ ++ if (virTestRun(virTestCounterNext(), \ ++ testBackingParse, &data5) < 0) \ ++ ret = -1; \ ++ } while (0) ++ ++ TEST_BACKING_PARSE("path", "\n"); ++ TEST_BACKING_PARSE("://", NULL); ++ TEST_BACKING_PARSE("http://example.com/file", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("rbd:testshare:id=asdf:mon_host=example.com", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("nbd:example.org:6000:exportname=blah", ++ "\n" ++ " \n" ++ "\n"); ++ + cleanup: + /* Final cleanup */ + virStorageSourceFree(chain); +-- +2.9.2 + diff --git a/SOURCES/libvirt-tests-Adjust-LUKS-tests-to-use-volume-secret-type.patch b/SOURCES/libvirt-tests-Adjust-LUKS-tests-to-use-volume-secret-type.patch new file mode 100644 index 0000000..2d45425 --- /dev/null +++ b/SOURCES/libvirt-tests-Adjust-LUKS-tests-to-use-volume-secret-type.patch @@ -0,0 +1,171 @@ +From d1ed6d27dd73a300b94237f4664fb27bd978dbbd Mon Sep 17 00:00:00 2001 +Message-Id: +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:51 -0400 +Subject: [PATCH] tests: Adjust LUKS tests to use 'volume' secret type + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Commit id's '9bbf0d7e6' and '2552fec24' added some XML parsing tests +for a LUKS volume to use a 'passphrase' secret format. After commit, +this was deemed to be incorrect, so covert the various tests to use +the volume usage format where the 'usage' is the path to the volume +rather than a user defined name string. + +Also, removed the qemuxml2argv-luks-disk-cipher.xml since it was +just a duplicate of qemuxml2argv-luks-disks.xml. + +Signed-off-by: John Ferlan +(cherry picked from commit a8d0afc75a0a5c902f1e4188a616651a17a9d050) +--- + .../qemuxml2argv-luks-disk-cipher.xml | 45 ---------------------- + tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml | 2 +- + .../qemuxml2xmlout-luks-disk-cipher.xml | 1 - + tests/qemuxml2xmltest.c | 1 - + tests/storagevolxml2xmlin/vol-luks-cipher.xml | 2 +- + tests/storagevolxml2xmlin/vol-luks.xml | 2 +- + tests/storagevolxml2xmlout/vol-luks-cipher.xml | 2 +- + tests/storagevolxml2xmlout/vol-luks.xml | 2 +- + 8 files changed, 5 insertions(+), 52 deletions(-) + delete mode 100644 tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml + delete mode 120000 tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml + +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml b/tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml +deleted file mode 100644 +index 9ce15c0..0000000 +--- a/tests/qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml ++++ /dev/null +@@ -1,45 +0,0 @@ +- +- encryptdisk +- 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 +- 1048576 +- 524288 +- 1 +- +- hvm +- +- +- +- destroy +- restart +- destroy +- +- /usr/bin/qemu +- +- +- +- +- +- +- +-
+- +- +- +- +- +- +- +- +-
+- +- +-
+- +- +- +- +- +-
+- +- +- +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml +index 9ce15c0..4c9c4c7 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-luks-disks.xml +@@ -28,7 +28,7 @@ + + + +- ++ + +
+ +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml +deleted file mode 120000 +index fa55233..0000000 +--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disk-cipher.xml ++++ /dev/null +@@ -1 +0,0 @@ +-../qemuxml2argvdata/qemuxml2argv-luks-disk-cipher.xml +\ No newline at end of file +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index d00d209..a757fdb 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -503,7 +503,6 @@ mymain(void) + DO_TEST("encrypted-disk"); + DO_TEST("encrypted-disk-usage"); + DO_TEST("luks-disks"); +- DO_TEST("luks-disk-cipher"); + DO_TEST("memtune"); + DO_TEST("memtune-unlimited"); + DO_TEST("blkiotune"); +diff --git a/tests/storagevolxml2xmlin/vol-luks-cipher.xml b/tests/storagevolxml2xmlin/vol-luks-cipher.xml +index 009246f..da28a27 100644 +--- a/tests/storagevolxml2xmlin/vol-luks-cipher.xml ++++ b/tests/storagevolxml2xmlin/vol-luks-cipher.xml +@@ -15,7 +15,7 @@ + + + +- ++ + + + +diff --git a/tests/storagevolxml2xmlin/vol-luks.xml b/tests/storagevolxml2xmlin/vol-luks.xml +index eb4dc41..bf3c519 100644 +--- a/tests/storagevolxml2xmlin/vol-luks.xml ++++ b/tests/storagevolxml2xmlin/vol-luks.xml +@@ -15,7 +15,7 @@ + + + +- ++ + + + +diff --git a/tests/storagevolxml2xmlout/vol-luks-cipher.xml b/tests/storagevolxml2xmlout/vol-luks-cipher.xml +index 9014849..1ac7424 100644 +--- a/tests/storagevolxml2xmlout/vol-luks-cipher.xml ++++ b/tests/storagevolxml2xmlout/vol-luks-cipher.xml +@@ -15,7 +15,7 @@ + + + +- ++ + + + +diff --git a/tests/storagevolxml2xmlout/vol-luks.xml b/tests/storagevolxml2xmlout/vol-luks.xml +index 5b764b7..7b82866 100644 +--- a/tests/storagevolxml2xmlout/vol-luks.xml ++++ b/tests/storagevolxml2xmlout/vol-luks.xml +@@ -15,7 +15,7 @@ + + + +- ++ + + + +-- +2.9.2 + diff --git a/SOURCES/libvirt-tests-Finish-rename-of-the-long-nodeinfo-test-case.patch b/SOURCES/libvirt-tests-Finish-rename-of-the-long-nodeinfo-test-case.patch deleted file mode 100644 index 01cace1..0000000 --- a/SOURCES/libvirt-tests-Finish-rename-of-the-long-nodeinfo-test-case.patch +++ /dev/null @@ -1,166 +0,0 @@ -From 20962f926fb903f4368e25dbc791a092de29fbda Mon Sep 17 00:00:00 2001 -Message-Id: <20962f926fb903f4368e25dbc791a092de29fbda@dist-git> -From: Martin Kletzander -Date: Wed, 5 Aug 2015 18:18:34 +0200 -Subject: [PATCH] tests: Finish rename of the long nodeinfo test case - -Commit 2094d01e2f54e5774c0d0d380e83154b42ea65be forgot to rename two -more files. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 54965743e23ff6488cbbf0f86ea44d24c1ab71a5) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/nodeinfodata/linux-ppc64-deconf-cpus.cpuinfo | 55 ++++++++++++++++++++++ - .../nodeinfodata/linux-ppc64-deconf-cpus.expected | 1 + - .../linux-ppc64-deconfigured-cpus.cpuinfo | 55 ---------------------- - .../linux-ppc64-deconfigured-cpus.expected | 1 - - 4 files changed, 56 insertions(+), 56 deletions(-) - create mode 100644 tests/nodeinfodata/linux-ppc64-deconf-cpus.cpuinfo - create mode 100644 tests/nodeinfodata/linux-ppc64-deconf-cpus.expected - delete mode 100644 tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo - delete mode 100644 tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected - -diff --git a/tests/nodeinfodata/linux-ppc64-deconf-cpus.cpuinfo b/tests/nodeinfodata/linux-ppc64-deconf-cpus.cpuinfo -new file mode 100644 -index 0000000..e5560e2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-deconf-cpus.cpuinfo -@@ -0,0 +1,55 @@ -+processor : 16 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 24 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 40 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 48 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 72 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 104 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 112 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 120 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 128 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+processor : 136 -+cpu : POWER8E (raw), altivec supported -+clock : 3690.000000MHz -+revision : 2.1 (pvr 004b 0201) -+ -+timebase : 512000000 -+platform : PowerNV -+model : 8247-22L -+machine : PowerNV 8247-22L -+firmware : OPAL v3 -diff --git a/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected b/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected -new file mode 100644 -index 0000000..304f423 ---- /dev/null -+++ b/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected -@@ -0,0 +1 @@ -+CPUs: 10/80, MHz: 3690, Nodes: 1, Sockets: 1, Cores: 80, Threads: 1 -diff --git a/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo b/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo -deleted file mode 100644 -index e5560e2..0000000 ---- a/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.cpuinfo -+++ /dev/null -@@ -1,55 +0,0 @@ --processor : 16 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 24 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 40 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 48 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 72 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 104 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 112 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 120 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 128 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --processor : 136 --cpu : POWER8E (raw), altivec supported --clock : 3690.000000MHz --revision : 2.1 (pvr 004b 0201) -- --timebase : 512000000 --platform : PowerNV --model : 8247-22L --machine : PowerNV 8247-22L --firmware : OPAL v3 -diff --git a/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected b/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected -deleted file mode 100644 -index 304f423..0000000 ---- a/tests/nodeinfodata/linux-ppc64-deconfigured-cpus.expected -+++ /dev/null -@@ -1 +0,0 @@ --CPUs: 10/80, MHz: 3690, Nodes: 1, Sockets: 1, Cores: 80, Threads: 1 --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Fix-broken-build.patch b/SOURCES/libvirt-tests-Fix-broken-build.patch new file mode 100644 index 0000000..781bdfc --- /dev/null +++ b/SOURCES/libvirt-tests-Fix-broken-build.patch @@ -0,0 +1,55 @@ +From 380bb5119e8ec08d79123c2323b6fcf59194b31d Mon Sep 17 00:00:00 2001 +Message-Id: <380bb5119e8ec08d79123c2323b6fcf59194b31d@dist-git> +From: John Ferlan +Date: Fri, 5 Aug 2016 16:10:10 +0200 +Subject: [PATCH] tests: Fix broken build + +https://bugzilla.redhat.com/show_bug.cgi?id=1304483 + +Commit id 'f522b7d2' caused a build failure : + +GEN check-augeas-virtlogd +Test failure:test_libvirtd_qemu.aug:69.3-147.28: + Expected: +{ +... + { "nvram" + { "1" = "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" } + { "2" = "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" } + } +... + Actual: +... +{ + { "nvram" + { "1" = "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" } + { "2" = "/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd" } + { "3" = "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" } + } +... + +This patch adds the OVMF_CODE.secboot.fd to the aug.in file + +Signed-off-by: John Ferlan +(cherry picked from commit d5813d72ad2bd8f9735b96bafe2ba350f74b3994) +Signed-off-by: Michal Privoznik +--- + src/qemu/test_libvirtd_qemu.aug.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in +index c4d4f19..99bf90f 100644 +--- a/src/qemu/test_libvirtd_qemu.aug.in ++++ b/src/qemu/test_libvirtd_qemu.aug.in +@@ -77,6 +77,7 @@ module Test_libvirtd_qemu = + { "log_timestamp" = "0" } + { "nvram" + { "1" = "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" } +- { "2" = "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" } ++ { "2" = "/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd" } ++ { "3" = "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" } + } + { "stdio_handler" = "logd" } +-- +2.9.2 + diff --git a/SOURCES/libvirt-tests-Improve-result-handling-in-cpuTestGuestData.patch b/SOURCES/libvirt-tests-Improve-result-handling-in-cpuTestGuestData.patch deleted file mode 100644 index d2343b9..0000000 --- a/SOURCES/libvirt-tests-Improve-result-handling-in-cpuTestGuestData.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 9480c80c70b43a9a81aebabb9bebfbfb3154cc81 Mon Sep 17 00:00:00 2001 -Message-Id: <9480c80c70b43a9a81aebabb9bebfbfb3154cc81@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:59 +0200 -Subject: [PATCH] tests: Improve result handling in cpuTestGuestData() - -A test is considered successful if the obtained result matches -the expected result: if that's not the case, whether because a -test that was expected to succeed failed or because a test that -was supposed to fail succeeded, then something's not right and -we want the user to know about this. - -On the other hand, if a failure that's unrelated to the bits -we're testing occurs, then the user should be notified even if -the test was expected to fail. - -Use different values to tell these two situations apart. - -Fix a test case that was wrongly expected to fail as well. - -(cherry picked from commit e5ef51a4c02dd1b61673a6c9771a0cdc0fad343f) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/cputest.c | 32 ++++++++++++++++++++++++-------- - 1 file changed, 24 insertions(+), 8 deletions(-) - -diff --git a/tests/cputest.c b/tests/cputest.c -index 06b3f12..93f9d2e 100644 ---- a/tests/cputest.c -+++ b/tests/cputest.c -@@ -247,7 +247,7 @@ static int - cpuTestGuestData(const void *arg) - { - const struct data *data = arg; -- int ret = -1; -+ int ret = -2; - virCPUDefPtr host = NULL; - virCPUDefPtr cpu = NULL; - virCPUDefPtr guest = NULL; -@@ -262,8 +262,10 @@ cpuTestGuestData(const void *arg) - - cmpResult = cpuGuestData(host, cpu, &guestData, NULL); - if (cmpResult == VIR_CPU_COMPARE_ERROR || -- cmpResult == VIR_CPU_COMPARE_INCOMPATIBLE) -+ cmpResult == VIR_CPU_COMPARE_INCOMPATIBLE) { -+ ret = -1; - goto cleanup; -+ } - - if (VIR_ALLOC(guest) < 0) - goto cleanup; -@@ -274,10 +276,7 @@ cpuTestGuestData(const void *arg) - guest->fallback = cpu->fallback; - if (cpuDecode(guest, guestData, data->models, - data->nmodels, data->preferred) < 0) { -- if (data->result < 0) { -- virResetLastError(); -- ret = 0; -- } -+ ret = -1; - goto cleanup; - } - -@@ -294,7 +293,10 @@ cpuTestGuestData(const void *arg) - } - result = virBufferContentAndReset(&buf); - -- ret = cpuTestCompareXML(data->arch, guest, result, false); -+ if (cpuTestCompareXML(data->arch, guest, result, false) < 0) -+ goto cleanup; -+ -+ ret = 0; - - cleanup: - VIR_FREE(result); -@@ -302,6 +304,20 @@ cpuTestGuestData(const void *arg) - virCPUDefFree(host); - virCPUDefFree(cpu); - virCPUDefFree(guest); -+ -+ if (ret == data->result) { -+ /* We got the result we expected, whether it was -+ * a success or a failure */ -+ virResetLastError(); -+ ret = 0; -+ } else { -+ VIR_TEST_VERBOSE("\nExpected result %d, got %d\n", -+ data->result, ret); -+ /* Pad to line up with test name ... in virTestRun */ -+ VIR_TEST_VERBOSE("%74s", "... "); -+ ret = -1; -+ } -+ - return ret; - } - -@@ -646,7 +662,7 @@ mymain(void) - NULL, "Haswell-noTSX", 0); - - DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0); -- DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", -1); -+ DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", 0); - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Prepare-for-subcore-tests.patch b/SOURCES/libvirt-tests-Prepare-for-subcore-tests.patch deleted file mode 100644 index c00e687..0000000 --- a/SOURCES/libvirt-tests-Prepare-for-subcore-tests.patch +++ /dev/null @@ -1,115 +0,0 @@ -From eddb74776301338b7066555076740689bb69e950 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Shivaprasad G Bhat -Date: Wed, 5 Aug 2015 18:18:36 +0200 -Subject: [PATCH] tests: Prepare for subcore tests - -The nodeGetThreadsPerSubcore() function is mocked to return 8 for -ppc64 tests, which corresponds to the default subcore mode. - -Update the expected output for the deconfigured-cpus nodeinfo -test to account for this change. - -Signed-off-by: Shivaprasad G Bhat -Signed-off-by: Andrea Bolognani -(cherry picked from commit 3020f550cad1f928f6e98308453d00cd68fa0d86) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/Makefile.am | 6 ++++ - .../nodeinfodata/linux-ppc64-deconf-cpus.expected | 2 +- - tests/nodeinfomock.c | 35 ++++++++++++++++++++++ - tests/nodeinfotest.c | 2 +- - 4 files changed, 43 insertions(+), 2 deletions(-) - create mode 100644 tests/nodeinfomock.c - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index b202195..bde7f5b 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -412,6 +412,7 @@ test_libraries = libshunload.la \ - vircgroupmock.la \ - virpcimock.la \ - virnetdevmock.la \ -+ nodeinfomock.la \ - $(NULL) - if WITH_QEMU - test_libraries += libqemumonitortestutils.la \ -@@ -1048,6 +1049,11 @@ virpcimock_la_LIBADD = $(GNULIB_LIBS) \ - ../src/libvirt.la - virpcimock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) - -+nodeinfomock_la_SOURCES = \ -+ nodeinfomock.c -+nodeinfomock_la_CFLAGS = $(AM_CFLAGS) -+nodeinfomock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) -+ - virnetdevtest_SOURCES = \ - virnetdevtest.c testutils.h testutils.c - virnetdevtest_CFLAGS = $(AM_CFLAGS) $(LIBNL_CFLAGS) -diff --git a/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected b/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected -index 304f423..113bfa8 100644 ---- a/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected -+++ b/tests/nodeinfodata/linux-ppc64-deconf-cpus.expected -@@ -1 +1 @@ --CPUs: 10/80, MHz: 3690, Nodes: 1, Sockets: 1, Cores: 80, Threads: 1 -+CPUs: 80/80, MHz: 3690, Nodes: 1, Sockets: 1, Cores: 80, Threads: 1 -diff --git a/tests/nodeinfomock.c b/tests/nodeinfomock.c -new file mode 100644 -index 0000000..b9c0152 ---- /dev/null -+++ b/tests/nodeinfomock.c -@@ -0,0 +1,35 @@ -+/* -+ * Copyright (C) 2015 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see -+ * . -+ * -+ */ -+ -+#include -+ -+#include "internal.h" -+#include "nodeinfo.h" -+ -+int -+nodeGetThreadsPerSubcore(virArch arch) -+{ -+ int threads_per_subcore = 0; -+ -+ // Emulate SMT=8 on POWER hardware -+ if (ARCH_IS_PPC64(arch)) -+ threads_per_subcore = 8; -+ -+ return threads_per_subcore; -+} -diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c -index 3fffdb2..ccef4a9 100644 ---- a/tests/nodeinfotest.c -+++ b/tests/nodeinfotest.c -@@ -256,6 +256,6 @@ mymain(void) - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } - --VIRT_TEST_MAIN(mymain) -+VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/nodeinfomock.so") - - #endif /* __linux__ */ --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Re-enable-ppc64-cpu-tests.patch b/SOURCES/libvirt-tests-Re-enable-ppc64-cpu-tests.patch deleted file mode 100644 index acab828..0000000 --- a/SOURCES/libvirt-tests-Re-enable-ppc64-cpu-tests.patch +++ /dev/null @@ -1,210 +0,0 @@ -From 1f1df77ba761141d7b68dd98442cd63c708ad6f0 Mon Sep 17 00:00:00 2001 -Message-Id: <1f1df77ba761141d7b68dd98442cd63c708ad6f0@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:11 +0200 -Subject: [PATCH] tests: Re-enable ppc64 cpu tests - -Now that all the changes have been implemented we can run the -test cases once again, after updating them to reflect the new -behaviour. - -(cherry picked from commit 049df97504e4f14cc4b8e16db26ea202c47d336a) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/cputest.c | 16 ++++------------ - .../cputestdata/ppc64-baseline-incompatible-vendors.xml | 4 ++-- - tests/cputestdata/ppc64-baseline-no-vendor-result.xml | 2 +- - tests/cputestdata/ppc64-baseline-no-vendor.xml | 2 +- - tests/cputestdata/ppc64-exact.xml | 3 --- - tests/cputestdata/ppc64-guest-exact.xml | 3 +++ - tests/cputestdata/ppc64-guest-nofallback.xml | 3 +-- - tests/cputestdata/ppc64-guest-strict.xml | 3 +++ - tests/cputestdata/ppc64-guest.xml | 3 +-- - tests/cputestdata/ppc64-host+guest,ppc_models-result.xml | 2 +- - tests/cputestdata/ppc64-host.xml | 2 +- - tests/cputestdata/ppc64-strict.xml | 3 --- - 12 files changed, 18 insertions(+), 28 deletions(-) - delete mode 100644 tests/cputestdata/ppc64-exact.xml - create mode 100644 tests/cputestdata/ppc64-guest-exact.xml - create mode 100644 tests/cputestdata/ppc64-guest-strict.xml - delete mode 100644 tests/cputestdata/ppc64-strict.xml - -diff --git a/tests/cputest.c b/tests/cputest.c -index 4dbccfd..09f690a 100644 ---- a/tests/cputest.c -+++ b/tests/cputest.c -@@ -501,9 +501,7 @@ static const char *model486[] = { "486" }; - static const char *nomodel[] = { "nomodel" }; - static const char *models[] = { "qemu64", "core2duo", "Nehalem" }; - static const char *haswell[] = { "SandyBridge", "Haswell" }; --/* XXX temporarily disabled --static const char *ppc_models[] = { "POWER7", "POWER7_v2.1", "POWER7_v2.3", "POWER8_v1.0"}; --*/ -+static const char *ppc_models[] = { "POWER6", "POWER7", "POWER8" }; - - static int - mymain(void) -@@ -597,10 +595,8 @@ mymain(void) - DO_TEST_COMPARE("x86", "host-worse", "nehalem-force", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host-SandyBridge", "exact-force-Haswell", VIR_CPU_COMPARE_IDENTICAL); - -- /* XXX temporarily disabled -- DO_TEST_COMPARE("ppc64", "host", "strict", VIR_CPU_COMPARE_IDENTICAL); -- DO_TEST_COMPARE("ppc64", "host", "exact", VIR_CPU_COMPARE_INCOMPATIBLE); -- */ -+ DO_TEST_COMPARE("ppc64", "host", "guest-strict", VIR_CPU_COMPARE_IDENTICAL); -+ DO_TEST_COMPARE("ppc64", "host", "guest-exact", VIR_CPU_COMPARE_INCOMPATIBLE); - - /* guest updates for migration - * automatically compares host CPU with the result */ -@@ -629,10 +625,8 @@ mymain(void) - DO_TEST_BASELINE("x86", "7", 0, 0); - DO_TEST_BASELINE("x86", "8", 0, 0); - -- /* XXX temporarily disabled - DO_TEST_BASELINE("ppc64", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("ppc64", "no-vendor", 0, 0); -- */ - - /* CPU features */ - DO_TEST_HASFEATURE("x86", "host", "vmx", YES); -@@ -668,10 +662,8 @@ mymain(void) - DO_TEST_GUESTDATA("x86", "host-Haswell-noTSX", "Haswell-noTSX", - NULL, "Haswell-noTSX", 0); - -- /* XXX temporarily disabled - DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0); -- DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", -1); -- */ -+ DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER8", -1); - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } -diff --git a/tests/cputestdata/ppc64-baseline-incompatible-vendors.xml b/tests/cputestdata/ppc64-baseline-incompatible-vendors.xml -index 97d3c9c..9e67e9d 100644 ---- a/tests/cputestdata/ppc64-baseline-incompatible-vendors.xml -+++ b/tests/cputestdata/ppc64-baseline-incompatible-vendors.xml -@@ -1,13 +1,13 @@ - - - ppc64 -- POWER7+_v2.1 -+ POWER7 - Intel - - - - ppc64 -- POWER8_v1.0 -+ POWER8 - Intel - - -diff --git a/tests/cputestdata/ppc64-baseline-no-vendor-result.xml b/tests/cputestdata/ppc64-baseline-no-vendor-result.xml -index 36bae52..758099c 100644 ---- a/tests/cputestdata/ppc64-baseline-no-vendor-result.xml -+++ b/tests/cputestdata/ppc64-baseline-no-vendor-result.xml -@@ -1,3 +1,3 @@ - -- POWER7_v2.3 -+ POWER7 - -diff --git a/tests/cputestdata/ppc64-baseline-no-vendor.xml b/tests/cputestdata/ppc64-baseline-no-vendor.xml -index 5e69a62..6d8dd0d 100644 ---- a/tests/cputestdata/ppc64-baseline-no-vendor.xml -+++ b/tests/cputestdata/ppc64-baseline-no-vendor.xml -@@ -1,7 +1,7 @@ - - - ppc64 -- POWER7_v2.3 -+ POWER7 - - - -diff --git a/tests/cputestdata/ppc64-exact.xml b/tests/cputestdata/ppc64-exact.xml -deleted file mode 100644 -index c84f16a..0000000 ---- a/tests/cputestdata/ppc64-exact.xml -+++ /dev/null -@@ -1,3 +0,0 @@ -- -- POWER8_v1.0 -- -diff --git a/tests/cputestdata/ppc64-guest-exact.xml b/tests/cputestdata/ppc64-guest-exact.xml -new file mode 100644 -index 0000000..f416a59 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-exact.xml -@@ -0,0 +1,3 @@ -+ -+ POWER8 -+ -diff --git a/tests/cputestdata/ppc64-guest-nofallback.xml b/tests/cputestdata/ppc64-guest-nofallback.xml -index 42026b4..070f006 100644 ---- a/tests/cputestdata/ppc64-guest-nofallback.xml -+++ b/tests/cputestdata/ppc64-guest-nofallback.xml -@@ -1,4 +1,3 @@ - -- POWER7_v2.1 -- -+ POWER8 - -diff --git a/tests/cputestdata/ppc64-guest-strict.xml b/tests/cputestdata/ppc64-guest-strict.xml -new file mode 100644 -index 0000000..217dfc7 ---- /dev/null -+++ b/tests/cputestdata/ppc64-guest-strict.xml -@@ -0,0 +1,3 @@ -+ -+ POWER7 -+ -diff --git a/tests/cputestdata/ppc64-guest.xml b/tests/cputestdata/ppc64-guest.xml -index 9e91501..a60c59f 100644 ---- a/tests/cputestdata/ppc64-guest.xml -+++ b/tests/cputestdata/ppc64-guest.xml -@@ -1,4 +1,3 @@ - -- POWER7_v2.3 -- -+ POWER7 - -diff --git a/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml b/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml -index 3e55f68..3548c0e 100644 ---- a/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml -+++ b/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml -@@ -1,5 +1,5 @@ - - ppc64 -- POWER7_v2.3 -+ POWER7 - IBM - -diff --git a/tests/cputestdata/ppc64-host.xml b/tests/cputestdata/ppc64-host.xml -index 39cb741..0ac5c4e 100644 ---- a/tests/cputestdata/ppc64-host.xml -+++ b/tests/cputestdata/ppc64-host.xml -@@ -1,6 +1,6 @@ - - ppc64 -- POWER7_v2.3 -+ POWER7 - IBM - - -diff --git a/tests/cputestdata/ppc64-strict.xml b/tests/cputestdata/ppc64-strict.xml -deleted file mode 100644 -index e91c6e7..0000000 ---- a/tests/cputestdata/ppc64-strict.xml -+++ /dev/null -@@ -1,3 +0,0 @@ -- -- POWER7_v2.3 -- --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Remove-unused-file.patch b/SOURCES/libvirt-tests-Remove-unused-file.patch deleted file mode 100644 index b79bf1f..0000000 --- a/SOURCES/libvirt-tests-Remove-unused-file.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4bc98662c54fa9ae891d1af9c380c72bd5f928b7 Mon Sep 17 00:00:00 2001 -Message-Id: <4bc98662c54fa9ae891d1af9c380c72bd5f928b7@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:15:58 +0200 -Subject: [PATCH] tests: Remove unused file - -No functional changes. - -(cherry picked from commit 81a925e0f9f0d675afe4e57204350f9b797d1eb7) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/cputestdata/ppc64-baseline-1-result.xml | 3 --- - 1 file changed, 3 deletions(-) - delete mode 100644 tests/cputestdata/ppc64-baseline-1-result.xml - -diff --git a/tests/cputestdata/ppc64-baseline-1-result.xml b/tests/cputestdata/ppc64-baseline-1-result.xml -deleted file mode 100644 -index cbdd9bc..0000000 ---- a/tests/cputestdata/ppc64-baseline-1-result.xml -+++ /dev/null -@@ -1,3 +0,0 @@ -- -- POWER7+_v2.1 -- --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Restore-links-in-deconfigured-cpus-nodeinfo-test.patch b/SOURCES/libvirt-tests-Restore-links-in-deconfigured-cpus-nodeinfo-test.patch deleted file mode 100644 index b63ae18..0000000 --- a/SOURCES/libvirt-tests-Restore-links-in-deconfigured-cpus-nodeinfo-test.patch +++ /dev/null @@ -1,1877 +0,0 @@ -From c18e7f9230e4975a811e660393af721e5092d73f Mon Sep 17 00:00:00 2001 -Message-Id: -From: Andrea Bolognani -Date: Wed, 5 Aug 2015 18:18:19 +0200 -Subject: [PATCH] tests: Restore links in deconfigured-cpus nodeinfo test - -When cleaning up the data (taken from a running system) for inclusion -I went a little too far and deleted a bunch of links that should have -been left alone. The test worked despite this because it was going -through a fallback code path. - -A few other files are affected as well: again, the data is taken from -a running system, so even thought we would probably be okay if we -just added the links, aligning everything is definitely safer. - -(cherry picked from commit cc3d52eb2f42a7220557f21ac124cf8dea5d607c) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1213713 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - .../cpu/cpu128/topology/core_id | 2 +- - .../cpu/cpu16/topology/core_id | 2 +- - .../cpu/cpu24/topology/core_id | 2 +- - .../cpu/cpu48/topology/core_id | 2 +- - .../cpu/cpu72/topology/core_id | 2 +- - .../linux-deconfigured-cpus/node/node0/cpu0 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu1 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu10 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu100 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu101 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu102 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu103 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu11 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu12 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu13 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu14 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu144 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu145 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu146 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu147 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu148 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu149 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu15 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu150 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu151 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu152 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu153 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu154 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu155 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu156 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu157 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu158 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu159 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu16 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu17 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu18 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu19 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu2 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu20 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu21 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu22 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu23 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu24 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu25 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu26 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu27 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu28 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu29 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu3 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu30 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu31 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu32 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu33 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu34 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu35 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu36 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu37 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu38 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu39 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu4 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu5 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu56 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu57 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu58 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu59 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu6 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu60 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu61 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu62 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu63 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu64 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu65 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu66 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu67 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu68 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu69 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu7 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu70 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu71 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu8 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu80 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu81 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu82 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu83 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu84 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu85 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu86 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu87 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu88 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu89 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu9 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu90 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu91 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu92 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu93 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu94 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu95 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu96 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu97 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu98 | 1 + - .../linux-deconfigured-cpus/node/node0/cpu99 | 1 + - .../linux-deconfigured-cpus/node/node0/meminfo | 36 ++++++++++---------- - .../linux-deconfigured-cpus/node/node1/cpu40 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu41 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu42 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu43 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu44 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu45 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu46 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu47 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu48 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu49 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu50 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu51 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu52 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu53 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu54 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu55 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu72 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu73 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu74 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu75 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu76 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu77 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu78 | 1 + - .../linux-deconfigured-cpus/node/node1/cpu79 | 1 + - .../linux-deconfigured-cpus/node/node1/meminfo | 36 ++++++++++---------- - .../linux-deconfigured-cpus/node/node16/cpu104 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu105 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu106 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu107 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu108 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu109 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu110 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu111 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu112 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu113 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu114 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu115 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu116 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu117 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu118 | 1 + - .../linux-deconfigured-cpus/node/node16/cpu119 | 1 + - .../linux-deconfigured-cpus/node/node16/meminfo | 36 ++++++++++---------- - .../linux-deconfigured-cpus/node/node17/cpu120 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu121 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu122 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu123 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu124 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu125 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu126 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu127 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu128 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu129 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu130 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu131 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu132 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu133 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu134 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu135 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu136 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu137 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu138 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu139 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu140 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu141 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu142 | 1 + - .../linux-deconfigured-cpus/node/node17/cpu143 | 1 + - .../linux-deconfigured-cpus/node/node17/meminfo | 38 +++++++++++----------- - 169 files changed, 238 insertions(+), 78 deletions(-) - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 - create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 - -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -index 6edc5b6..5c54d10 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu128/topology/core_id -@@ -1 +1 @@ --2224 -+2216 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -index f906e18..21e72e8 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu16/topology/core_id -@@ -1 +1 @@ --96 -+48 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -index b16e5f7..f906e18 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu24/topology/core_id -@@ -1 +1 @@ --104 -+96 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -index 1057e9a..de8febe 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu48/topology/core_id -@@ -1 +1 @@ --176 -+168 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -index eb08bc0..7c022ae 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/cpu/cpu72/topology/core_id -@@ -1 +1 @@ --240 -+232 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 -new file mode 120000 -index 0000000..c841bea ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0 -@@ -0,0 +1 @@ -+../../cpu/cpu0 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 -new file mode 120000 -index 0000000..5f45362 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1 -@@ -0,0 +1 @@ -+../../cpu/cpu1 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 -new file mode 120000 -index 0000000..a6dc6bb ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10 -@@ -0,0 +1 @@ -+../../cpu/cpu10 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 -new file mode 120000 -index 0000000..ffb1446 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100 -@@ -0,0 +1 @@ -+../../cpu/cpu100 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 -new file mode 120000 -index 0000000..2b399e6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101 -@@ -0,0 +1 @@ -+../../cpu/cpu101 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 -new file mode 120000 -index 0000000..f06eb7d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102 -@@ -0,0 +1 @@ -+../../cpu/cpu102 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 -new file mode 120000 -index 0000000..722b506 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103 -@@ -0,0 +1 @@ -+../../cpu/cpu103 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 -new file mode 120000 -index 0000000..e29d898 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11 -@@ -0,0 +1 @@ -+../../cpu/cpu11 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 -new file mode 120000 -index 0000000..211519e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12 -@@ -0,0 +1 @@ -+../../cpu/cpu12 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 -new file mode 120000 -index 0000000..52d3b69 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13 -@@ -0,0 +1 @@ -+../../cpu/cpu13 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 -new file mode 120000 -index 0000000..24cb3b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14 -@@ -0,0 +1 @@ -+../../cpu/cpu14 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 -new file mode 120000 -index 0000000..ccecb10 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144 -@@ -0,0 +1 @@ -+../../cpu/cpu144 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 -new file mode 120000 -index 0000000..00def86 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145 -@@ -0,0 +1 @@ -+../../cpu/cpu145 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 -new file mode 120000 -index 0000000..6a13966 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146 -@@ -0,0 +1 @@ -+../../cpu/cpu146 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 -new file mode 120000 -index 0000000..143c5a7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147 -@@ -0,0 +1 @@ -+../../cpu/cpu147 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 -new file mode 120000 -index 0000000..21bae94 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148 -@@ -0,0 +1 @@ -+../../cpu/cpu148 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 -new file mode 120000 -index 0000000..fdb0f17 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149 -@@ -0,0 +1 @@ -+../../cpu/cpu149 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 -new file mode 120000 -index 0000000..e905d85 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15 -@@ -0,0 +1 @@ -+../../cpu/cpu15 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 -new file mode 120000 -index 0000000..da363e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150 -@@ -0,0 +1 @@ -+../../cpu/cpu150 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 -new file mode 120000 -index 0000000..069de6b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151 -@@ -0,0 +1 @@ -+../../cpu/cpu151 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 -new file mode 120000 -index 0000000..0fb022e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152 -@@ -0,0 +1 @@ -+../../cpu/cpu152 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 -new file mode 120000 -index 0000000..d7e0f9e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153 -@@ -0,0 +1 @@ -+../../cpu/cpu153 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 -new file mode 120000 -index 0000000..0a6117a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154 -@@ -0,0 +1 @@ -+../../cpu/cpu154 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 -new file mode 120000 -index 0000000..201f0f5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155 -@@ -0,0 +1 @@ -+../../cpu/cpu155 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 -new file mode 120000 -index 0000000..da7f12b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156 -@@ -0,0 +1 @@ -+../../cpu/cpu156 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 -new file mode 120000 -index 0000000..c2aa5c2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157 -@@ -0,0 +1 @@ -+../../cpu/cpu157 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 -new file mode 120000 -index 0000000..4376692 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158 -@@ -0,0 +1 @@ -+../../cpu/cpu158 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 -new file mode 120000 -index 0000000..852a0c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159 -@@ -0,0 +1 @@ -+../../cpu/cpu159 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 -new file mode 120000 -index 0000000..445de40 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16 -@@ -0,0 +1 @@ -+../../cpu/cpu16 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 -new file mode 120000 -index 0000000..13929db ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17 -@@ -0,0 +1 @@ -+../../cpu/cpu17 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 -new file mode 120000 -index 0000000..3809adc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18 -@@ -0,0 +1 @@ -+../../cpu/cpu18 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 -new file mode 120000 -index 0000000..c671083 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19 -@@ -0,0 +1 @@ -+../../cpu/cpu19 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 -new file mode 120000 -index 0000000..2dcca33 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2 -@@ -0,0 +1 @@ -+../../cpu/cpu2 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 -new file mode 120000 -index 0000000..a37c370 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20 -@@ -0,0 +1 @@ -+../../cpu/cpu20 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 -new file mode 120000 -index 0000000..68a7cad ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21 -@@ -0,0 +1 @@ -+../../cpu/cpu21 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 -new file mode 120000 -index 0000000..2c226ae ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22 -@@ -0,0 +1 @@ -+../../cpu/cpu22 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 -new file mode 120000 -index 0000000..75c2f57 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23 -@@ -0,0 +1 @@ -+../../cpu/cpu23 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 -new file mode 120000 -index 0000000..ad0a618 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24 -@@ -0,0 +1 @@ -+../../cpu/cpu24 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 -new file mode 120000 -index 0000000..3145742 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25 -@@ -0,0 +1 @@ -+../../cpu/cpu25 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 -new file mode 120000 -index 0000000..1dd180f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26 -@@ -0,0 +1 @@ -+../../cpu/cpu26 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 -new file mode 120000 -index 0000000..74ced19 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27 -@@ -0,0 +1 @@ -+../../cpu/cpu27 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 -new file mode 120000 -index 0000000..83269be ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28 -@@ -0,0 +1 @@ -+../../cpu/cpu28 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 -new file mode 120000 -index 0000000..fa37dc6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29 -@@ -0,0 +1 @@ -+../../cpu/cpu29 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 -new file mode 120000 -index 0000000..c7690e5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3 -@@ -0,0 +1 @@ -+../../cpu/cpu3 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 -new file mode 120000 -index 0000000..80226fa ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30 -@@ -0,0 +1 @@ -+../../cpu/cpu30 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 -new file mode 120000 -index 0000000..6a9a569 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31 -@@ -0,0 +1 @@ -+../../cpu/cpu31 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 -new file mode 120000 -index 0000000..bbca866 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32 -@@ -0,0 +1 @@ -+../../cpu/cpu32 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 -new file mode 120000 -index 0000000..b7a9f8d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33 -@@ -0,0 +1 @@ -+../../cpu/cpu33 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 -new file mode 120000 -index 0000000..0c0e738 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34 -@@ -0,0 +1 @@ -+../../cpu/cpu34 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 -new file mode 120000 -index 0000000..47654d6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35 -@@ -0,0 +1 @@ -+../../cpu/cpu35 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 -new file mode 120000 -index 0000000..5e53f70 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36 -@@ -0,0 +1 @@ -+../../cpu/cpu36 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 -new file mode 120000 -index 0000000..41b4ce7 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37 -@@ -0,0 +1 @@ -+../../cpu/cpu37 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 -new file mode 120000 -index 0000000..7231eb4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38 -@@ -0,0 +1 @@ -+../../cpu/cpu38 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 -new file mode 120000 -index 0000000..d465480 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39 -@@ -0,0 +1 @@ -+../../cpu/cpu39 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 -new file mode 120000 -index 0000000..9e77a64 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4 -@@ -0,0 +1 @@ -+../../cpu/cpu4 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 -new file mode 120000 -index 0000000..cc07c3b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5 -@@ -0,0 +1 @@ -+../../cpu/cpu5 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 -new file mode 120000 -index 0000000..586050f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56 -@@ -0,0 +1 @@ -+../../cpu/cpu56 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 -new file mode 120000 -index 0000000..4276ac5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57 -@@ -0,0 +1 @@ -+../../cpu/cpu57 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 -new file mode 120000 -index 0000000..3c10d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58 -@@ -0,0 +1 @@ -+../../cpu/cpu58 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 -new file mode 120000 -index 0000000..06ddb97 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59 -@@ -0,0 +1 @@ -+../../cpu/cpu59 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 -new file mode 120000 -index 0000000..2e75763 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6 -@@ -0,0 +1 @@ -+../../cpu/cpu6 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 -new file mode 120000 -index 0000000..c062761 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60 -@@ -0,0 +1 @@ -+../../cpu/cpu60 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 -new file mode 120000 -index 0000000..5a2c12f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61 -@@ -0,0 +1 @@ -+../../cpu/cpu61 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 -new file mode 120000 -index 0000000..9056072 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62 -@@ -0,0 +1 @@ -+../../cpu/cpu62 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 -new file mode 120000 -index 0000000..1511953 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63 -@@ -0,0 +1 @@ -+../../cpu/cpu63 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 -new file mode 120000 -index 0000000..1664a2b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64 -@@ -0,0 +1 @@ -+../../cpu/cpu64 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 -new file mode 120000 -index 0000000..52712cf ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65 -@@ -0,0 +1 @@ -+../../cpu/cpu65 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 -new file mode 120000 -index 0000000..93a4f32 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66 -@@ -0,0 +1 @@ -+../../cpu/cpu66 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 -new file mode 120000 -index 0000000..db73e74 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67 -@@ -0,0 +1 @@ -+../../cpu/cpu67 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 -new file mode 120000 -index 0000000..4f40eb8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68 -@@ -0,0 +1 @@ -+../../cpu/cpu68 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 -new file mode 120000 -index 0000000..9f32d96 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69 -@@ -0,0 +1 @@ -+../../cpu/cpu69 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 -new file mode 120000 -index 0000000..09e3f79 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7 -@@ -0,0 +1 @@ -+../../cpu/cpu7 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 -new file mode 120000 -index 0000000..a0e8fd2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70 -@@ -0,0 +1 @@ -+../../cpu/cpu70 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 -new file mode 120000 -index 0000000..898c9f2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71 -@@ -0,0 +1 @@ -+../../cpu/cpu71 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 -new file mode 120000 -index 0000000..bda10cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8 -@@ -0,0 +1 @@ -+../../cpu/cpu8 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 -new file mode 120000 -index 0000000..ce5ed81 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80 -@@ -0,0 +1 @@ -+../../cpu/cpu80 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 -new file mode 120000 -index 0000000..dcd9a05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81 -@@ -0,0 +1 @@ -+../../cpu/cpu81 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 -new file mode 120000 -index 0000000..c91ce01 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82 -@@ -0,0 +1 @@ -+../../cpu/cpu82 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 -new file mode 120000 -index 0000000..22ba3c4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83 -@@ -0,0 +1 @@ -+../../cpu/cpu83 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 -new file mode 120000 -index 0000000..c7e4d26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84 -@@ -0,0 +1 @@ -+../../cpu/cpu84 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 -new file mode 120000 -index 0000000..6779d27 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85 -@@ -0,0 +1 @@ -+../../cpu/cpu85 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 -new file mode 120000 -index 0000000..9e777be ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86 -@@ -0,0 +1 @@ -+../../cpu/cpu86 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 -new file mode 120000 -index 0000000..0359c58 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87 -@@ -0,0 +1 @@ -+../../cpu/cpu87 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 -new file mode 120000 -index 0000000..3825c50 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88 -@@ -0,0 +1 @@ -+../../cpu/cpu88 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 -new file mode 120000 -index 0000000..9a72211 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89 -@@ -0,0 +1 @@ -+../../cpu/cpu89 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 -new file mode 120000 -index 0000000..1ec1db2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9 -@@ -0,0 +1 @@ -+../../cpu/cpu9 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 -new file mode 120000 -index 0000000..75d10b3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90 -@@ -0,0 +1 @@ -+../../cpu/cpu90 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 -new file mode 120000 -index 0000000..8e9e4a4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91 -@@ -0,0 +1 @@ -+../../cpu/cpu91 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 -new file mode 120000 -index 0000000..f8d5f05 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92 -@@ -0,0 +1 @@ -+../../cpu/cpu92 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 -new file mode 120000 -index 0000000..5a302ad ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93 -@@ -0,0 +1 @@ -+../../cpu/cpu93 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 -new file mode 120000 -index 0000000..9e6239f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94 -@@ -0,0 +1 @@ -+../../cpu/cpu94 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 -new file mode 120000 -index 0000000..d87b5e3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95 -@@ -0,0 +1 @@ -+../../cpu/cpu95 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 -new file mode 120000 -index 0000000..50d1edc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96 -@@ -0,0 +1 @@ -+../../cpu/cpu96 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 -new file mode 120000 -index 0000000..38b5a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97 -@@ -0,0 +1 @@ -+../../cpu/cpu97 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 -new file mode 120000 -index 0000000..df97c6c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98 -@@ -0,0 +1 @@ -+../../cpu/cpu98 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 -new file mode 120000 -index 0000000..a3a6164 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99 -@@ -0,0 +1 @@ -+../../cpu/cpu99 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -index 1033a39..0ecf45a 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node0/meminfo -@@ -1,28 +1,28 @@ - Node 0 MemTotal: 67108864 kB --Node 0 MemFree: 61726720 kB --Node 0 MemUsed: 5382144 kB --Node 0 Active: 276544 kB --Node 0 Inactive: 174848 kB --Node 0 Active(anon): 100928 kB --Node 0 Inactive(anon): 9152 kB --Node 0 Active(file): 175616 kB --Node 0 Inactive(file): 165696 kB -+Node 0 MemFree: 61960640 kB -+Node 0 MemUsed: 5148224 kB -+Node 0 Active: 124864 kB -+Node 0 Inactive: 107584 kB -+Node 0 Active(anon): 83648 kB -+Node 0 Inactive(anon): 8768 kB -+Node 0 Active(file): 41216 kB -+Node 0 Inactive(file): 98816 kB - Node 0 Unevictable: 0 kB - Node 0 Mlocked: 0 kB --Node 0 Dirty: 69824 kB -+Node 0 Dirty: 128 kB - Node 0 Writeback: 0 kB --Node 0 FilePages: 360256 kB --Node 0 Mapped: 42752 kB --Node 0 AnonPages: 93312 kB --Node 0 Shmem: 16768 kB --Node 0 KernelStack: 10208 kB --Node 0 PageTables: 1472 kB -+Node 0 FilePages: 155008 kB -+Node 0 Mapped: 31552 kB -+Node 0 AnonPages: 77312 kB -+Node 0 Shmem: 15104 kB -+Node 0 KernelStack: 8992 kB -+Node 0 PageTables: 1728 kB - Node 0 NFS_Unstable: 0 kB - Node 0 Bounce: 0 kB - Node 0 WritebackTmp: 0 kB --Node 0 Slab: 184576 kB --Node 0 SReclaimable: 57152 kB --Node 0 SUnreclaim: 127424 kB -+Node 0 Slab: 151872 kB -+Node 0 SReclaimable: 27776 kB -+Node 0 SUnreclaim: 124096 kB - Node 0 AnonHugePages: 0 kB - Node 0 HugePages_Total: 0 - Node 0 HugePages_Free: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 -new file mode 120000 -index 0000000..c727d46 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40 -@@ -0,0 +1 @@ -+../../cpu/cpu40 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 -new file mode 120000 -index 0000000..cc0b78c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41 -@@ -0,0 +1 @@ -+../../cpu/cpu41 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 -new file mode 120000 -index 0000000..8ebd18e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42 -@@ -0,0 +1 @@ -+../../cpu/cpu42 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 -new file mode 120000 -index 0000000..03b2d2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43 -@@ -0,0 +1 @@ -+../../cpu/cpu43 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 -new file mode 120000 -index 0000000..859e4fc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44 -@@ -0,0 +1 @@ -+../../cpu/cpu44 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 -new file mode 120000 -index 0000000..58c3ca3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45 -@@ -0,0 +1 @@ -+../../cpu/cpu45 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 -new file mode 120000 -index 0000000..55223e0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46 -@@ -0,0 +1 @@ -+../../cpu/cpu46 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 -new file mode 120000 -index 0000000..19407d4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47 -@@ -0,0 +1 @@ -+../../cpu/cpu47 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 -new file mode 120000 -index 0000000..60a190c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48 -@@ -0,0 +1 @@ -+../../cpu/cpu48 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 -new file mode 120000 -index 0000000..0ff1796 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49 -@@ -0,0 +1 @@ -+../../cpu/cpu49 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 -new file mode 120000 -index 0000000..ddc5361 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50 -@@ -0,0 +1 @@ -+../../cpu/cpu50 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 -new file mode 120000 -index 0000000..41163a9 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51 -@@ -0,0 +1 @@ -+../../cpu/cpu51 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 -new file mode 120000 -index 0000000..be09dc8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52 -@@ -0,0 +1 @@ -+../../cpu/cpu52 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 -new file mode 120000 -index 0000000..470ab22 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53 -@@ -0,0 +1 @@ -+../../cpu/cpu53 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 -new file mode 120000 -index 0000000..5c11dfd ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54 -@@ -0,0 +1 @@ -+../../cpu/cpu54 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 -new file mode 120000 -index 0000000..e858949 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55 -@@ -0,0 +1 @@ -+../../cpu/cpu55 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 -new file mode 120000 -index 0000000..d731cf5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72 -@@ -0,0 +1 @@ -+../../cpu/cpu72 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 -new file mode 120000 -index 0000000..99f1a90 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73 -@@ -0,0 +1 @@ -+../../cpu/cpu73 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 -new file mode 120000 -index 0000000..84a3139 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74 -@@ -0,0 +1 @@ -+../../cpu/cpu74 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 -new file mode 120000 -index 0000000..0693a99 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75 -@@ -0,0 +1 @@ -+../../cpu/cpu75 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 -new file mode 120000 -index 0000000..5ff7021 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76 -@@ -0,0 +1 @@ -+../../cpu/cpu76 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 -new file mode 120000 -index 0000000..05099c6 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77 -@@ -0,0 +1 @@ -+../../cpu/cpu77 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 -new file mode 120000 -index 0000000..20eb9cc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78 -@@ -0,0 +1 @@ -+../../cpu/cpu78 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 -new file mode 120000 -index 0000000..4813a63 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79 -@@ -0,0 +1 @@ -+../../cpu/cpu79 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -index 600841b..ef085b2 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node1/meminfo -@@ -1,28 +1,28 @@ - Node 1 MemTotal: 67108864 kB --Node 1 MemFree: 66225792 kB --Node 1 MemUsed: 883072 kB --Node 1 Active: 247040 kB --Node 1 Inactive: 82752 kB --Node 1 Active(anon): 52800 kB --Node 1 Inactive(anon): 192 kB --Node 1 Active(file): 194240 kB --Node 1 Inactive(file): 82560 kB -+Node 1 MemFree: 66143552 kB -+Node 1 MemUsed: 965312 kB -+Node 1 Active: 125952 kB -+Node 1 Inactive: 255808 kB -+Node 1 Active(anon): 79808 kB -+Node 1 Inactive(anon): 448 kB -+Node 1 Active(file): 46144 kB -+Node 1 Inactive(file): 255360 kB - Node 1 Unevictable: 0 kB - Node 1 Mlocked: 0 kB --Node 1 Dirty: 64 kB -+Node 1 Dirty: 213760 kB - Node 1 Writeback: 0 kB --Node 1 FilePages: 281344 kB --Node 1 Mapped: 19264 kB --Node 1 AnonPages: 49088 kB --Node 1 Shmem: 4352 kB --Node 1 KernelStack: 2960 kB --Node 1 PageTables: 448 kB -+Node 1 FilePages: 310656 kB -+Node 1 Mapped: 27328 kB -+Node 1 AnonPages: 73856 kB -+Node 1 Shmem: 6336 kB -+Node 1 KernelStack: 4624 kB -+Node 1 PageTables: 512 kB - Node 1 NFS_Unstable: 0 kB - Node 1 Bounce: 0 kB - Node 1 WritebackTmp: 0 kB --Node 1 Slab: 106368 kB --Node 1 SReclaimable: 16448 kB --Node 1 SUnreclaim: 89920 kB -+Node 1 Slab: 130688 kB -+Node 1 SReclaimable: 21120 kB -+Node 1 SUnreclaim: 109568 kB - Node 1 AnonHugePages: 0 kB - Node 1 HugePages_Total: 0 - Node 1 HugePages_Free: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 -new file mode 120000 -index 0000000..7692606 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104 -@@ -0,0 +1 @@ -+../../cpu/cpu104 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 -new file mode 120000 -index 0000000..77d25d5 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105 -@@ -0,0 +1 @@ -+../../cpu/cpu105 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 -new file mode 120000 -index 0000000..f8bff26 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106 -@@ -0,0 +1 @@ -+../../cpu/cpu106 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 -new file mode 120000 -index 0000000..d475c15 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107 -@@ -0,0 +1 @@ -+../../cpu/cpu107 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 -new file mode 120000 -index 0000000..4352ab8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108 -@@ -0,0 +1 @@ -+../../cpu/cpu108 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 -new file mode 120000 -index 0000000..c74e8ec ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109 -@@ -0,0 +1 @@ -+../../cpu/cpu109 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 -new file mode 120000 -index 0000000..fb66aa1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110 -@@ -0,0 +1 @@ -+../../cpu/cpu110 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 -new file mode 120000 -index 0000000..b2da00c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111 -@@ -0,0 +1 @@ -+../../cpu/cpu111 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 -new file mode 120000 -index 0000000..e65062a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112 -@@ -0,0 +1 @@ -+../../cpu/cpu112 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 -new file mode 120000 -index 0000000..f8380bf ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113 -@@ -0,0 +1 @@ -+../../cpu/cpu113 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 -new file mode 120000 -index 0000000..4c33e35 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114 -@@ -0,0 +1 @@ -+../../cpu/cpu114 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 -new file mode 120000 -index 0000000..2b4fbce ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115 -@@ -0,0 +1 @@ -+../../cpu/cpu115 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 -new file mode 120000 -index 0000000..7e07a2d ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116 -@@ -0,0 +1 @@ -+../../cpu/cpu116 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 -new file mode 120000 -index 0000000..2d65930 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117 -@@ -0,0 +1 @@ -+../../cpu/cpu117 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 -new file mode 120000 -index 0000000..b09093c ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118 -@@ -0,0 +1 @@ -+../../cpu/cpu118 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 -new file mode 120000 -index 0000000..59a5bf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119 -@@ -0,0 +1 @@ -+../../cpu/cpu119 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -index 78350e1..09e3954 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node16/meminfo -@@ -1,28 +1,28 @@ - Node 16 MemTotal: 67108864 kB --Node 16 MemFree: 66296832 kB --Node 16 MemUsed: 812032 kB --Node 16 Active: 145792 kB --Node 16 Inactive: 131904 kB --Node 16 Active(anon): 36352 kB --Node 16 Inactive(anon): 320 kB --Node 16 Active(file): 109440 kB --Node 16 Inactive(file): 131584 kB -+Node 16 MemFree: 66573952 kB -+Node 16 MemUsed: 534912 kB -+Node 16 Active: 14272 kB -+Node 16 Inactive: 16832 kB -+Node 16 Active(anon): 6272 kB -+Node 16 Inactive(anon): 64 kB -+Node 16 Active(file): 8000 kB -+Node 16 Inactive(file): 16768 kB - Node 16 Unevictable: 0 kB - Node 16 Mlocked: 0 kB --Node 16 Dirty: 48256 kB -+Node 16 Dirty: 0 kB - Node 16 Writeback: 0 kB --Node 16 FilePages: 246720 kB --Node 16 Mapped: 7744 kB --Node 16 AnonPages: 35968 kB --Node 16 Shmem: 704 kB --Node 16 KernelStack: 3232 kB --Node 16 PageTables: 512 kB -+Node 16 FilePages: 26176 kB -+Node 16 Mapped: 384 kB -+Node 16 AnonPages: 4928 kB -+Node 16 Shmem: 1408 kB -+Node 16 KernelStack: 1968 kB -+Node 16 PageTables: 192 kB - Node 16 NFS_Unstable: 0 kB - Node 16 Bounce: 0 kB - Node 16 WritebackTmp: 0 kB --Node 16 Slab: 61760 kB --Node 16 SReclaimable: 28736 kB --Node 16 SUnreclaim: 33024 kB -+Node 16 Slab: 46336 kB -+Node 16 SReclaimable: 2688 kB -+Node 16 SUnreclaim: 43648 kB - Node 16 AnonHugePages: 0 kB - Node 16 HugePages_Total: 0 - Node 16 HugePages_Free: 0 -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 -new file mode 120000 -index 0000000..17a18b1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120 -@@ -0,0 +1 @@ -+../../cpu/cpu120 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 -new file mode 120000 -index 0000000..321bbc2 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121 -@@ -0,0 +1 @@ -+../../cpu/cpu121 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 -new file mode 120000 -index 0000000..e03f5a3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122 -@@ -0,0 +1 @@ -+../../cpu/cpu122 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 -new file mode 120000 -index 0000000..3021e4f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123 -@@ -0,0 +1 @@ -+../../cpu/cpu123 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 -new file mode 120000 -index 0000000..10b32dc ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124 -@@ -0,0 +1 @@ -+../../cpu/cpu124 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 -new file mode 120000 -index 0000000..9e06e6e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125 -@@ -0,0 +1 @@ -+../../cpu/cpu125 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 -new file mode 120000 -index 0000000..2a4708a ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126 -@@ -0,0 +1 @@ -+../../cpu/cpu126 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 -new file mode 120000 -index 0000000..96b5143 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127 -@@ -0,0 +1 @@ -+../../cpu/cpu127 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 -new file mode 120000 -index 0000000..3142217 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128 -@@ -0,0 +1 @@ -+../../cpu/cpu128 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 -new file mode 120000 -index 0000000..dc84401 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129 -@@ -0,0 +1 @@ -+../../cpu/cpu129 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 -new file mode 120000 -index 0000000..59a50b8 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130 -@@ -0,0 +1 @@ -+../../cpu/cpu130 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 -new file mode 120000 -index 0000000..ca1f958 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131 -@@ -0,0 +1 @@ -+../../cpu/cpu131 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 -new file mode 120000 -index 0000000..a1f7ea1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132 -@@ -0,0 +1 @@ -+../../cpu/cpu132 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 -new file mode 120000 -index 0000000..89e453b ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133 -@@ -0,0 +1 @@ -+../../cpu/cpu133 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 -new file mode 120000 -index 0000000..a46c33e ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134 -@@ -0,0 +1 @@ -+../../cpu/cpu134 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 -new file mode 120000 -index 0000000..4efd76f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135 -@@ -0,0 +1 @@ -+../../cpu/cpu135 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 -new file mode 120000 -index 0000000..cfd61b4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136 -@@ -0,0 +1 @@ -+../../cpu/cpu136 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 -new file mode 120000 -index 0000000..6a1ec92 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137 -@@ -0,0 +1 @@ -+../../cpu/cpu137 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 -new file mode 120000 -index 0000000..890aad3 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138 -@@ -0,0 +1 @@ -+../../cpu/cpu138 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 -new file mode 120000 -index 0000000..afb925f ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139 -@@ -0,0 +1 @@ -+../../cpu/cpu139 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 -new file mode 120000 -index 0000000..2faf4c0 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140 -@@ -0,0 +1 @@ -+../../cpu/cpu140 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 -new file mode 120000 -index 0000000..6cf8cf1 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141 -@@ -0,0 +1 @@ -+../../cpu/cpu141 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 -new file mode 120000 -index 0000000..fa73d61 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142 -@@ -0,0 +1 @@ -+../../cpu/cpu142 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 -new file mode 120000 -index 0000000..04dcaa4 ---- /dev/null -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143 -@@ -0,0 +1 @@ -+../../cpu/cpu143 -\ No newline at end of file -diff --git a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -index 3e691f2..1bddfb5 100644 ---- a/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -+++ b/tests/nodeinfodata/linux-deconfigured-cpus/node/node17/meminfo -@@ -1,29 +1,29 @@ - Node 17 MemTotal: 67108864 kB --Node 17 MemFree: 65890688 kB --Node 17 MemUsed: 1218176 kB --Node 17 Active: 250752 kB --Node 17 Inactive: 181184 kB --Node 17 Active(anon): 100544 kB --Node 17 Inactive(anon): 320 kB --Node 17 Active(file): 150208 kB --Node 17 Inactive(file): 180864 kB -+Node 17 MemFree: 66334656 kB -+Node 17 MemUsed: 774208 kB -+Node 17 Active: 15936 kB -+Node 17 Inactive: 12416 kB -+Node 17 Active(anon): 10944 kB -+Node 17 Inactive(anon): 64 kB -+Node 17 Active(file): 4992 kB -+Node 17 Inactive(file): 12352 kB - Node 17 Unevictable: 0 kB - Node 17 Mlocked: 0 kB --Node 17 Dirty: 97856 kB -+Node 17 Dirty: 0 kB - Node 17 Writeback: 0 kB --Node 17 FilePages: 341824 kB --Node 17 Mapped: 2304 kB --Node 17 AnonPages: 100736 kB --Node 17 Shmem: 576 kB --Node 17 KernelStack: 3088 kB --Node 17 PageTables: 768 kB -+Node 17 FilePages: 17600 kB -+Node 17 Mapped: 768 kB -+Node 17 AnonPages: 10752 kB -+Node 17 Shmem: 256 kB -+Node 17 KernelStack: 3808 kB -+Node 17 PageTables: 128 kB - Node 17 NFS_Unstable: 0 kB - Node 17 Bounce: 0 kB - Node 17 WritebackTmp: 0 kB --Node 17 Slab: 61760 kB --Node 17 SReclaimable: 14912 kB --Node 17 SUnreclaim: 46848 kB --Node 17 AnonHugePages: 49152 kB -+Node 17 Slab: 25792 kB -+Node 17 SReclaimable: 3840 kB -+Node 17 SUnreclaim: 21952 kB -+Node 17 AnonHugePages: 0 kB - Node 17 HugePages_Total: 0 - Node 17 HugePages_Free: 0 - Node 17 HugePages_Surp: 0 --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Temporarily-disable-ppc64-cpu-tests.patch b/SOURCES/libvirt-tests-Temporarily-disable-ppc64-cpu-tests.patch deleted file mode 100644 index 81d7e5d..0000000 --- a/SOURCES/libvirt-tests-Temporarily-disable-ppc64-cpu-tests.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 44ca78d0ae968d42803653ef395ce34909f557c6 Mon Sep 17 00:00:00 2001 -Message-Id: <44ca78d0ae968d42803653ef395ce34909f557c6@dist-git> -From: Andrea Bolognani -Date: Tue, 11 Aug 2015 17:16:03 +0200 -Subject: [PATCH] tests: Temporarily disable ppc64 cpu tests - -The upcoming commits will make heavy modifications to the ppc64 -driver, split so that it's easier to review the changes. - -Instead of updating the test cases so that they pass, possibly -only to update them again with the following commit, disable them -for the time being. - -Another commit will update them all in one go once all required -changes are in place. - -(cherry picked from commit 04f5a60d4b3354edb44a3597e574633fc28eb2d4) - -Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1250977 - -Signed-off-by: Andrea Bolognani -Signed-off-by: Jiri Denemark ---- - tests/cputest.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/tests/cputest.c b/tests/cputest.c -index 1e84fd3..4dbccfd 100644 ---- a/tests/cputest.c -+++ b/tests/cputest.c -@@ -501,7 +501,9 @@ static const char *model486[] = { "486" }; - static const char *nomodel[] = { "nomodel" }; - static const char *models[] = { "qemu64", "core2duo", "Nehalem" }; - static const char *haswell[] = { "SandyBridge", "Haswell" }; -+/* XXX temporarily disabled - static const char *ppc_models[] = { "POWER7", "POWER7_v2.1", "POWER7_v2.3", "POWER8_v1.0"}; -+*/ - - static int - mymain(void) -@@ -595,8 +597,10 @@ mymain(void) - DO_TEST_COMPARE("x86", "host-worse", "nehalem-force", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host-SandyBridge", "exact-force-Haswell", VIR_CPU_COMPARE_IDENTICAL); - -+ /* XXX temporarily disabled - DO_TEST_COMPARE("ppc64", "host", "strict", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "exact", VIR_CPU_COMPARE_INCOMPATIBLE); -+ */ - - /* guest updates for migration - * automatically compares host CPU with the result */ -@@ -625,8 +629,11 @@ mymain(void) - DO_TEST_BASELINE("x86", "7", 0, 0); - DO_TEST_BASELINE("x86", "8", 0, 0); - -+ /* XXX temporarily disabled - DO_TEST_BASELINE("ppc64", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("ppc64", "no-vendor", 0, 0); -+ */ -+ - /* CPU features */ - DO_TEST_HASFEATURE("x86", "host", "vmx", YES); - DO_TEST_HASFEATURE("x86", "host", "lm", YES); -@@ -661,8 +668,10 @@ mymain(void) - DO_TEST_GUESTDATA("x86", "host-Haswell-noTSX", "Haswell-noTSX", - NULL, "Haswell-noTSX", 0); - -+ /* XXX temporarily disabled - DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0); - DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", -1); -+ */ - - return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - } --- -2.5.0 - diff --git a/SOURCES/libvirt-tests-Use-qemuProcessPrepareMonitorChr-in-qemuxmlnstest.patch b/SOURCES/libvirt-tests-Use-qemuProcessPrepareMonitorChr-in-qemuxmlnstest.patch deleted file mode 100644 index cbd4929..0000000 --- a/SOURCES/libvirt-tests-Use-qemuProcessPrepareMonitorChr-in-qemuxmlnstest.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 4085e9f2cbf097a62529f0afcc57f20194ac0036 Mon Sep 17 00:00:00 2001 -Message-Id: <4085e9f2cbf097a62529f0afcc57f20194ac0036@dist-git> -From: Martin Kletzander -Date: Mon, 24 Aug 2015 13:04:52 +0200 -Subject: [PATCH] tests: Use qemuProcessPrepareMonitorChr in qemuxmlnstest - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -The output of that function was not tested until now. In order to keep -the paths in /tmp, the test driver config is "fixed" as well. - -Signed-off-by: Martin Kletzander -(cherry picked from commit f1e927c4bfd3da9511fd54bd6070149af04b5ee5) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - .../qemuxmlns-qemu-ns-commandline-ns0.args | 2 +- - .../qemuxmlns-qemu-ns-commandline-ns1.args | 2 +- - .../qemuxmlnsdata/qemuxmlns-qemu-ns-commandline.args | 2 +- - .../qemuxmlns-qemu-ns-domain-commandline-ns0.args | 2 +- - .../qemuxmlns-qemu-ns-domain-commandline.args | 2 +- - tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-ns0.args | 2 +- - tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain.args | 2 +- - tests/qemuxmlnstest.c | 19 +++++++++++++------ - 8 files changed, 20 insertions(+), 13 deletions(-) - -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns0.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns0.args -index ad16f43..dac8651 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns0.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns0.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none ARGUMENT -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns1.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns1.args -index ad16f43..dac8651 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns1.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline-ns1.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none ARGUMENT -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline.args -index ad16f43..dac8651 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-commandline.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none ARGUMENT -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline-ns0.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline-ns0.args -index ad16f43..dac8651 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline-ns0.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline-ns0.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none ARGUMENT -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline.args -index ad16f43..dac8651 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-commandline.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none ARGUMENT -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-ns0.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-ns0.args -index ad16f43..dac8651 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-ns0.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain-ns0.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none ARGUMENT -diff --git a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain.args b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain.args -index 26038a0..ce2bf40 100644 ---- a/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain.args -+++ b/tests/qemuxmlnsdata/qemuxmlns-qemu-ns-domain.args -@@ -1,4 +1,4 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ - /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor \ --unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ -+unix:/tmp/domain-QEMUGuest1/monitor.sock,server,nowait -no-acpi -boot c -usb -hda \ - /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -diff --git a/tests/qemuxmlnstest.c b/tests/qemuxmlnstest.c -index 8eaab8a..a68e762 100644 ---- a/tests/qemuxmlnstest.c -+++ b/tests/qemuxmlnstest.c -@@ -16,6 +16,7 @@ - # include "qemu/qemu_capabilities.h" - # include "qemu/qemu_command.h" - # include "qemu/qemu_domain.h" -+# include "qemu/qemu_process.h" - # include "datatypes.h" - # include "cpu/cpu_map.h" - # include "testutilsqemu.h" -@@ -37,7 +38,7 @@ static int testCompareXMLToArgvFiles(const char *xml, - char *actualargv = NULL; - int ret = -1; - virDomainDefPtr vmdef = NULL; -- virDomainChrSourceDef monitor_chr; -+ virDomainChrSourceDefPtr monitor_chr = NULL; - virConnectPtr conn; - char *log = NULL; - char *emulator = NULL; -@@ -77,10 +78,12 @@ static int testCompareXMLToArgvFiles(const char *xml, - - vmdef->id = -1; - -- memset(&monitor_chr, 0, sizeof(monitor_chr)); -- monitor_chr.type = VIR_DOMAIN_CHR_TYPE_UNIX; -- monitor_chr.data.nix.path = (char *)"/tmp/test-monitor"; -- monitor_chr.data.nix.listen = true; -+ if (VIR_ALLOC(monitor_chr) < 0) -+ goto fail; -+ if (qemuProcessPrepareMonitorChr(driver.config, -+ monitor_chr, -+ vmdef->name) < 0) -+ goto fail; - - virQEMUCapsSetList(extraFlags, - QEMU_CAPS_VNC_COLON, -@@ -104,7 +107,7 @@ static int testCompareXMLToArgvFiles(const char *xml, - goto fail; - - if (!(cmd = qemuBuildCommandLine(conn, &driver, -- vmdef, &monitor_chr, json, extraFlags, -+ vmdef, monitor_chr, json, extraFlags, - migrateFrom, migrateFd, NULL, - VIR_NETDEV_VPORT_PROFILE_OP_NO_OP, - &testCallbacks, false, false, NULL, -@@ -142,6 +145,7 @@ static int testCompareXMLToArgvFiles(const char *xml, - ret = 0; - - fail: -+ virDomainChrSourceDefFree(monitor_chr); - VIR_FREE(log); - VIR_FREE(emulator); - VIR_FREE(actualargv); -@@ -199,6 +203,9 @@ mymain(void) - - if (!(driver.config = virQEMUDriverConfigNew(false))) - return EXIT_FAILURE; -+ VIR_FREE(driver.config->libDir); -+ if (VIR_STRDUP_QUIET(driver.config->libDir, "/tmp") < 0) -+ return EXIT_FAILURE; - if ((driver.caps = testQemuCapsInit()) == NULL) - return EXIT_FAILURE; - if (!(driver.xmlopt = virQEMUDriverCreateXMLConf(&driver))) --- -2.5.1 - diff --git a/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-out-of-order-hotplug.patch b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-out-of-order-hotplug.patch new file mode 100644 index 0000000..cba99b6 --- /dev/null +++ b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-out-of-order-hotplug.patch @@ -0,0 +1,369 @@ +From c1cabe4130eaf51441aa6a3f5b688c2177218195 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:28 -0400 +Subject: [PATCH] tests: cpu-hotplug: Add data for ppc64 out-of-order hotplug + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Test the algorithm that extracts the order in which the vcpu entries +were plugged in on a sample of data created by plugging in vcpus +arbitrarily. + +(cherry picked from commit 1c455c4743796d2c977bfc1e999a233eeef1127f) +--- + ...mumonitorjson-cpuinfo-ppc64-hotplug-4-cpus.json | 221 +++++++++++++++++++++ + ...onitorjson-cpuinfo-ppc64-hotplug-4-hotplug.json | 29 +++ + .../qemumonitorjson-cpuinfo-ppc64-hotplug-4.data | 62 ++++++ + tests/qemumonitorjsontest.c | 1 + + 4 files changed, 313 insertions(+) + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data + +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-cpus.json +new file mode 100644 +index 0000000..bcb6eab +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-cpus.json +@@ -0,0 +1,221 @@ ++{ ++ "return": [ ++ { ++ "arch": "ppc", ++ "current": true, ++ "CPU": 0, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[0]", ++ "halted": false, ++ "thread_id": 21925 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 1, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[1]", ++ "halted": false, ++ "thread_id": 21926 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 2, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[2]", ++ "halted": false, ++ "thread_id": 21927 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 3, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[3]", ++ "halted": false, ++ "thread_id": 21928 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 4, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[4]", ++ "halted": false, ++ "thread_id": 21930 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 5, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[5]", ++ "halted": false, ++ "thread_id": 21931 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 6, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[6]", ++ "halted": false, ++ "thread_id": 21932 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 7, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[7]", ++ "halted": false, ++ "thread_id": 21933 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 8, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[0]", ++ "halted": false, ++ "thread_id": 22741 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 9, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[1]", ++ "halted": false, ++ "thread_id": 22742 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 10, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[2]", ++ "halted": false, ++ "thread_id": 22743 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 11, ++ "nip": -4611686018419474700, ++ "qom_path": "/machine/peripheral/vcpu1/thread[3]", ++ "halted": false, ++ "thread_id": 22744 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 12, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[4]", ++ "halted": false, ++ "thread_id": 22745 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 13, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[5]", ++ "halted": false, ++ "thread_id": 22746 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 14, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[6]", ++ "halted": false, ++ "thread_id": 22747 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 15, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[7]", ++ "halted": false, ++ "thread_id": 22748 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 16, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[0]", ++ "halted": true, ++ "thread_id": 23170 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 17, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[1]", ++ "halted": true, ++ "thread_id": 23171 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 18, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[2]", ++ "halted": true, ++ "thread_id": 23172 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 19, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[3]", ++ "halted": true, ++ "thread_id": 23173 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 20, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[4]", ++ "halted": true, ++ "thread_id": 23174 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 21, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[5]", ++ "halted": true, ++ "thread_id": 23175 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 22, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[6]", ++ "halted": true, ++ "thread_id": 23176 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 23, ++ "nip": 0, ++ "qom_path": "/machine/peripheral/vcpu0/thread[7]", ++ "halted": true, ++ "thread_id": 23177 ++ } ++ ], ++ "id": "libvirt-37" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-hotplug.json +new file mode 100644 +index 0000000..ded2054 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4-hotplug.json +@@ -0,0 +1,29 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 16 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/peripheral/vcpu1", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 8 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/peripheral/vcpu0", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 0 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/unattached/device[1]", ++ "type": "host-spapr-cpu-core" ++ } ++ ], ++ "id": "libvirt-38" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data +new file mode 100644 +index 0000000..22a425d +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-4.data +@@ -0,0 +1,62 @@ ++[vcpu libvirt-id='0'] ++ thread-id='21925' ++ qemu-id='1' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[1]' ++ topology: core='0' vcpus='8' ++[vcpu libvirt-id='1'] ++ thread-id='21926' ++[vcpu libvirt-id='2'] ++ thread-id='21927' ++[vcpu libvirt-id='3'] ++ thread-id='21928' ++[vcpu libvirt-id='4'] ++ thread-id='21930' ++[vcpu libvirt-id='5'] ++ thread-id='21931' ++[vcpu libvirt-id='6'] ++ thread-id='21932' ++[vcpu libvirt-id='7'] ++ thread-id='21933' ++[vcpu libvirt-id='8'] ++ thread-id='23170' ++ qemu-id='3' ++ type='host-spapr-cpu-core' ++ alias='vcpu0' ++ qom_path='/machine/peripheral/vcpu0' ++ topology: core='8' vcpus='8' ++[vcpu libvirt-id='9'] ++ thread-id='23171' ++[vcpu libvirt-id='10'] ++ thread-id='23172' ++[vcpu libvirt-id='11'] ++ thread-id='23173' ++[vcpu libvirt-id='12'] ++ thread-id='23174' ++[vcpu libvirt-id='13'] ++ thread-id='23175' ++[vcpu libvirt-id='14'] ++ thread-id='23176' ++[vcpu libvirt-id='15'] ++ thread-id='23177' ++[vcpu libvirt-id='16'] ++ thread-id='22741' ++ qemu-id='2' ++ type='host-spapr-cpu-core' ++ alias='vcpu1' ++ qom_path='/machine/peripheral/vcpu1' ++ topology: core='16' vcpus='8' ++[vcpu libvirt-id='17'] ++ thread-id='22742' ++[vcpu libvirt-id='18'] ++ thread-id='22743' ++[vcpu libvirt-id='19'] ++ thread-id='22744' ++[vcpu libvirt-id='20'] ++ thread-id='22745' ++[vcpu libvirt-id='21'] ++ thread-id='22746' ++[vcpu libvirt-id='22'] ++ thread-id='22747' ++[vcpu libvirt-id='23'] ++ thread-id='22748' +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 3cb7083..ddcbd78 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -2590,6 +2590,7 @@ mymain(void) + DO_TEST_CPU_INFO("ppc64-basic", 24); + DO_TEST_CPU_INFO("ppc64-hotplug-1", 24); + DO_TEST_CPU_INFO("ppc64-hotplug-2", 24); ++ DO_TEST_CPU_INFO("ppc64-hotplug-4", 24); + + qemuTestDriverFree(&driver); + +-- +2.10.0 + diff --git a/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-platform-including-hotplug.patch b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-platform-including-hotplug.patch new file mode 100644 index 0000000..5c725d4 --- /dev/null +++ b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-platform-including-hotplug.patch @@ -0,0 +1,796 @@ +From 152273b20712529ee9506c5e1307b4703d1b9297 Mon Sep 17 00:00:00 2001 +Message-Id: <152273b20712529ee9506c5e1307b4703d1b9297@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:27 -0400 +Subject: [PATCH] tests: cpu-hotplug: Add data for ppc64 platform including + hotplug + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Power 8 platform's basic hotpluggable unit is a core rather than a +thread for x86_64 family. This introduces most of the complexity of the +matching code and thus needs to be tested. + +The test data contain data captured from in-order cpu hotplug and +unplug operations. + +(cherry picked from commit d1145aad0be156ca04d9745bc1130e148d74eaee) +--- + .../qemumonitorjson-cpuinfo-ppc64-basic-cpus.json | 77 +++++++ + ...emumonitorjson-cpuinfo-ppc64-basic-hotplug.json | 27 +++ + .../qemumonitorjson-cpuinfo-ppc64-basic.data | 40 ++++ + ...mumonitorjson-cpuinfo-ppc64-hotplug-1-cpus.json | 149 ++++++++++++++ + ...onitorjson-cpuinfo-ppc64-hotplug-1-hotplug.json | 28 +++ + .../qemumonitorjson-cpuinfo-ppc64-hotplug-1.data | 51 +++++ + ...mumonitorjson-cpuinfo-ppc64-hotplug-2-cpus.json | 221 +++++++++++++++++++++ + ...onitorjson-cpuinfo-ppc64-hotplug-2-hotplug.json | 29 +++ + .../qemumonitorjson-cpuinfo-ppc64-hotplug-2.data | 62 ++++++ + tests/qemumonitorjsontest.c | 4 + + 10 files changed, 688 insertions(+) + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data + +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-cpus.json +new file mode 100644 +index 0000000..27a3d8b +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-cpus.json +@@ -0,0 +1,77 @@ ++{ ++ "return": [ ++ { ++ "arch": "ppc", ++ "current": true, ++ "CPU": 0, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[0]", ++ "halted": false, ++ "thread_id": 21925 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 1, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[1]", ++ "halted": false, ++ "thread_id": 21926 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 2, ++ "nip": -4611686018422360608, ++ "qom_path": "/machine/unattached/device[1]/thread[2]", ++ "halted": false, ++ "thread_id": 21927 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 3, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[3]", ++ "halted": false, ++ "thread_id": 21928 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 4, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[4]", ++ "halted": false, ++ "thread_id": 21930 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 5, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[5]", ++ "halted": false, ++ "thread_id": 21931 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 6, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[6]", ++ "halted": false, ++ "thread_id": 21932 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 7, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[7]", ++ "halted": false, ++ "thread_id": 21933 ++ } ++ ], ++ "id": "libvirt-12" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-hotplug.json +new file mode 100644 +index 0000000..513317b +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic-hotplug.json +@@ -0,0 +1,27 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 16 ++ }, ++ "vcpus-count": 8, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 8 ++ }, ++ "vcpus-count": 8, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 0 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/unattached/device[1]", ++ "type": "host-spapr-cpu-core" ++ } ++ ], ++ "id": "libvirt-11" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data +new file mode 100644 +index 0000000..9fc8148 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-basic.data +@@ -0,0 +1,40 @@ ++[vcpu libvirt-id='0'] ++ thread-id='21925' ++ qemu-id='1' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[1]' ++ topology: core='0' vcpus='8' ++[vcpu libvirt-id='1'] ++ thread-id='21926' ++[vcpu libvirt-id='2'] ++ thread-id='21927' ++[vcpu libvirt-id='3'] ++ thread-id='21928' ++[vcpu libvirt-id='4'] ++ thread-id='21930' ++[vcpu libvirt-id='5'] ++ thread-id='21931' ++[vcpu libvirt-id='6'] ++ thread-id='21932' ++[vcpu libvirt-id='7'] ++ thread-id='21933' ++[vcpu libvirt-id='8'] ++ type='host-spapr-cpu-core' ++ topology: core='8' vcpus='8' ++[vcpu libvirt-id='9'] ++[vcpu libvirt-id='10'] ++[vcpu libvirt-id='11'] ++[vcpu libvirt-id='12'] ++[vcpu libvirt-id='13'] ++[vcpu libvirt-id='14'] ++[vcpu libvirt-id='15'] ++[vcpu libvirt-id='16'] ++ type='host-spapr-cpu-core' ++ topology: core='16' vcpus='8' ++[vcpu libvirt-id='17'] ++[vcpu libvirt-id='18'] ++[vcpu libvirt-id='19'] ++[vcpu libvirt-id='20'] ++[vcpu libvirt-id='21'] ++[vcpu libvirt-id='22'] ++[vcpu libvirt-id='23'] +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-cpus.json +new file mode 100644 +index 0000000..7771cbc +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-cpus.json +@@ -0,0 +1,149 @@ ++{ ++ "return": [ ++ { ++ "arch": "ppc", ++ "current": true, ++ "CPU": 0, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[0]", ++ "halted": false, ++ "thread_id": 21925 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 1, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[1]", ++ "halted": false, ++ "thread_id": 21926 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 2, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[2]", ++ "halted": false, ++ "thread_id": 21927 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 3, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[3]", ++ "halted": false, ++ "thread_id": 21928 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 4, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[4]", ++ "halted": false, ++ "thread_id": 21930 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 5, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[5]", ++ "halted": false, ++ "thread_id": 21931 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 6, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[6]", ++ "halted": false, ++ "thread_id": 21932 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 7, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[7]", ++ "halted": false, ++ "thread_id": 21933 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 8, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[0]", ++ "halted": false, ++ "thread_id": 22131 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 9, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[1]", ++ "halted": false, ++ "thread_id": 22132 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 10, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[2]", ++ "halted": false, ++ "thread_id": 22133 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 11, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[3]", ++ "halted": false, ++ "thread_id": 22134 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 12, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[4]", ++ "halted": false, ++ "thread_id": 22135 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 13, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[5]", ++ "halted": false, ++ "thread_id": 22136 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 14, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[6]", ++ "halted": false, ++ "thread_id": 22137 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 15, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[7]", ++ "halted": false, ++ "thread_id": 22138 ++ } ++ ], ++ "id": "libvirt-14" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-hotplug.json +new file mode 100644 +index 0000000..e7594c3 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1-hotplug.json +@@ -0,0 +1,28 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 16 ++ }, ++ "vcpus-count": 8, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 8 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/peripheral/vcpu0", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 0 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/unattached/device[1]", ++ "type": "host-spapr-cpu-core" ++ } ++ ], ++ "id": "libvirt-15" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data +new file mode 100644 +index 0000000..b0139b5 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-1.data +@@ -0,0 +1,51 @@ ++[vcpu libvirt-id='0'] ++ thread-id='21925' ++ qemu-id='1' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[1]' ++ topology: core='0' vcpus='8' ++[vcpu libvirt-id='1'] ++ thread-id='21926' ++[vcpu libvirt-id='2'] ++ thread-id='21927' ++[vcpu libvirt-id='3'] ++ thread-id='21928' ++[vcpu libvirt-id='4'] ++ thread-id='21930' ++[vcpu libvirt-id='5'] ++ thread-id='21931' ++[vcpu libvirt-id='6'] ++ thread-id='21932' ++[vcpu libvirt-id='7'] ++ thread-id='21933' ++[vcpu libvirt-id='8'] ++ thread-id='22131' ++ qemu-id='2' ++ type='host-spapr-cpu-core' ++ alias='vcpu0' ++ qom_path='/machine/peripheral/vcpu0' ++ topology: core='8' vcpus='8' ++[vcpu libvirt-id='9'] ++ thread-id='22132' ++[vcpu libvirt-id='10'] ++ thread-id='22133' ++[vcpu libvirt-id='11'] ++ thread-id='22134' ++[vcpu libvirt-id='12'] ++ thread-id='22135' ++[vcpu libvirt-id='13'] ++ thread-id='22136' ++[vcpu libvirt-id='14'] ++ thread-id='22137' ++[vcpu libvirt-id='15'] ++ thread-id='22138' ++[vcpu libvirt-id='16'] ++ type='host-spapr-cpu-core' ++ topology: core='16' vcpus='8' ++[vcpu libvirt-id='17'] ++[vcpu libvirt-id='18'] ++[vcpu libvirt-id='19'] ++[vcpu libvirt-id='20'] ++[vcpu libvirt-id='21'] ++[vcpu libvirt-id='22'] ++[vcpu libvirt-id='23'] +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-cpus.json +new file mode 100644 +index 0000000..b377b6a +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-cpus.json +@@ -0,0 +1,221 @@ ++{ ++ "return": [ ++ { ++ "arch": "ppc", ++ "current": true, ++ "CPU": 0, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[0]", ++ "halted": false, ++ "thread_id": 21925 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 1, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[1]", ++ "halted": false, ++ "thread_id": 21926 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 2, ++ "nip": -4611686018422360576, ++ "qom_path": "/machine/unattached/device[1]/thread[2]", ++ "halted": false, ++ "thread_id": 21927 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 3, ++ "nip": -4611686018422360596, ++ "qom_path": "/machine/unattached/device[1]/thread[3]", ++ "halted": false, ++ "thread_id": 21928 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 4, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[4]", ++ "halted": false, ++ "thread_id": 21930 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 5, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[5]", ++ "halted": false, ++ "thread_id": 21931 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 6, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/unattached/device[1]/thread[6]", ++ "halted": false, ++ "thread_id": 21932 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 7, ++ "nip": -4611686018422360596, ++ "qom_path": "/machine/unattached/device[1]/thread[7]", ++ "halted": false, ++ "thread_id": 21933 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 8, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[0]", ++ "halted": false, ++ "thread_id": 22131 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 9, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[1]", ++ "halted": false, ++ "thread_id": 22132 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 10, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[2]", ++ "halted": false, ++ "thread_id": 22133 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 11, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[3]", ++ "halted": false, ++ "thread_id": 22134 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 12, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[4]", ++ "halted": false, ++ "thread_id": 22135 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 13, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[5]", ++ "halted": false, ++ "thread_id": 22136 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 14, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[6]", ++ "halted": false, ++ "thread_id": 22137 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 15, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu0/thread[7]", ++ "halted": false, ++ "thread_id": 22138 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 16, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[0]", ++ "halted": false, ++ "thread_id": 22223 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 17, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[1]", ++ "halted": false, ++ "thread_id": 22224 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 18, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[2]", ++ "halted": false, ++ "thread_id": 22225 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 19, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[3]", ++ "halted": false, ++ "thread_id": 22226 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 20, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[4]", ++ "halted": false, ++ "thread_id": 22227 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 21, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[5]", ++ "halted": false, ++ "thread_id": 22228 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 22, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[6]", ++ "halted": false, ++ "thread_id": 22229 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 23, ++ "nip": -4611686018426772172, ++ "qom_path": "/machine/peripheral/vcpu1/thread[7]", ++ "halted": false, ++ "thread_id": 22230 ++ } ++ ], ++ "id": "libvirt-17" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-hotplug.json +new file mode 100644 +index 0000000..7027531 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2-hotplug.json +@@ -0,0 +1,29 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 16 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/peripheral/vcpu1", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 8 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/peripheral/vcpu0", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 0 ++ }, ++ "vcpus-count": 8, ++ "qom-path": "/machine/unattached/device[1]", ++ "type": "host-spapr-cpu-core" ++ } ++ ], ++ "id": "libvirt-18" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data +new file mode 100644 +index 0000000..ea4b099 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-hotplug-2.data +@@ -0,0 +1,62 @@ ++[vcpu libvirt-id='0'] ++ thread-id='21925' ++ qemu-id='1' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[1]' ++ topology: core='0' vcpus='8' ++[vcpu libvirt-id='1'] ++ thread-id='21926' ++[vcpu libvirt-id='2'] ++ thread-id='21927' ++[vcpu libvirt-id='3'] ++ thread-id='21928' ++[vcpu libvirt-id='4'] ++ thread-id='21930' ++[vcpu libvirt-id='5'] ++ thread-id='21931' ++[vcpu libvirt-id='6'] ++ thread-id='21932' ++[vcpu libvirt-id='7'] ++ thread-id='21933' ++[vcpu libvirt-id='8'] ++ thread-id='22131' ++ qemu-id='2' ++ type='host-spapr-cpu-core' ++ alias='vcpu0' ++ qom_path='/machine/peripheral/vcpu0' ++ topology: core='8' vcpus='8' ++[vcpu libvirt-id='9'] ++ thread-id='22132' ++[vcpu libvirt-id='10'] ++ thread-id='22133' ++[vcpu libvirt-id='11'] ++ thread-id='22134' ++[vcpu libvirt-id='12'] ++ thread-id='22135' ++[vcpu libvirt-id='13'] ++ thread-id='22136' ++[vcpu libvirt-id='14'] ++ thread-id='22137' ++[vcpu libvirt-id='15'] ++ thread-id='22138' ++[vcpu libvirt-id='16'] ++ thread-id='22223' ++ qemu-id='3' ++ type='host-spapr-cpu-core' ++ alias='vcpu1' ++ qom_path='/machine/peripheral/vcpu1' ++ topology: core='16' vcpus='8' ++[vcpu libvirt-id='17'] ++ thread-id='22224' ++[vcpu libvirt-id='18'] ++ thread-id='22225' ++[vcpu libvirt-id='19'] ++ thread-id='22226' ++[vcpu libvirt-id='20'] ++ thread-id='22227' ++[vcpu libvirt-id='21'] ++ thread-id='22228' ++[vcpu libvirt-id='22'] ++ thread-id='22229' ++[vcpu libvirt-id='23'] ++ thread-id='22230' +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 3d96397..3cb7083 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -2587,6 +2587,10 @@ mymain(void) + DO_TEST_CPU_INFO("x86-basic-pluggable", 8); + DO_TEST_CPU_INFO("x86-full", 11); + ++ DO_TEST_CPU_INFO("ppc64-basic", 24); ++ DO_TEST_CPU_INFO("ppc64-hotplug-1", 24); ++ DO_TEST_CPU_INFO("ppc64-hotplug-2", 24); ++ + qemuTestDriverFree(&driver); + + return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +-- +2.10.0 + diff --git a/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-without-threads-enabled.patch b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-without-threads-enabled.patch new file mode 100644 index 0000000..6269554 --- /dev/null +++ b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-ppc64-without-threads-enabled.patch @@ -0,0 +1,330 @@ +From 577c3bb46c94384f4d5a5c8ae390cf52e2eae838 Mon Sep 17 00:00:00 2001 +Message-Id: <577c3bb46c94384f4d5a5c8ae390cf52e2eae838@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:29 -0400 +Subject: [PATCH] tests: cpu-hotplug: Add data for ppc64 without threads + enabled + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +The reported data is unusual so add it to the test suite. + +(cherry picked from commit 04fce1d496a76fd8c422b4ee7021eba3f248a246) +--- + ...umonitorjson-cpuinfo-ppc64-no-threads-cpus.json | 77 +++++++++++++ + ...nitorjson-cpuinfo-ppc64-no-threads-hotplug.json | 125 +++++++++++++++++++++ + .../qemumonitorjson-cpuinfo-ppc64-no-threads.data | 72 ++++++++++++ + tests/qemumonitorjsontest.c | 1 + + 4 files changed, 275 insertions(+) + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data + +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-cpus.json +new file mode 100644 +index 0000000..31a3905 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-cpus.json +@@ -0,0 +1,77 @@ ++{ ++ "return": [ ++ { ++ "arch": "ppc", ++ "current": true, ++ "CPU": 0, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[1]/thread[0]", ++ "halted": false, ++ "thread_id": 35232 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 1, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[2]/thread[0]", ++ "halted": false, ++ "thread_id": 35233 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 2, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[3]/thread[0]", ++ "halted": false, ++ "thread_id": 35234 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 3, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[4]/thread[0]", ++ "halted": false, ++ "thread_id": 35235 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 4, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[5]/thread[0]", ++ "halted": false, ++ "thread_id": 35236 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 5, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[6]/thread[0]", ++ "halted": false, ++ "thread_id": 35237 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 6, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[7]/thread[0]", ++ "halted": false, ++ "thread_id": 35238 ++ }, ++ { ++ "arch": "ppc", ++ "current": false, ++ "CPU": 7, ++ "nip": -4611686018426772876, ++ "qom_path": "/machine/unattached/device[8]/thread[0]", ++ "halted": false, ++ "thread_id": 35239 ++ } ++ ], ++ "id": "libvirt-11" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-hotplug.json +new file mode 100644 +index 0000000..30785a9 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads-hotplug.json +@@ -0,0 +1,125 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 120 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 112 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 104 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 96 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 88 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 80 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 72 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 64 ++ }, ++ "vcpus-count": 1, ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 56 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[8]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 48 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[7]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 40 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[6]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 32 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[5]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 24 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[4]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 16 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[3]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 8 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[2]", ++ "type": "host-spapr-cpu-core" ++ }, ++ { ++ "props": { ++ "core-id": 0 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[1]", ++ "type": "host-spapr-cpu-core" ++ } ++ ], ++ "id": "libvirt-12" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data +new file mode 100644 +index 0000000..d7ab77b +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-ppc64-no-threads.data +@@ -0,0 +1,72 @@ ++[vcpu libvirt-id='0'] ++ thread-id='35232' ++ qemu-id='1' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[1]' ++ topology: core='0' vcpus='1' ++[vcpu libvirt-id='1'] ++ thread-id='35233' ++ qemu-id='2' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[2]' ++ topology: core='8' vcpus='1' ++[vcpu libvirt-id='2'] ++ thread-id='35234' ++ qemu-id='3' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[3]' ++ topology: core='16' vcpus='1' ++[vcpu libvirt-id='3'] ++ thread-id='35235' ++ qemu-id='4' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[4]' ++ topology: core='24' vcpus='1' ++[vcpu libvirt-id='4'] ++ thread-id='35236' ++ qemu-id='5' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[5]' ++ topology: core='32' vcpus='1' ++[vcpu libvirt-id='5'] ++ thread-id='35237' ++ qemu-id='6' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[6]' ++ topology: core='40' vcpus='1' ++[vcpu libvirt-id='6'] ++ thread-id='35238' ++ qemu-id='7' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[7]' ++ topology: core='48' vcpus='1' ++[vcpu libvirt-id='7'] ++ thread-id='35239' ++ qemu-id='8' ++ type='host-spapr-cpu-core' ++ qom_path='/machine/unattached/device[8]' ++ topology: core='56' vcpus='1' ++[vcpu libvirt-id='8'] ++ type='host-spapr-cpu-core' ++ topology: core='64' vcpus='1' ++[vcpu libvirt-id='9'] ++ type='host-spapr-cpu-core' ++ topology: core='72' vcpus='1' ++[vcpu libvirt-id='10'] ++ type='host-spapr-cpu-core' ++ topology: core='80' vcpus='1' ++[vcpu libvirt-id='11'] ++ type='host-spapr-cpu-core' ++ topology: core='88' vcpus='1' ++[vcpu libvirt-id='12'] ++ type='host-spapr-cpu-core' ++ topology: core='96' vcpus='1' ++[vcpu libvirt-id='13'] ++ type='host-spapr-cpu-core' ++ topology: core='104' vcpus='1' ++[vcpu libvirt-id='14'] ++ type='host-spapr-cpu-core' ++ topology: core='112' vcpus='1' ++[vcpu libvirt-id='15'] ++ type='host-spapr-cpu-core' ++ topology: core='120' vcpus='1' +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index ddcbd78..0410630 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -2591,6 +2591,7 @@ mymain(void) + DO_TEST_CPU_INFO("ppc64-hotplug-1", 24); + DO_TEST_CPU_INFO("ppc64-hotplug-2", 24); + DO_TEST_CPU_INFO("ppc64-hotplug-4", 24); ++ DO_TEST_CPU_INFO("ppc64-no-threads", 16); + + qemuTestDriverFree(&driver); + +-- +2.10.0 + diff --git a/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-x86-hotplug-with-11-vcpus.patch b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-x86-hotplug-with-11-vcpus.patch new file mode 100644 index 0000000..db6a28a --- /dev/null +++ b/SOURCES/libvirt-tests-cpu-hotplug-Add-data-for-x86-hotplug-with-11-vcpus.patch @@ -0,0 +1,352 @@ +From ee7dbe155f527b43799816c324de447184f7de7e Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:26 -0400 +Subject: [PATCH] tests: cpu-hotplug: Add data for x86 hotplug with 11+ vcpus + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +During review it was reported that adding at least 11 vcpus creates a +collision of prefixes in the monitor matching algorithm. Add a test case +to verify that the problem won't happen. + +(cherry picked from commit 22e3bb332e1e035b5905686936427ef93a7b834f) +--- + .../qemumonitorjson-cpuinfo-x86-full-cpus.json | 104 +++++++++++++++++++ + .../qemumonitorjson-cpuinfo-x86-full-hotplug.json | 115 +++++++++++++++++++++ + .../qemumonitorjson-cpuinfo-x86-full.data | 76 ++++++++++++++ + tests/qemumonitorjsontest.c | 1 + + 4 files changed, 296 insertions(+) + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-cpus.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-hotplug.json + create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data + +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-cpus.json +new file mode 100644 +index 0000000..16f5cc4 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-cpus.json +@@ -0,0 +1,104 @@ ++{ ++ "return": [ ++ { ++ "arch": "x86", ++ "current": true, ++ "CPU": 0, ++ "qom_path": "/machine/unattached/device[0]", ++ "pc": 1042686, ++ "halted": false, ++ "thread_id": 895040 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 1, ++ "qom_path": "/machine/peripheral/vcpu1", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895056 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 2, ++ "qom_path": "/machine/peripheral/vcpu2", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895057 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 3, ++ "qom_path": "/machine/peripheral/vcpu3", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895058 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 4, ++ "qom_path": "/machine/peripheral/vcpu4", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895059 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 5, ++ "qom_path": "/machine/peripheral/vcpu5", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895060 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 6, ++ "qom_path": "/machine/peripheral/vcpu6", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895061 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 7, ++ "qom_path": "/machine/peripheral/vcpu7", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895062 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 8, ++ "qom_path": "/machine/peripheral/vcpu8", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895063 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 9, ++ "qom_path": "/machine/peripheral/vcpu9", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895064 ++ }, ++ { ++ "arch": "x86", ++ "current": false, ++ "CPU": 10, ++ "qom_path": "/machine/peripheral/vcpu10", ++ "pc": 4294967280, ++ "halted": false, ++ "thread_id": 895065 ++ } ++ ], ++ "id": "libvirt-52" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-hotplug.json +new file mode 100644 +index 0000000..aff5aa3 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-hotplug.json +@@ -0,0 +1,115 @@ ++{ ++ "return": [ ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 10 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu10", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 9 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu9", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 8 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu8", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 7 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu7", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 6 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu6", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 5 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu5", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 4 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu4", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 3 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu3", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 2 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu2", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 1 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/peripheral/vcpu1", ++ "type": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "props": { ++ "core-id": 0, ++ "thread-id": 0, ++ "socket-id": 0 ++ }, ++ "vcpus-count": 1, ++ "qom-path": "/machine/unattached/device[0]", ++ "type": "Broadwell-x86_64-cpu" ++ } ++ ], ++ "id": "libvirt-51" ++} +diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data +new file mode 100644 +index 0000000..a6c1069 +--- /dev/null ++++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full.data +@@ -0,0 +1,76 @@ ++[vcpu libvirt-id='0'] ++ thread-id='895040' ++ qemu-id='1' ++ type='Broadwell-x86_64-cpu' ++ qom_path='/machine/unattached/device[0]' ++ topology: socket='0' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='1'] ++ thread-id='895056' ++ qemu-id='2' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu1' ++ qom_path='/machine/peripheral/vcpu1' ++ topology: socket='1' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='2'] ++ thread-id='895057' ++ qemu-id='3' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu2' ++ qom_path='/machine/peripheral/vcpu2' ++ topology: socket='2' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='3'] ++ thread-id='895058' ++ qemu-id='4' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu3' ++ qom_path='/machine/peripheral/vcpu3' ++ topology: socket='3' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='4'] ++ thread-id='895059' ++ qemu-id='5' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu4' ++ qom_path='/machine/peripheral/vcpu4' ++ topology: socket='4' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='5'] ++ thread-id='895060' ++ qemu-id='6' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu5' ++ qom_path='/machine/peripheral/vcpu5' ++ topology: socket='5' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='6'] ++ thread-id='895061' ++ qemu-id='7' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu6' ++ qom_path='/machine/peripheral/vcpu6' ++ topology: socket='6' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='7'] ++ thread-id='895062' ++ qemu-id='8' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu7' ++ qom_path='/machine/peripheral/vcpu7' ++ topology: socket='7' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='8'] ++ thread-id='895063' ++ qemu-id='9' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu8' ++ qom_path='/machine/peripheral/vcpu8' ++ topology: socket='8' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='9'] ++ thread-id='895064' ++ qemu-id='10' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu9' ++ qom_path='/machine/peripheral/vcpu9' ++ topology: socket='9' core='0' thread='0' vcpus='1' ++[vcpu libvirt-id='10'] ++ thread-id='895065' ++ qemu-id='11' ++ type='Broadwell-x86_64-cpu' ++ alias='vcpu10' ++ qom_path='/machine/peripheral/vcpu10' ++ topology: socket='10' core='0' thread='0' vcpus='1' +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 22b4ccc..3d96397 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/tests/qemumonitorjsontest.c +@@ -2585,6 +2585,7 @@ mymain(void) + DO_TEST_CPU_DATA("ecx"); + + DO_TEST_CPU_INFO("x86-basic-pluggable", 8); ++ DO_TEST_CPU_INFO("x86-full", 11); + + qemuTestDriverFree(&driver); + +-- +2.10.0 + diff --git a/SOURCES/libvirt-tests-qemucapabilities-Add-data-for-qemu-2.7.0.patch b/SOURCES/libvirt-tests-qemucapabilities-Add-data-for-qemu-2.7.0.patch new file mode 100644 index 0000000..fc52980 --- /dev/null +++ b/SOURCES/libvirt-tests-qemucapabilities-Add-data-for-qemu-2.7.0.patch @@ -0,0 +1,5272 @@ +From 6582a040fb7863eef46ebcbb499009231e6d56e5 Mon Sep 17 00:00:00 2001 +Message-Id: <6582a040fb7863eef46ebcbb499009231e6d56e5@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:11 -0400 +Subject: [PATCH] tests: qemucapabilities: Add data for qemu 2.7.0 + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +As of (v2.7.0-rc1-52-g42e0d60) + +(cherry picked from commit 2cda2628db69a5eb956dfe27d0f965fb35990381) + + Changes: qemucapabilitiesdata/caps_2.7.0.x86_64.xml: 'display' + capabiltity not backported. +--- + .../qemucapabilitiesdata/caps_2.7.0.x86_64.replies | 4968 ++++++++++++++++++++ + tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 254 + + tests/qemucapabilitiestest.c | 1 + + 3 files changed, 5223 insertions(+) + create mode 100644 tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies + create mode 100644 tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml + +diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies +new file mode 100644 +index 0000000..7986dae +--- /dev/null ++++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies +@@ -0,0 +1,4968 @@ ++{ ++ "QMP": { ++ "version": { ++ "qemu": { ++ "micro": 91, ++ "minor": 6, ++ "major": 2 ++ }, ++ "package": " (v2.7.0-rc1-52-g42e0d60)" ++ }, ++ "capabilities": [ ++ ] ++ } ++} ++ ++{ ++ "return": { ++ }, ++ "id": "libvirt-1" ++} ++ ++{ ++ "return": { ++ "qemu": { ++ "micro": 91, ++ "minor": 6, ++ "major": 2 ++ }, ++ "package": " (v2.7.0-rc1-52-g42e0d60)" ++ }, ++ "id": "libvirt-2" ++} ++ ++{ ++ "return": { ++ "arch": "x86_64" ++ }, ++ "id": "libvirt-3" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "query-hotpluggable-cpus" ++ }, ++ { ++ "name": "query-rocker-of-dpa-groups" ++ }, ++ { ++ "name": "query-rocker-of-dpa-flows" ++ }, ++ { ++ "name": "query-rocker-ports" ++ }, ++ { ++ "name": "query-rocker" ++ }, ++ { ++ "name": "block-set-write-threshold" ++ }, ++ { ++ "name": "input-send-event" ++ }, ++ { ++ "name": "trace-event-set-state" ++ }, ++ { ++ "name": "trace-event-get-state" ++ }, ++ { ++ "name": "rtc-reset-reinjection" ++ }, ++ { ++ "name": "query-acpi-ospm-status" ++ }, ++ { ++ "name": "query-memory-devices" ++ }, ++ { ++ "name": "query-memdev" ++ }, ++ { ++ "name": "blockdev-change-medium" ++ }, ++ { ++ "name": "query-named-block-nodes" ++ }, ++ { ++ "name": "x-blockdev-change" ++ }, ++ { ++ "name": "x-blockdev-insert-medium" ++ }, ++ { ++ "name": "x-blockdev-remove-medium" ++ }, ++ { ++ "name": "blockdev-close-tray" ++ }, ++ { ++ "name": "blockdev-open-tray" ++ }, ++ { ++ "name": "x-blockdev-del" ++ }, ++ { ++ "name": "blockdev-add" ++ }, ++ { ++ "name": "query-rx-filter" ++ }, ++ { ++ "name": "chardev-remove" ++ }, ++ { ++ "name": "chardev-add" ++ }, ++ { ++ "name": "query-tpm-types" ++ }, ++ { ++ "name": "query-tpm-models" ++ }, ++ { ++ "name": "query-tpm" ++ }, ++ { ++ "name": "query-target" ++ }, ++ { ++ "name": "query-cpu-definitions" ++ }, ++ { ++ "name": "query-machines" ++ }, ++ { ++ "name": "device-list-properties" ++ }, ++ { ++ "name": "qom-list-types" ++ }, ++ { ++ "name": "change-vnc-password" ++ }, ++ { ++ "name": "nbd-server-stop" ++ }, ++ { ++ "name": "nbd-server-add" ++ }, ++ { ++ "name": "nbd-server-start" ++ }, ++ { ++ "name": "qom-get" ++ }, ++ { ++ "name": "qom-set" ++ }, ++ { ++ "name": "qom-list" ++ }, ++ { ++ "name": "query-block-jobs" ++ }, ++ { ++ "name": "query-balloon" ++ }, ++ { ++ "name": "query-migrate-parameters" ++ }, ++ { ++ "name": "migrate-set-parameters" ++ }, ++ { ++ "name": "query-migrate-capabilities" ++ }, ++ { ++ "name": "migrate-set-capabilities" ++ }, ++ { ++ "name": "query-migrate" ++ }, ++ { ++ "name": "query-command-line-options" ++ }, ++ { ++ "name": "query-uuid" ++ }, ++ { ++ "name": "query-name" ++ }, ++ { ++ "name": "query-spice" ++ }, ++ { ++ "name": "query-vnc-servers" ++ }, ++ { ++ "name": "query-vnc" ++ }, ++ { ++ "name": "query-mice" ++ }, ++ { ++ "name": "query-status" ++ }, ++ { ++ "name": "query-kvm" ++ }, ++ { ++ "name": "query-pci" ++ }, ++ { ++ "name": "query-iothreads" ++ }, ++ { ++ "name": "query-cpus" ++ }, ++ { ++ "name": "query-blockstats" ++ }, ++ { ++ "name": "query-block" ++ }, ++ { ++ "name": "query-chardev-backends" ++ }, ++ { ++ "name": "query-chardev" ++ }, ++ { ++ "name": "query-qmp-schema" ++ }, ++ { ++ "name": "query-events" ++ }, ++ { ++ "name": "query-commands" ++ }, ++ { ++ "name": "query-version" ++ }, ++ { ++ "name": "human-monitor-command" ++ }, ++ { ++ "name": "qmp_capabilities" ++ }, ++ { ++ "name": "add_client" ++ }, ++ { ++ "name": "expire_password" ++ }, ++ { ++ "name": "set_password" ++ }, ++ { ++ "name": "block_set_io_throttle" ++ }, ++ { ++ "name": "block_passwd" ++ }, ++ { ++ "name": "query-fdsets" ++ }, ++ { ++ "name": "remove-fd" ++ }, ++ { ++ "name": "add-fd" ++ }, ++ { ++ "name": "closefd" ++ }, ++ { ++ "name": "getfd" ++ }, ++ { ++ "name": "set_link" ++ }, ++ { ++ "name": "balloon" ++ }, ++ { ++ "name": "change-backing-file" ++ }, ++ { ++ "name": "blockdev-mirror" ++ }, ++ { ++ "name": "drive-mirror" ++ }, ++ { ++ "name": "blockdev-snapshot-delete-internal-sync" ++ }, ++ { ++ "name": "blockdev-snapshot-internal-sync" ++ }, ++ { ++ "name": "blockdev-snapshot" ++ }, ++ { ++ "name": "blockdev-snapshot-sync" ++ }, ++ { ++ "name": "block-dirty-bitmap-clear" ++ }, ++ { ++ "name": "block-dirty-bitmap-remove" ++ }, ++ { ++ "name": "block-dirty-bitmap-add" ++ }, ++ { ++ "name": "transaction" ++ }, ++ { ++ "name": "block-job-complete" ++ }, ++ { ++ "name": "block-job-resume" ++ }, ++ { ++ "name": "block-job-pause" ++ }, ++ { ++ "name": "block-job-cancel" ++ }, ++ { ++ "name": "block-job-set-speed" ++ }, ++ { ++ "name": "blockdev-backup" ++ }, ++ { ++ "name": "drive-backup" ++ }, ++ { ++ "name": "block-commit" ++ }, ++ { ++ "name": "block-stream" ++ }, ++ { ++ "name": "block_resize" ++ }, ++ { ++ "name": "object-del" ++ }, ++ { ++ "name": "object-add" ++ }, ++ { ++ "name": "netdev_del" ++ }, ++ { ++ "name": "netdev_add" ++ }, ++ { ++ "name": "query-dump" ++ }, ++ { ++ "name": "query-dump-guest-memory-capability" ++ }, ++ { ++ "name": "dump-guest-memory" ++ }, ++ { ++ "name": "client_migrate_info" ++ }, ++ { ++ "name": "migrate_set_downtime" ++ }, ++ { ++ "name": "migrate_set_speed" ++ }, ++ { ++ "name": "query-migrate-cache-size" ++ }, ++ { ++ "name": "migrate-start-postcopy" ++ }, ++ { ++ "name": "migrate-set-cache-size" ++ }, ++ { ++ "name": "migrate-incoming" ++ }, ++ { ++ "name": "migrate_cancel" ++ }, ++ { ++ "name": "migrate" ++ }, ++ { ++ "name": "xen-set-global-dirty-log" ++ }, ++ { ++ "name": "xen-load-devices-state" ++ }, ++ { ++ "name": "xen-save-devices-state" ++ }, ++ { ++ "name": "ringbuf-read" ++ }, ++ { ++ "name": "ringbuf-write" ++ }, ++ { ++ "name": "inject-nmi" ++ }, ++ { ++ "name": "pmemsave" ++ }, ++ { ++ "name": "memsave" ++ }, ++ { ++ "name": "cpu-add" ++ }, ++ { ++ "name": "cpu" ++ }, ++ { ++ "name": "send-key" ++ }, ++ { ++ "name": "device_del" ++ }, ++ { ++ "name": "device_add" ++ }, ++ { ++ "name": "system_powerdown" ++ }, ++ { ++ "name": "system_reset" ++ }, ++ { ++ "name": "system_wakeup" ++ }, ++ { ++ "name": "cont" ++ }, ++ { ++ "name": "stop" ++ }, ++ { ++ "name": "screendump" ++ }, ++ { ++ "name": "change" ++ }, ++ { ++ "name": "eject" ++ }, ++ { ++ "name": "quit" ++ } ++ ], ++ "id": "libvirt-4" ++} ++ ++{ ++ "return": { ++ "fd": 14, ++ "fdset-id": 0 ++ }, ++ "id": "libvirt-5" ++} ++ ++{ ++ "id": "libvirt-6", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'bogus' not found" ++ } ++} ++ ++{ ++ "return": [ ++ { ++ "name": "WATCHDOG" ++ }, ++ { ++ "name": "WAKEUP" ++ }, ++ { ++ "name": "VSERPORT_CHANGE" ++ }, ++ { ++ "name": "VNC_INITIALIZED" ++ }, ++ { ++ "name": "VNC_DISCONNECTED" ++ }, ++ { ++ "name": "VNC_CONNECTED" ++ }, ++ { ++ "name": "SUSPEND_DISK" ++ }, ++ { ++ "name": "SUSPEND" ++ }, ++ { ++ "name": "STOP" ++ }, ++ { ++ "name": "SPICE_MIGRATE_COMPLETED" ++ }, ++ { ++ "name": "SPICE_INITIALIZED" ++ }, ++ { ++ "name": "SPICE_DISCONNECTED" ++ }, ++ { ++ "name": "SPICE_CONNECTED" ++ }, ++ { ++ "name": "SHUTDOWN" ++ }, ++ { ++ "name": "RTC_CHANGE" ++ }, ++ { ++ "name": "RESUME" ++ }, ++ { ++ "name": "RESET" ++ }, ++ { ++ "name": "QUORUM_REPORT_BAD" ++ }, ++ { ++ "name": "QUORUM_FAILURE" ++ }, ++ { ++ "name": "POWERDOWN" ++ }, ++ { ++ "name": "NIC_RX_FILTER_CHANGED" ++ }, ++ { ++ "name": "MIGRATION_PASS" ++ }, ++ { ++ "name": "MIGRATION" ++ }, ++ { ++ "name": "MEM_UNPLUG_ERROR" ++ }, ++ { ++ "name": "GUEST_PANICKED" ++ }, ++ { ++ "name": "DUMP_COMPLETED" ++ }, ++ { ++ "name": "DEVICE_TRAY_MOVED" ++ }, ++ { ++ "name": "DEVICE_DELETED" ++ }, ++ { ++ "name": "BLOCK_WRITE_THRESHOLD" ++ }, ++ { ++ "name": "BLOCK_JOB_READY" ++ }, ++ { ++ "name": "BLOCK_JOB_ERROR" ++ }, ++ { ++ "name": "BLOCK_JOB_COMPLETED" ++ }, ++ { ++ "name": "BLOCK_JOB_CANCELLED" ++ }, ++ { ++ "name": "BLOCK_IO_ERROR" ++ }, ++ { ++ "name": "BLOCK_IMAGE_CORRUPTED" ++ }, ++ { ++ "name": "BALLOON_CHANGE" ++ }, ++ { ++ "name": "ACPI_DEVICE_OST" ++ } ++ ], ++ "id": "libvirt-7" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "virtio-tablet-pci" ++ }, ++ { ++ "name": "pc-0.13-machine" ++ }, ++ { ++ "name": "generic-sdhci" ++ }, ++ { ++ "name": "i82551" ++ }, ++ { ++ "name": "i82550" ++ }, ++ { ++ "name": "Westmere-x86_64-cpu" ++ }, ++ { ++ "name": "pci-serial-4x" ++ }, ++ { ++ "name": "Penryn-x86_64-cpu" ++ }, ++ { ++ "name": "Haswell-x86_64-cpu" ++ }, ++ { ++ "name": "iothread" ++ }, ++ { ++ "name": "cfi.pflash01" ++ }, ++ { ++ "name": "Skylake-Client-x86_64-cpu" ++ }, ++ { ++ "name": "virtio-gpu-device" ++ }, ++ { ++ "name": "Opteron_G3-x86_64-cpu" ++ }, ++ { ++ "name": "Broadwell-x86_64-cpu" ++ }, ++ { ++ "name": "e1000e" ++ }, ++ { ++ "name": "piix3-ide" ++ }, ++ { ++ "name": "isa-parallel" ++ }, ++ { ++ "name": "i2c-bus" ++ }, ++ { ++ "name": "pc-q35-2.4-machine" ++ }, ++ { ++ "name": "megasas" ++ }, ++ { ++ "name": "usb-braille" ++ }, ++ { ++ "name": "mptsas1068" ++ }, ++ { ++ "name": "vmware-svga" ++ }, ++ { ++ "name": "PIIX3-xen" ++ }, ++ { ++ "name": "ccid-bus" ++ }, ++ { ++ "name": "scsi-cd" ++ }, ++ { ++ "name": "pc-i440fx-2.0-machine" ++ }, ++ { ++ "name": "isa-serial" ++ }, ++ { ++ "name": "usb-ehci" ++ }, ++ { ++ "name": "user-creatable" ++ }, ++ { ++ "name": "container" ++ }, ++ { ++ "name": "host-x86_64-cpu" ++ }, ++ { ++ "name": "qemu64-x86_64-cpu" ++ }, ++ { ++ "name": "pci-serial-2x" ++ }, ++ { ++ "name": "piix4-ide" ++ }, ++ { ++ "name": "scsi-generic" ++ }, ++ { ++ "name": "pc-1.0-machine" ++ }, ++ { ++ "name": "virtio-net-pci" ++ }, ++ { ++ "name": "hyperv-testdev" ++ }, ++ { ++ "name": "pc-dimm" ++ }, ++ { ++ "name": "Haswell-noTSX-x86_64-cpu" ++ }, ++ { ++ "name": "pc-i440fx-2.1-machine" ++ }, ++ { ++ "name": "virtio-mouse-device" ++ }, ++ { ++ "name": "virtio-mouse-pci" ++ }, ++ { ++ "name": "isa-debugcon" ++ }, ++ { ++ "name": "ide-hd" ++ }, ++ { ++ "name": "virtio-vga" ++ }, ++ { ++ "name": "isa-ipmi-bt" ++ }, ++ { ++ "name": "rng-egd" ++ }, ++ { ++ "name": "isa-pcspk" ++ }, ++ { ++ "name": "isa-pit" ++ }, ++ { ++ "name": "pc-1.1-machine" ++ }, ++ { ++ "name": "filter-buffer" ++ }, ++ { ++ "name": "ich9-usb-ehci1" ++ }, ++ { ++ "name": "ich9-usb-ehci2" ++ }, ++ { ++ "name": "pxb-host" ++ }, ++ { ++ "name": "intel-iommu" ++ }, ++ { ++ "name": "irq" ++ }, ++ { ++ "name": "ipmi-bmc-sim" ++ }, ++ { ++ "name": "cirrus-vga" ++ }, ++ { ++ "name": "virtconsole" ++ }, ++ { ++ "name": "virtio-rng-pci" ++ }, ++ { ++ "name": "PCIE" ++ }, ++ { ++ "name": "vfio-amd-xgbe" ++ }, ++ { ++ "name": "pentium3-x86_64-cpu" ++ }, ++ { ++ "name": "qxl-vga" ++ }, ++ { ++ "name": "ioapic" ++ }, ++ { ++ "name": "kvm-pit" ++ }, ++ { ++ "name": "pc-i440fx-2.5-machine" ++ }, ++ { ++ "name": "vhost-scsi-pci" ++ }, ++ { ++ "name": "usb-host" ++ }, ++ { ++ "name": "usb-bus" ++ }, ++ { ++ "name": "pc-i440fx-1.4-machine" ++ }, ++ { ++ "name": "usb-kbd" ++ }, ++ { ++ "name": "486-x86_64-cpu" ++ }, ++ { ++ "name": "ES1370" ++ }, ++ { ++ "name": "gus" ++ }, ++ { ++ "name": "PIIX3" ++ }, ++ { ++ "name": "isa-applesmc" ++ }, ++ { ++ "name": "pc-i440fx-2.6-machine" ++ }, ++ { ++ "name": "kvm-pci-assign" ++ }, ++ { ++ "name": "i82559er" ++ }, ++ { ++ "name": "usb-bt-dongle" ++ }, ++ { ++ "name": "q35-pcihost" ++ }, ++ { ++ "name": "e1000-82545em" ++ }, ++ { ++ "name": "ipmi-interface" ++ }, ++ { ++ "name": "pc-0.14-machine" ++ }, ++ { ++ "name": "pc-i440fx-1.5-machine" ++ }, ++ { ++ "name": "e1000-82544gc" ++ }, ++ { ++ "name": "i6300esb" ++ }, ++ { ++ "name": "mc146818rtc" ++ }, ++ { ++ "name": "AC97" ++ }, ++ { ++ "name": "PIIX4_PM" ++ }, ++ { ++ "name": "piix4-usb-uhci" ++ }, ++ { ++ "name": "sysbus-ahci" ++ }, ++ { ++ "name": "virtio-tablet-device" ++ }, ++ { ++ "name": "filter-redirector" ++ }, ++ { ++ "name": "kvm-ioapic" ++ }, ++ { ++ "name": "pvpanic" ++ }, ++ { ++ "name": "core2duo-x86_64-cpu" ++ }, ++ { ++ "name": "virtio-9p-pci" ++ }, ++ { ++ "name": "scsi-disk" ++ }, ++ { ++ "name": "acpi-device-interface" ++ }, ++ { ++ "name": "vfio-pci-igd-lpc-bridge" ++ }, ++ { ++ "name": "sb16" ++ }, ++ { ++ "name": "qio-channel-buffer" ++ }, ++ { ++ "name": "qemu-console" ++ }, ++ { ++ "name": "pc-0.15-machine" ++ }, ++ { ++ "name": "usb-mouse" ++ }, ++ { ++ "name": "filter-dump" ++ }, ++ { ++ "name": "piix3-usb-uhci" ++ }, ++ { ++ "name": "vfio-calxeda-xgmac" ++ }, ++ { ++ "name": "virtio-scsi-device" ++ }, ++ { ++ "name": "virtio-blk-pci" ++ }, ++ { ++ "name": "virtio-9p-device" ++ }, ++ { ++ "name": "hda-output" ++ }, ++ { ++ "name": "pc-q35-2.5-machine" ++ }, ++ { ++ "name": "SUNW,fdtwo" ++ }, ++ { ++ "name": "tpci200" ++ }, ++ { ++ "name": "i8257" ++ }, ++ { ++ "name": "Opteron_G4-x86_64-cpu" ++ }, ++ { ++ "name": "virtio-mmio" ++ }, ++ { ++ "name": "filter-mirror" ++ }, ++ { ++ "name": "isa-i8259" ++ }, ++ { ++ "name": "System" ++ }, ++ { ++ "name": "pvscsi" ++ }, ++ { ++ "name": "virtio-net-device" ++ }, ++ { ++ "name": "sd-bus" ++ }, ++ { ++ "name": "qio-channel-file" ++ }, ++ { ++ "name": "usb-hub" ++ }, ++ { ++ "name": "IvyBridge-x86_64-cpu" ++ }, ++ { ++ "name": "hda-duplex" ++ }, ++ { ++ "name": "igd-passthrough-i440FX" ++ }, ++ { ++ "name": "virtio-keyboard-pci" ++ }, ++ { ++ "name": "igd-passthrough-isa-bridge" ++ }, ++ { ++ "name": "nec-usb-xhci" ++ }, ++ { ++ "name": "input-linux" ++ }, ++ { ++ "name": "megasas-gen2" ++ }, ++ { ++ "name": "pci-ohci" ++ }, ++ { ++ "name": "ib700" ++ }, ++ { ++ "name": "xio3130-downstream" ++ }, ++ { ++ "name": "isapc-machine" ++ }, ++ { ++ "name": "ipoctal232" ++ }, ++ { ++ "name": "ide-cd" ++ }, ++ { ++ "name": "tls-creds-anon" ++ }, ++ { ++ "name": "pc-i440fx-2.2-machine" ++ }, ++ { ++ "name": "isabus-bridge" ++ }, ++ { ++ "name": "isa-ipmi-kcs" ++ }, ++ { ++ "name": "memory-backend-file" ++ }, ++ { ++ "name": "isa-ide" ++ }, ++ { ++ "name": "virtio-keyboard-device" ++ }, ++ { ++ "name": "apic" ++ }, ++ { ++ "name": "isa-vga" ++ }, ++ { ++ "name": "qemu:memory-region" ++ }, ++ { ++ "name": "ipmi-bmc-extern" ++ }, ++ { ++ "name": "rng-random" ++ }, ++ { ++ "name": "hotplug-handler" ++ }, ++ { ++ "name": "kvm-i8259" ++ }, ++ { ++ "name": "i440FX-pcihost" ++ }, ++ { ++ "name": "rocker" ++ }, ++ { ++ "name": "tpm-tis" ++ }, ++ { ++ "name": "tpm-passthrough" ++ }, ++ { ++ "name": "pc-1.2-machine" ++ }, ++ { ++ "name": "isa-debug-exit" ++ }, ++ { ++ "name": "Opteron_G1-x86_64-cpu" ++ }, ++ { ++ "name": "pc-testdev" ++ }, ++ { ++ "name": "qemu32-x86_64-cpu" ++ }, ++ { ++ "name": "pc-0.10-machine" ++ }, ++ { ++ "name": "pc-i440fx-2.3-machine" ++ }, ++ { ++ "name": "sga" ++ }, ++ { ++ "name": "pcnet" ++ }, ++ { ++ "name": "ivshmem" ++ }, ++ { ++ "name": "hpet" ++ }, ++ { ++ "name": "adlib" ++ }, ++ { ++ "name": "qio-channel-command" ++ }, ++ { ++ "name": "lsi53c895a" ++ }, ++ { ++ "name": "pxb-bus" ++ }, ++ { ++ "name": "usb-audio" ++ }, ++ { ++ "name": "usb-wacom-tablet" ++ }, ++ { ++ "name": "pc-0.11-machine" ++ }, ++ { ++ "name": "kvm-apic" ++ }, ++ { ++ "name": "phenom-x86_64-cpu" ++ }, ++ { ++ "name": "fw_cfg_io" ++ }, ++ { ++ "name": "usb-net" ++ }, ++ { ++ "name": "ioh3420" ++ }, ++ { ++ "name": "cs4231a" ++ }, ++ { ++ "name": "dc390" ++ }, ++ { ++ "name": "nvme" ++ }, ++ { ++ "name": "i82801b11-bridge" ++ }, ++ { ++ "name": "kvmvapic" ++ }, ++ { ++ "name": "usb-tablet" ++ }, ++ { ++ "name": "fw-path-provider" ++ }, ++ { ++ "name": "usb-ccid" ++ }, ++ { ++ "name": "sdhci-bus" ++ }, ++ { ++ "name": "pci-bridge-seat" ++ }, ++ { ++ "name": "mch" ++ }, ++ { ++ "name": "pc-i440fx-2.7-machine" ++ }, ++ { ++ "name": "vhost-scsi" ++ }, ++ { ++ "name": "isa-dma" ++ }, ++ { ++ "name": "tcg-accel" ++ }, ++ { ++ "name": "virtio-mmio-bus" ++ }, ++ { ++ "name": "ich9-usb-uhci2" ++ }, ++ { ++ "name": "usb-bot" ++ }, ++ { ++ "name": "ICH9-LPC" ++ }, ++ { ++ "name": "edu" ++ }, ++ { ++ "name": "accel" ++ }, ++ { ++ "name": "pxb-pcie-bus" ++ }, ++ { ++ "name": "pc-i440fx-1.6-machine" ++ }, ++ { ++ "name": "lsi53c810" ++ }, ++ { ++ "name": "kvmclock" ++ }, ++ { ++ "name": "isa-cirrus-vga" ++ }, ++ { ++ "name": "ich9-usb-uhci4" ++ }, ++ { ++ "name": "virtio-serial-bus" ++ }, ++ { ++ "name": "nvdimm" ++ }, ++ { ++ "name": "SandyBridge-x86_64-cpu" ++ }, ++ { ++ "name": "esp" ++ }, ++ { ++ "name": "virtio-balloon-device" ++ }, ++ { ++ "name": "qxl" ++ }, ++ { ++ "name": "intel-hda" ++ }, ++ { ++ "name": "ich9-usb-uhci6" ++ }, ++ { ++ "name": "pc-i440fx-1.7-machine" ++ }, ++ { ++ "name": "virtio-serial-device" ++ }, ++ { ++ "name": "ich9-usb-uhci3" ++ }, ++ { ++ "name": "ICH9 SMB" ++ }, ++ { ++ "name": "ich9-usb-uhci5" ++ }, ++ { ++ "name": "pxb-pcie" ++ }, ++ { ++ "name": "piix3-ide-xen" ++ }, ++ { ++ "name": "virtio-input-host-device" ++ }, ++ { ++ "name": "vmxnet3" ++ }, ++ { ++ "name": "IDE" ++ }, ++ { ++ "name": "VGA" ++ }, ++ { ++ "name": "pci-testdev" ++ }, ++ { ++ "name": "ich9-usb-uhci1" ++ }, ++ { ++ "name": "x3130-upstream" ++ }, ++ { ++ "name": "pci-bridge" ++ }, ++ { ++ "name": "SCSI" ++ }, ++ { ++ "name": "none-machine" ++ }, ++ { ++ "name": "sysbus-fdc" ++ }, ++ { ++ "name": "allwinner-ahci" ++ }, ++ { ++ "name": "n270-x86_64-cpu" ++ }, ++ { ++ "name": "pci-serial" ++ }, ++ { ++ "name": "pc-q35-2.6-machine" ++ }, ++ { ++ "name": "athlon-x86_64-cpu" ++ }, ++ { ++ "name": "tls-creds-x509" ++ }, ++ { ++ "name": "virtio-balloon-pci" ++ }, ++ { ++ "name": "ISA" ++ }, ++ { ++ "name": "i8042" ++ }, ++ { ++ "name": "kvm-accel" ++ }, ++ { ++ "name": "secret" ++ }, ++ { ++ "name": "i82559c" ++ }, ++ { ++ "name": "i82559b" ++ }, ++ { ++ "name": "i82559a" ++ }, ++ { ++ "name": "scsi-hd" ++ }, ++ { ++ "name": "qtest-accel" ++ }, ++ { ++ "name": "virtio-scsi-pci" ++ }, ++ { ++ "name": "hda-micro" ++ }, ++ { ++ "name": "scsi-block" ++ }, ++ { ++ "name": "rtl8139" ++ }, ++ { ++ "name": "vmmouse" ++ }, ++ { ++ "name": "ich9-intel-hda" ++ }, ++ { ++ "name": "pc-q35-2.7-machine" ++ }, ++ { ++ "name": "usb-mtp" ++ }, ++ { ++ "name": "ide-drive" ++ }, ++ { ++ "name": "qio-channel-websock" ++ }, ++ { ++ "name": "fw_cfg_mem" ++ }, ++ { ++ "name": "PCI" ++ }, ++ { ++ "name": "Opteron_G5-x86_64-cpu" ++ }, ++ { ++ "name": "vmport" ++ }, ++ { ++ "name": "coreduo-x86_64-cpu" ++ }, ++ { ++ "name": "virtio-pci-bus" ++ }, ++ { ++ "name": "virtio-serial-pci" ++ }, ++ { ++ "name": "virtio-rng-device" ++ }, ++ { ++ "name": "pentium2-x86_64-cpu" ++ }, ++ { ++ "name": "virtio-input-host-pci" ++ }, ++ { ++ "name": "nmi" ++ }, ++ { ++ "name": "i82558b" ++ }, ++ { ++ "name": "i82558a" ++ }, ++ { ++ "name": "qemu,register" ++ }, ++ { ++ "name": "am53c974" ++ }, ++ { ++ "name": "sdhci-pci" ++ }, ++ { ++ "name": "port92" ++ }, ++ { ++ "name": "pxb" ++ }, ++ { ++ "name": "ne2k_isa" ++ }, ++ { ++ "name": "e1000" ++ }, ++ { ++ "name": "Conroe-x86_64-cpu" ++ }, ++ { ++ "name": "kvm64-x86_64-cpu" ++ }, ++ { ++ "name": "qio-channel-tls" ++ }, ++ { ++ "name": "vt82c686b-usb-uhci" ++ }, ++ { ++ "name": "HDA" ++ }, ++ { ++ "name": "usb-storage" ++ }, ++ { ++ "name": "pc-1.3-machine" ++ }, ++ { ++ "name": "usb-serial" ++ }, ++ { ++ "name": "usb-redir" ++ }, ++ { ++ "name": "sysbus-ohci" ++ }, ++ { ++ "name": "pc-i440fx-2.4-machine" ++ }, ++ { ++ "name": "i82801" ++ }, ++ { ++ "name": "i82557b" ++ }, ++ { ++ "name": "usb-uas" ++ }, ++ { ++ "name": "Broadwell-noTSX-x86_64-cpu" ++ }, ++ { ++ "name": "i82557c" ++ }, ++ { ++ "name": "Nehalem-x86_64-cpu" ++ }, ++ { ++ "name": "memory-backend-ram" ++ }, ++ { ++ "name": "i82557a" ++ }, ++ { ++ "name": "virtserialport" ++ }, ++ { ++ "name": "i440FX" ++ }, ++ { ++ "name": "ne2k_pci" ++ }, ++ { ++ "name": "smbus-eeprom" ++ }, ++ { ++ "name": "i82562" ++ }, ++ { ++ "name": "ich9-ahci" ++ }, ++ { ++ "name": "isa-fdc" ++ }, ++ { ++ "name": "sd-card" ++ }, ++ { ++ "name": "pc-0.12-machine" ++ }, ++ { ++ "name": "kvm32-x86_64-cpu" ++ }, ++ { ++ "name": "Opteron_G2-x86_64-cpu" ++ }, ++ { ++ "name": "vfio-pci" ++ }, ++ { ++ "name": "IndustryPack" ++ }, ++ { ++ "name": "virtio-gpu-pci" ++ }, ++ { ++ "name": "ivshmem-plain" ++ }, ++ { ++ "name": "secondary-vga" ++ }, ++ { ++ "name": "ivshmem-doorbell" ++ }, ++ { ++ "name": "qio-channel-socket" ++ }, ++ { ++ "name": "pentium-x86_64-cpu" ++ }, ++ { ++ "name": "virtio-blk-device" ++ } ++ ], ++ "id": "libvirt-8" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "secs", ++ "type": "uint32" ++ }, ++ { ++ "name": "request-merging", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "min_io_size", ++ "type": "uint16" ++ }, ++ { ++ "name": "event_idx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "serial", ++ "type": "str" ++ }, ++ { ++ "name": "heads", ++ "type": "uint32" ++ }, ++ { ++ "name": "ioeventfd", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "scsi", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "cyls", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-disable-pcie", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "logical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ }, ++ { ++ "name": "indirect_desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "disable-modern", ++ "type": "bool" ++ }, ++ { ++ "name": "drive", ++ "description": "Node name or ID of a block device to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "disable-legacy", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "werror", ++ "description": "Error handling policy, report/ignore/enospc/stop/auto", ++ "type": "BlockdevOnError" ++ }, ++ { ++ "name": "discard_granularity", ++ "type": "uint32" ++ }, ++ { ++ "name": "rerror", ++ "description": "Error handling policy, report/ignore/enospc/stop/auto", ++ "type": "BlockdevOnError" ++ }, ++ { ++ "name": "iothread", ++ "type": "link" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "any_layout", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "class", ++ "type": "uint32" ++ }, ++ { ++ "name": "migrate-extra", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "modern-pio-notify", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vectors", ++ "type": "uint32" ++ }, ++ { ++ "name": "physical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "virtio-backend", ++ "type": "child" ++ }, ++ { ++ "name": "config-wce", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "notify_on_empty", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "num-queues", ++ "type": "uint16" ++ }, ++ { ++ "name": "virtio-pci-bus-master-bug-migration", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "write-cache", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "opt_io_size", ++ "type": "uint32" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ } ++ ], ++ "id": "libvirt-9" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "indirect_desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-txtimer", ++ "type": "uint32" ++ }, ++ { ++ "name": "guest_ufo", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "mq", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "status", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "host_ecn", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ioeventfd", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "tx", ++ "type": "str" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "ctrl_rx_extra", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ctrl_vq", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "mac", ++ "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56", ++ "type": "str" ++ }, ++ { ++ "name": "x-disable-pcie", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "guest_tso6", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "gso", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "guest_ecn", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ctrl_rx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "guest_tso4", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "disable-modern", ++ "type": "bool" ++ }, ++ { ++ "name": "guest_csum", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "guest_announce", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "disable-legacy", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-txburst", ++ "type": "int32" ++ }, ++ { ++ "name": "ctrl_vlan", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "csum", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "mrg_rxbuf", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ctrl_guest_offloads", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "any_layout", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ctrl_mac_addr", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "event_idx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "migrate-extra", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "modern-pio-notify", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vectors", ++ "type": "uint32" ++ }, ++ { ++ "name": "host_tso6", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vlan", ++ "description": "Integer VLAN id to connect to", ++ "type": "int32" ++ }, ++ { ++ "name": "host_tso4", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "host_ufo", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "virtio-backend", ++ "type": "child" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "netdev", ++ "description": "ID of a netdev to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "notify_on_empty", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "virtio-pci-bus-master-bug-migration", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ } ++ ], ++ "id": "libvirt-10" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "event_idx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ioeventfd", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-disable-pcie", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "indirect_desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "disable-modern", ++ "type": "bool" ++ }, ++ { ++ "name": "cmd_per_lun", ++ "type": "uint32" ++ }, ++ { ++ "name": "disable-legacy", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "num_queues", ++ "type": "uint32" ++ }, ++ { ++ "name": "hotplug", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "max_sectors", ++ "type": "uint32" ++ }, ++ { ++ "name": "param_change", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "any_layout", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "iothread", ++ "type": "link" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "migrate-extra", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "modern-pio-notify", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vectors", ++ "type": "uint32" ++ }, ++ { ++ "name": "virtio-backend", ++ "type": "child" ++ }, ++ { ++ "name": "notify_on_empty", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "virtio-pci-bus-master-bug-migration", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ } ++ ], ++ "id": "libvirt-11" ++} ++ ++{ ++ "id": "libvirt-12", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'virtio-blk-ccw' not found" ++ } ++} ++ ++{ ++ "id": "libvirt-13", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'virtio-net-ccw' not found" ++ } ++} ++ ++{ ++ "id": "libvirt-14", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'virtio-scsi-ccw' not found" ++ } ++} ++ ++{ ++ "id": "libvirt-15", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'virtio-blk-s390' not found" ++ } ++} ++ ++{ ++ "id": "libvirt-16", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'virtio-net-s390' not found" ++ } ++} ++ ++{ ++ "id": "libvirt-17", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'pci-assign' not found" ++ } ++} ++ ++{ ++ "return": [ ++ { ++ "name": "share_intx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "host", ++ "description": "Address (bus/device/function) of the host device, example: 04:10.0", ++ "type": "str" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "configfd", ++ "type": "str" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "prefer_msi", ++ "description": "on/off", ++ "type": "bool" ++ } ++ ], ++ "id": "libvirt-18" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "x-pci-sub-device-id", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-no-kvm-msi", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-igd-opregion", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-vga", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-pci-vendor-id", ++ "type": "uint32" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "x-req", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-igd-gms", ++ "type": "uint32" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "x-no-kvm-intx", ++ "type": "bool" ++ }, ++ { ++ "name": "x-pci-device-id", ++ "type": "uint32" ++ }, ++ { ++ "name": "host", ++ "description": "Address (bus/device/function) of the host device, example: 04:10.0", ++ "type": "str" ++ }, ++ { ++ "name": "x-no-kvm-msix", ++ "type": "bool" ++ }, ++ { ++ "name": "x-intx-mmap-timeout-ms", ++ "type": "uint32" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "x-pci-sub-vendor-id", ++ "type": "uint32" ++ }, ++ { ++ "name": "sysfsdev", ++ "type": "str" ++ }, ++ { ++ "name": "x-no-mmap", ++ "type": "bool" ++ } ++ ], ++ "id": "libvirt-19" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "serial", ++ "type": "str" ++ }, ++ { ++ "name": "port_index", ++ "type": "uint16" ++ }, ++ { ++ "name": "dpofua", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "logical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ }, ++ { ++ "name": "discard_granularity", ++ "type": "uint32" ++ }, ++ { ++ "name": "lun", ++ "type": "uint32" ++ }, ++ { ++ "name": "max_unmap_size", ++ "type": "uint64" ++ }, ++ { ++ "name": "drive", ++ "description": "Node name or ID of a block device to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "port_wwn", ++ "type": "uint64" ++ }, ++ { ++ "name": "write-cache", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "opt_io_size", ++ "type": "uint32" ++ }, ++ { ++ "name": "min_io_size", ++ "type": "uint16" ++ }, ++ { ++ "name": "product", ++ "type": "str" ++ }, ++ { ++ "name": "scsi-id", ++ "type": "uint32" ++ }, ++ { ++ "name": "channel", ++ "type": "uint32" ++ }, ++ { ++ "name": "vendor", ++ "type": "str" ++ }, ++ { ++ "name": "wwn", ++ "type": "uint64" ++ }, ++ { ++ "name": "werror", ++ "description": "Error handling policy, report/ignore/enospc/stop/auto", ++ "type": "BlockdevOnError" ++ }, ++ { ++ "name": "removable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "rerror", ++ "description": "Error handling policy, report/ignore/enospc/stop/auto", ++ "type": "BlockdevOnError" ++ }, ++ { ++ "name": "ver", ++ "type": "str" ++ }, ++ { ++ "name": "physical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ }, ++ { ++ "name": "max_io_size", ++ "type": "uint64" ++ } ++ ], ++ "id": "libvirt-20" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "serial", ++ "type": "str" ++ }, ++ { ++ "name": "logical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ }, ++ { ++ "name": "discard_granularity", ++ "type": "uint32" ++ }, ++ { ++ "name": "drive", ++ "description": "Node name or ID of a block device to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "write-cache", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "opt_io_size", ++ "type": "uint32" ++ }, ++ { ++ "name": "min_io_size", ++ "type": "uint16" ++ }, ++ { ++ "name": "unit", ++ "type": "uint32" ++ }, ++ { ++ "name": "wwn", ++ "type": "uint64" ++ }, ++ { ++ "name": "werror", ++ "description": "Error handling policy, report/ignore/enospc/stop/auto", ++ "type": "BlockdevOnError" ++ }, ++ { ++ "name": "model", ++ "type": "str" ++ }, ++ { ++ "name": "rerror", ++ "description": "Error handling policy, report/ignore/enospc/stop/auto", ++ "type": "BlockdevOnError" ++ }, ++ { ++ "name": "ver", ++ "type": "str" ++ }, ++ { ++ "name": "physical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ } ++ ], ++ "id": "libvirt-21" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "memory-hotplug-support", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "acpi-pci-hotplug-with-bridge-support", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "disable_s4", ++ "type": "uint8" ++ }, ++ { ++ "name": "disable_s3", ++ "type": "uint8" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "s4_val", ++ "type": "uint8" ++ }, ++ { ++ "name": "smb_io_base", ++ "type": "uint32" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ } ++ ], ++ "id": "libvirt-22" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "filter", ++ "type": "str" ++ }, ++ { ++ "name": "msos-desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "serial", ++ "type": "str" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "port", ++ "type": "str" ++ }, ++ { ++ "name": "debug", ++ "type": "uint8" ++ }, ++ { ++ "name": "streams", ++ "type": "bool" ++ }, ++ { ++ "name": "chardev", ++ "description": "ID of a chardev to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "full-path", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "attached", ++ "type": "bool" ++ } ++ ], ++ "id": "libvirt-23" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "isobufs", ++ "type": "uint32" ++ }, ++ { ++ "name": "hostaddr", ++ "type": "uint32" ++ }, ++ { ++ "name": "msos-desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "productid", ++ "type": "uint32" ++ }, ++ { ++ "name": "serial", ++ "type": "str" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "isobsize", ++ "type": "uint32" ++ }, ++ { ++ "name": "port", ++ "type": "str" ++ }, ++ { ++ "name": "vendorid", ++ "type": "uint32" ++ }, ++ { ++ "name": "pipeline", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "attached", ++ "type": "bool" ++ }, ++ { ++ "name": "hostport", ++ "type": "str" ++ }, ++ { ++ "name": "full-path", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "loglevel", ++ "type": "uint32" ++ }, ++ { ++ "name": "hostbus", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-24" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "drive", ++ "description": "Node name or ID of a block device to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "lun", ++ "type": "uint32" ++ }, ++ { ++ "name": "channel", ++ "type": "uint32" ++ }, ++ { ++ "name": "scsi-id", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-25" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "short_root_bus", ++ "type": "uint32" ++ }, ++ { ++ "name": "pci-conf-idx[0]", ++ "type": "child" ++ }, ++ { ++ "name": "pci-hole64-end", ++ "type": "int" ++ }, ++ { ++ "name": "pci-hole-end", ++ "type": "int" ++ }, ++ { ++ "name": "pci-hole-start", ++ "type": "int" ++ }, ++ { ++ "name": "pci-hole64-start", ++ "type": "int" ++ }, ++ { ++ "name": "pci-hole64-size", ++ "type": "size" ++ }, ++ { ++ "name": "pci-conf-data[0]", ++ "type": "child" ++ } ++ ], ++ "id": "libvirt-26" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "short_root_bus", ++ "type": "uint32" ++ }, ++ { ++ "name": "system-mem", ++ "type": "link" ++ }, ++ { ++ "name": "pci-conf-idx[0]", ++ "type": "child" ++ }, ++ { ++ "name": "pcie-mmcfg-mmio[0]", ++ "type": "child" ++ }, ++ { ++ "name": "pci-hole64-start", ++ "type": "int" ++ }, ++ { ++ "name": "io-mem", ++ "type": "link" ++ }, ++ { ++ "name": "pci-hole64-end", ++ "type": "int" ++ }, ++ { ++ "name": "pci-hole-end", ++ "type": "int" ++ }, ++ { ++ "name": "above-4g-mem-size", ++ "type": "size" ++ }, ++ { ++ "name": "below-4g-mem-size", ++ "type": "size" ++ }, ++ { ++ "name": "ram-mem", ++ "type": "link" ++ }, ++ { ++ "name": "pci-hole-start", ++ "type": "int" ++ }, ++ { ++ "name": "MCFG", ++ "type": "uint64" ++ }, ++ { ++ "name": "mch", ++ "type": "child" ++ }, ++ { ++ "name": "pci-hole64-size", ++ "type": "size" ++ }, ++ { ++ "name": "pci-mem", ++ "type": "link" ++ }, ++ { ++ "name": "pci-conf-data[0]", ++ "type": "child" ++ }, ++ { ++ "name": "mcfg_size", ++ "type": "int" ++ } ++ ], ++ "id": "libvirt-27" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "serial", ++ "type": "str" ++ }, ++ { ++ "name": "msos-desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "logical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ }, ++ { ++ "name": "discard_granularity", ++ "type": "uint32" ++ }, ++ { ++ "name": "drive", ++ "description": "Node name or ID of a block device to use as a backend", ++ "type": "str" ++ }, ++ { ++ "name": "bootindex", ++ "type": "int32" ++ }, ++ { ++ "name": "write-cache", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "opt_io_size", ++ "type": "uint32" ++ }, ++ { ++ "name": "min_io_size", ++ "type": "uint16" ++ }, ++ { ++ "name": "port", ++ "type": "str" ++ }, ++ { ++ "name": "attached", ++ "type": "bool" ++ }, ++ { ++ "name": "full-path", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "removable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "physical_block_size", ++ "description": "A power of two between 512 and 32768", ++ "type": "uint16" ++ } ++ ], ++ "id": "libvirt-28" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "iobase", ++ "type": "uint32" ++ }, ++ { ++ "name": "lost_tick_policy", ++ "type": "LostTickPolicy" ++ } ++ ], ++ "id": "libvirt-29" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "mmio", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "qemu-extended-regs", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "big-endian-framebuffer", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "vgamem_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ } ++ ], ++ "id": "libvirt-30" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "vgamem_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ } ++ ], ++ "id": "libvirt-31" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ram_size_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vgamem_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "debug", ++ "type": "uint32" ++ }, ++ { ++ "name": "vram_size_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "revision", ++ "type": "uint32" ++ }, ++ { ++ "name": "ram_size", ++ "type": "uint32" ++ }, ++ { ++ "name": "vram64_size_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "guestdebug", ++ "type": "uint32" ++ }, ++ { ++ "name": "vram_size", ++ "type": "uint64" ++ }, ++ { ++ "name": "surfaces", ++ "type": "int32" ++ }, ++ { ++ "name": "max_outputs", ++ "type": "uint16" ++ }, ++ { ++ "name": "cmdlog", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-32" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "ram_size_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vgamem_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "debug", ++ "type": "uint32" ++ }, ++ { ++ "name": "vram_size_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "revision", ++ "type": "uint32" ++ }, ++ { ++ "name": "ram_size", ++ "type": "uint32" ++ }, ++ { ++ "name": "vram64_size_mb", ++ "type": "uint32" ++ }, ++ { ++ "name": "guestdebug", ++ "type": "uint32" ++ }, ++ { ++ "name": "vram_size", ++ "type": "uint64" ++ }, ++ { ++ "name": "surfaces", ++ "type": "int32" ++ }, ++ { ++ "name": "max_outputs", ++ "type": "uint16" ++ }, ++ { ++ "name": "cmdlog", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-33" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "disable-modern", ++ "type": "bool" ++ }, ++ { ++ "name": "ioeventfd", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "virtio-pci-bus-master-bug-migration", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "any_layout", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "indirect_desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "migrate-extra", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "notify_on_empty", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "event_idx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "modern-pio-notify", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "virtio-backend", ++ "type": "child" ++ }, ++ { ++ "name": "disable-legacy", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "vectors", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-disable-pcie", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "max_outputs", ++ "type": "uint32" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-34" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "memory-hotplug-support", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "sci_int", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "gpe0_blk_len", ++ "type": "uint32" ++ }, ++ { ++ "name": "pm_io_base", ++ "type": "uint32" ++ }, ++ { ++ "name": "noreboot", ++ "type": "bool" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "disable_s4", ++ "type": "uint8" ++ }, ++ { ++ "name": "acpi_disable_cmd", ++ "type": "uint8" ++ }, ++ { ++ "name": "cpu-hotplug-legacy", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "disable_s3", ++ "type": "uint8" ++ }, ++ { ++ "name": "s4_val", ++ "type": "uint8" ++ }, ++ { ++ "name": "acpi_enable_cmd", ++ "type": "uint8" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "enable_tco", ++ "type": "bool" ++ }, ++ { ++ "name": "gpe0_blk", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-35" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "disable-modern", ++ "type": "bool" ++ }, ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "virtio-pci-bus-master-bug-migration", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "class", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "indirect_desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "guest-stats-polling-interval", ++ "type": "int" ++ }, ++ { ++ "name": "guest-stats", ++ "type": "guest statistics" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "migrate-extra", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "event_idx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "modern-pio-notify", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "virtio-backend", ++ "type": "child" ++ }, ++ { ++ "name": "disable-legacy", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "x-disable-pcie", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "any_layout", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "notify_on_empty", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "deflate-on-oom", ++ "description": "on/off", ++ "type": "bool" ++ } ++ ], ++ "id": "libvirt-36" ++} ++ ++{ ++ "id": "libvirt-37", ++ "error": { ++ "class": "DeviceNotFound", ++ "desc": "Device 'virtio-balloon-ccw' not found" ++ } ++} ++ ++{ ++ "return": [ ++ { ++ "name": "notify_on_empty", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "any_layout", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "indirect_desc", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "guest-stats", ++ "type": "guest statistics" ++ }, ++ { ++ "name": "guest-stats-polling-interval", ++ "type": "int" ++ }, ++ { ++ "name": "event_idx", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "deflate-on-oom", ++ "description": "on/off", ++ "type": "bool" ++ } ++ ], ++ "id": "libvirt-38" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "rombar", ++ "type": "uint32" ++ }, ++ { ++ "name": "intrs", ++ "type": "uint32" ++ }, ++ { ++ "name": "x-pcie-lnksta-dllla", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "msix", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "multifunction", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "msi", ++ "description": "on/off/auto", ++ "type": "OnOffAuto" ++ }, ++ { ++ "name": "superspeed-ports-first", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "streams", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "romfile", ++ "type": "str" ++ }, ++ { ++ "name": "force-pcie-endcap", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "command_serr_enable", ++ "description": "on/off", ++ "type": "bool" ++ }, ++ { ++ "name": "addr", ++ "description": "Slot and optional function number, example: 06.0 or 06", ++ "type": "int32" ++ }, ++ { ++ "name": "p3", ++ "type": "uint32" ++ }, ++ { ++ "name": "p2", ++ "type": "uint32" ++ }, ++ { ++ "name": "slots", ++ "type": "uint32" ++ } ++ ], ++ "id": "libvirt-39" ++} ++ ++{ ++ "return": [ ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-0.12", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.4", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-1.3", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-q35-2.7", ++ "cpu-max": 255, ++ "alias": "q35" ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-q35-2.6", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": false, ++ "name": "none", ++ "cpu-max": 1 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-1.7", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-1.6", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.7", ++ "is-default": true, ++ "cpu-max": 255, ++ "alias": "pc" ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-0.11", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.3", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-0.10", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-1.2", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.2", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "isapc", ++ "cpu-max": 1 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-q35-2.5", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-0.15", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-1.5", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-0.14", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.6", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-1.4", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.5", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-1.1", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.1", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-1.0", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-i440fx-2.0", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-q35-2.4", ++ "cpu-max": 255 ++ }, ++ { ++ "hotpluggable-cpus": true, ++ "name": "pc-0.13", ++ "cpu-max": 255 ++ } ++ ], ++ "id": "libvirt-40" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "Opteron_G5" ++ }, ++ { ++ "name": "Opteron_G4" ++ }, ++ { ++ "name": "Opteron_G3" ++ }, ++ { ++ "name": "Opteron_G2" ++ }, ++ { ++ "name": "Opteron_G1" ++ }, ++ { ++ "name": "Skylake-Client" ++ }, ++ { ++ "name": "Broadwell" ++ }, ++ { ++ "name": "Broadwell-noTSX" ++ }, ++ { ++ "name": "Haswell" ++ }, ++ { ++ "name": "Haswell-noTSX" ++ }, ++ { ++ "name": "IvyBridge" ++ }, ++ { ++ "name": "SandyBridge" ++ }, ++ { ++ "name": "Westmere" ++ }, ++ { ++ "name": "Nehalem" ++ }, ++ { ++ "name": "Penryn" ++ }, ++ { ++ "name": "Conroe" ++ }, ++ { ++ "name": "n270" ++ }, ++ { ++ "name": "athlon" ++ }, ++ { ++ "name": "pentium3" ++ }, ++ { ++ "name": "pentium2" ++ }, ++ { ++ "name": "pentium" ++ }, ++ { ++ "name": "486" ++ }, ++ { ++ "name": "coreduo" ++ }, ++ { ++ "name": "kvm32" ++ }, ++ { ++ "name": "qemu32" ++ }, ++ { ++ "name": "kvm64" ++ }, ++ { ++ "name": "core2duo" ++ }, ++ { ++ "name": "phenom" ++ }, ++ { ++ "name": "qemu64" ++ } ++ ], ++ "id": "libvirt-41" ++} ++ ++{ ++ "return": { ++ "enabled": false, ++ "present": true ++ }, ++ "id": "libvirt-42" ++} ++ ++{ ++ "return": [ ++ "tpm-tis" ++ ], ++ "id": "libvirt-43" ++} ++ ++{ ++ "return": [ ++ "passthrough" ++ ], ++ "id": "libvirt-44" ++} ++ ++{ ++ "return": [ ++ { ++ "parameters": [ ++ { ++ "name": "timeout", ++ "help": "Request timeout in seconds (default 0 = no timeout)", ++ "type": "number" ++ }, ++ { ++ "name": "initiator-name", ++ "help": "Initiator iqn name to use when connecting", ++ "type": "string" ++ }, ++ { ++ "name": "header-digest", ++ "help": "HeaderDigest setting. {CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}", ++ "type": "string" ++ }, ++ { ++ "name": "password-secret", ++ "help": "ID of the secret providing password for CHAP authentication to target", ++ "type": "string" ++ }, ++ { ++ "name": "password", ++ "help": "password for CHAP authentication to target", ++ "type": "string" ++ }, ++ { ++ "name": "user", ++ "help": "username for CHAP authentication to target", ++ "type": "string" ++ } ++ ], ++ "option": "iscsi" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "non-adaptive", ++ "type": "boolean" ++ }, ++ { ++ "name": "lossy", ++ "type": "boolean" ++ }, ++ { ++ "name": "acl", ++ "type": "boolean" ++ }, ++ { ++ "name": "x509verify", ++ "type": "string" ++ }, ++ { ++ "name": "tls", ++ "type": "boolean" ++ }, ++ { ++ "name": "sasl", ++ "type": "boolean" ++ }, ++ { ++ "name": "key-delay-ms", ++ "type": "number" ++ }, ++ { ++ "name": "lock-key-sync", ++ "type": "boolean" ++ }, ++ { ++ "name": "reverse", ++ "type": "boolean" ++ }, ++ { ++ "name": "password", ++ "type": "boolean" ++ }, ++ { ++ "name": "ipv6", ++ "type": "boolean" ++ }, ++ { ++ "name": "ipv4", ++ "type": "boolean" ++ }, ++ { ++ "name": "to", ++ "type": "number" ++ }, ++ { ++ "name": "connections", ++ "type": "number" ++ }, ++ { ++ "name": "head", ++ "type": "number" ++ }, ++ { ++ "name": "display", ++ "type": "string" ++ }, ++ { ++ "name": "share", ++ "type": "string" ++ }, ++ { ++ "name": "x509", ++ "type": "string" ++ }, ++ { ++ "name": "tls-creds", ++ "type": "string" ++ }, ++ { ++ "name": "websocket", ++ "type": "string" ++ }, ++ { ++ "name": "vnc", ++ "type": "string" ++ } ++ ], ++ "option": "vnc" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "gl", ++ "type": "boolean" ++ }, ++ { ++ "name": "seamless-migration", ++ "type": "boolean" ++ }, ++ { ++ "name": "playback-compression", ++ "type": "boolean" ++ }, ++ { ++ "name": "agent-mouse", ++ "type": "boolean" ++ }, ++ { ++ "name": "streaming-video", ++ "type": "string" ++ }, ++ { ++ "name": "zlib-glz-wan-compression", ++ "type": "string" ++ }, ++ { ++ "name": "jpeg-wan-compression", ++ "type": "string" ++ }, ++ { ++ "name": "image-compression", ++ "type": "string" ++ }, ++ { ++ "name": "plaintext-channel", ++ "type": "string" ++ }, ++ { ++ "name": "tls-channel", ++ "type": "string" ++ }, ++ { ++ "name": "tls-ciphers", ++ "type": "string" ++ }, ++ { ++ "name": "x509-dh-key-file", ++ "type": "string" ++ }, ++ { ++ "name": "x509-cacert-file", ++ "type": "string" ++ }, ++ { ++ "name": "x509-cert-file", ++ "type": "string" ++ }, ++ { ++ "name": "x509-key-password", ++ "type": "string" ++ }, ++ { ++ "name": "x509-key-file", ++ "type": "string" ++ }, ++ { ++ "name": "x509-dir", ++ "type": "string" ++ }, ++ { ++ "name": "sasl", ++ "type": "boolean" ++ }, ++ { ++ "name": "disable-agent-file-xfer", ++ "type": "boolean" ++ }, ++ { ++ "name": "disable-copy-paste", ++ "type": "boolean" ++ }, ++ { ++ "name": "disable-ticketing", ++ "type": "boolean" ++ }, ++ { ++ "name": "password", ++ "type": "string" ++ }, ++ { ++ "name": "unix", ++ "type": "boolean" ++ }, ++ { ++ "name": "ipv6", ++ "type": "boolean" ++ }, ++ { ++ "name": "ipv4", ++ "type": "boolean" ++ }, ++ { ++ "name": "addr", ++ "type": "string" ++ }, ++ { ++ "name": "tls-port", ++ "type": "number" ++ }, ++ { ++ "name": "port", ++ "type": "number" ++ } ++ ], ++ "option": "spice" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "smbios" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "acpi" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "sock_fd", ++ "type": "number" ++ }, ++ { ++ "name": "socket", ++ "type": "string" ++ }, ++ { ++ "name": "readonly", ++ "type": "boolean" ++ }, ++ { ++ "name": "writeout", ++ "type": "string" ++ }, ++ { ++ "name": "security_model", ++ "type": "string" ++ }, ++ { ++ "name": "mount_tag", ++ "type": "string" ++ }, ++ { ++ "name": "path", ++ "type": "string" ++ }, ++ { ++ "name": "fsdriver", ++ "type": "string" ++ } ++ ], ++ "option": "virtfs" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "sock_fd", ++ "type": "number" ++ }, ++ { ++ "name": "socket", ++ "type": "string" ++ }, ++ { ++ "name": "readonly", ++ "type": "boolean" ++ }, ++ { ++ "name": "writeout", ++ "type": "string" ++ }, ++ { ++ "name": "security_model", ++ "type": "string" ++ }, ++ { ++ "name": "path", ++ "type": "string" ++ }, ++ { ++ "name": "fsdriver", ++ "type": "string" ++ } ++ ], ++ "option": "fsdev" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "string", ++ "help": "Sets content of the blob to be inserted from a string", ++ "type": "string" ++ }, ++ { ++ "name": "file", ++ "help": "Sets the name of the file from which\nthe fw_cfg blob will be loaded", ++ "type": "string" ++ }, ++ { ++ "name": "name", ++ "help": "Sets the fw_cfg name of the blob to be inserted", ++ "type": "string" ++ } ++ ], ++ "option": "fw_cfg" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "arg", ++ "type": "string" ++ }, ++ { ++ "name": "target", ++ "type": "string" ++ }, ++ { ++ "name": "enable", ++ "type": "boolean" ++ } ++ ], ++ "option": "semihosting-config" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "rrfile", ++ "type": "string" ++ }, ++ { ++ "name": "rr", ++ "type": "string" ++ }, ++ { ++ "name": "sleep", ++ "type": "boolean" ++ }, ++ { ++ "name": "align", ++ "type": "boolean" ++ }, ++ { ++ "name": "shift", ++ "type": "string" ++ } ++ ], ++ "option": "icount" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "numa" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "debug-threads", ++ "help": "When enabled, name the individual threads; defaults off.\nNOTE: The thread names are for debugging and not a\nstable API.", ++ "type": "boolean" ++ }, ++ { ++ "name": "process", ++ "help": "Sets the name of the QEMU process, as shown in top etc", ++ "type": "string" ++ }, ++ { ++ "name": "guest", ++ "help": "Sets the name of the guest.\nThis name will be displayed in the SDL window caption.\nThe name will also be used for the VNC server", ++ "type": "string" ++ } ++ ], ++ "option": "name" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "timestamp", ++ "type": "boolean" ++ } ++ ], ++ "option": "msg" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "mlock", ++ "type": "boolean" ++ } ++ ], ++ "option": "realtime" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "tpmdev" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "object" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "opaque", ++ "help": "free-form string used to describe fd", ++ "type": "string" ++ }, ++ { ++ "name": "set", ++ "help": "ID of the fd set to add fd to", ++ "type": "number" ++ }, ++ { ++ "name": "fd", ++ "help": "file descriptor of which a duplicate is added to fd set", ++ "type": "number" ++ } ++ ], ++ "option": "add-fd" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "enable", ++ "type": "boolean" ++ } ++ ], ++ "option": "sandbox" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "strict", ++ "type": "boolean" ++ }, ++ { ++ "name": "reboot-timeout", ++ "type": "string" ++ }, ++ { ++ "name": "splash-time", ++ "type": "string" ++ }, ++ { ++ "name": "splash", ++ "type": "string" ++ }, ++ { ++ "name": "menu", ++ "type": "boolean" ++ }, ++ { ++ "name": "once", ++ "type": "string" ++ }, ++ { ++ "name": "order", ++ "type": "string" ++ } ++ ], ++ "option": "boot-opts" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "maxcpus", ++ "type": "number" ++ }, ++ { ++ "name": "threads", ++ "type": "number" ++ }, ++ { ++ "name": "cores", ++ "type": "number" ++ }, ++ { ++ "name": "sockets", ++ "type": "number" ++ }, ++ { ++ "name": "cpus", ++ "type": "number" ++ } ++ ], ++ "option": "smp-opts" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "maxmem", ++ "type": "size" ++ }, ++ { ++ "name": "slots", ++ "type": "number" ++ }, ++ { ++ "name": "size", ++ "type": "size" ++ } ++ ], ++ "option": "memory" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "dea-key-wrap", ++ "help": "enable/disable DEA key wrapping using the CPACF wrapping key", ++ "type": "boolean" ++ }, ++ { ++ "name": "aes-key-wrap", ++ "help": "enable/disable AES key wrapping using the CPACF wrapping key", ++ "type": "boolean" ++ }, ++ { ++ "name": "suppress-vmdesc", ++ "help": "Set on to disable self-describing migration", ++ "type": "boolean" ++ }, ++ { ++ "name": "iommu", ++ "help": "Set on/off to enable/disable Intel IOMMU (VT-d)", ++ "type": "boolean" ++ }, ++ { ++ "name": "firmware", ++ "help": "firmware image", ++ "type": "string" ++ }, ++ { ++ "name": "usb", ++ "help": "Set on/off to enable/disable usb", ++ "type": "boolean" ++ }, ++ { ++ "name": "mem-merge", ++ "help": "enable/disable memory merge support", ++ "type": "boolean" ++ }, ++ { ++ "name": "dump-guest-core", ++ "help": "Include guest memory in a core dump", ++ "type": "boolean" ++ }, ++ { ++ "name": "dt_compatible", ++ "help": "Overrides the \"compatible\" property of the dt root node", ++ "type": "string" ++ }, ++ { ++ "name": "phandle_start", ++ "help": "The first phandle ID we may generate dynamically", ++ "type": "number" ++ }, ++ { ++ "name": "dumpdtb", ++ "help": "Dump current dtb to a file and quit", ++ "type": "string" ++ }, ++ { ++ "name": "dtb", ++ "help": "Linux kernel device tree file", ++ "type": "string" ++ }, ++ { ++ "name": "append", ++ "help": "Linux kernel command line", ++ "type": "string" ++ }, ++ { ++ "name": "initrd", ++ "help": "Linux initial ramdisk file", ++ "type": "string" ++ }, ++ { ++ "name": "kernel", ++ "help": "Linux kernel image file", ++ "type": "string" ++ }, ++ { ++ "name": "kvm_shadow_mem", ++ "help": "KVM shadow MMU size", ++ "type": "size" ++ }, ++ { ++ "name": "kernel_irqchip", ++ "help": "use KVM in-kernel irqchip", ++ "type": "boolean" ++ }, ++ { ++ "name": "accel", ++ "help": "accelerator list", ++ "type": "string" ++ }, ++ { ++ "name": "type", ++ "help": "emulated machine", ++ "type": "string" ++ } ++ ], ++ "option": "machine" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "romfile", ++ "type": "string" ++ }, ++ { ++ "name": "bootindex", ++ "type": "number" ++ } ++ ], ++ "option": "option-rom" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "file", ++ "type": "string" ++ }, ++ { ++ "name": "events", ++ "type": "string" ++ }, ++ { ++ "name": "enable", ++ "type": "string" ++ } ++ ], ++ "option": "trace" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "pretty", ++ "type": "boolean" ++ }, ++ { ++ "name": "default", ++ "type": "boolean" ++ }, ++ { ++ "name": "chardev", ++ "type": "string" ++ }, ++ { ++ "name": "mode", ++ "type": "string" ++ } ++ ], ++ "option": "mon" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "value", ++ "type": "string" ++ }, ++ { ++ "name": "property", ++ "type": "string" ++ }, ++ { ++ "name": "driver", ++ "type": "string" ++ } ++ ], ++ "option": "global" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "driftfix", ++ "type": "string" ++ }, ++ { ++ "name": "clock", ++ "type": "string" ++ }, ++ { ++ "name": "base", ++ "type": "string" ++ } ++ ], ++ "option": "rtc" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "net" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "netdev" ++ }, ++ { ++ "parameters": [ ++ ], ++ "option": "device" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "logappend", ++ "type": "boolean" ++ }, ++ { ++ "name": "logfile", ++ "type": "string" ++ }, ++ { ++ "name": "append", ++ "type": "boolean" ++ }, ++ { ++ "name": "chardev", ++ "type": "string" ++ }, ++ { ++ "name": "size", ++ "type": "size" ++ }, ++ { ++ "name": "debug", ++ "type": "number" ++ }, ++ { ++ "name": "name", ++ "type": "string" ++ }, ++ { ++ "name": "signal", ++ "type": "boolean" ++ }, ++ { ++ "name": "mux", ++ "type": "boolean" ++ }, ++ { ++ "name": "rows", ++ "type": "number" ++ }, ++ { ++ "name": "cols", ++ "type": "number" ++ }, ++ { ++ "name": "height", ++ "type": "number" ++ }, ++ { ++ "name": "width", ++ "type": "number" ++ }, ++ { ++ "name": "tls-creds", ++ "type": "string" ++ }, ++ { ++ "name": "telnet", ++ "type": "boolean" ++ }, ++ { ++ "name": "reconnect", ++ "type": "number" ++ }, ++ { ++ "name": "delay", ++ "type": "boolean" ++ }, ++ { ++ "name": "server", ++ "type": "boolean" ++ }, ++ { ++ "name": "wait", ++ "type": "boolean" ++ }, ++ { ++ "name": "ipv6", ++ "type": "boolean" ++ }, ++ { ++ "name": "ipv4", ++ "type": "boolean" ++ }, ++ { ++ "name": "to", ++ "type": "number" ++ }, ++ { ++ "name": "localport", ++ "type": "string" ++ }, ++ { ++ "name": "localaddr", ++ "type": "string" ++ }, ++ { ++ "name": "port", ++ "type": "string" ++ }, ++ { ++ "name": "host", ++ "type": "string" ++ }, ++ { ++ "name": "path", ++ "type": "string" ++ }, ++ { ++ "name": "backend", ++ "type": "string" ++ } ++ ], ++ "option": "chardev" ++ }, ++ { ++ "parameters": [ ++ { ++ "name": "copy-on-read", ++ "help": "copy read data from backing file into image file", ++ "type": "boolean" ++ }, ++ { ++ "name": "werror", ++ "help": "write error action", ++ "type": "string" ++ }, ++ { ++ "name": "rerror", ++ "help": "read error action", ++ "type": "string" ++ }, ++ { ++ "name": "read-only", ++ "help": "open drive file as read-only", ++ "type": "boolean" ++ }, ++ { ++ "name": "file", ++ "help": "file name", ++ "type": "string" ++ }, ++ { ++ "name": "serial", ++ "help": "disk serial number", ++ "type": "string" ++ }, ++ { ++ "name": "addr", ++ "help": "pci address (virtio only)", ++ "type": "string" ++ }, ++ { ++ "name": "boot", ++ "help": "(deprecated, ignored)", ++ "type": "boolean" ++ }, ++ { ++ "name": "trans", ++ "help": "chs translation (auto, lba, none)", ++ "type": "string" ++ }, ++ { ++ "name": "secs", ++ "help": "number of sectors (ide disk geometry)", ++ "type": "number" ++ }, ++ { ++ "name": "heads", ++ "help": "number of heads (ide disk geometry)", ++ "type": "number" ++ }, ++ { ++ "name": "cyls", ++ "help": "number of cylinders (ide disk geometry)", ++ "type": "number" ++ }, ++ { ++ "name": "if", ++ "help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", ++ "type": "string" ++ }, ++ { ++ "name": "media", ++ "help": "media type (disk, cdrom)", ++ "type": "string" ++ }, ++ { ++ "name": "index", ++ "help": "index number", ++ "type": "number" ++ }, ++ { ++ "name": "unit", ++ "help": "unit number (i.e. lun for scsi)", ++ "type": "number" ++ }, ++ { ++ "name": "bus", ++ "help": "bus number", ++ "type": "number" ++ }, ++ { ++ "name": "stats-account-failed", ++ "help": "whether to account for failed I/O operations in the statistics", ++ "type": "boolean" ++ }, ++ { ++ "name": "stats-account-invalid", ++ "help": "whether to account for invalid I/O operations in the statistics", ++ "type": "boolean" ++ }, ++ { ++ "name": "detect-zeroes", ++ "help": "try to optimize zero writes (off, on, unmap)", ++ "type": "string" ++ }, ++ { ++ "name": "throttling.group", ++ "help": "name of the block throttling group", ++ "type": "string" ++ }, ++ { ++ "name": "throttling.iops-size", ++ "help": "when limiting by iops max size of an I/O in bytes", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-write-max-length", ++ "help": "length of the bps-write-max burst period, in seconds", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-read-max-length", ++ "help": "length of the bps-read-max burst period, in seconds", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-total-max-length", ++ "help": "length of the bps-total-max burst period, in seconds", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-write-max-length", ++ "help": "length of the iops-write-max burst period, in seconds", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-read-max-length", ++ "help": "length of the iops-read-max burst period, in seconds", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-total-max-length", ++ "help": "length of the iops-total-max burst period, in seconds", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-write-max", ++ "help": "total bytes write burst", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-read-max", ++ "help": "total bytes read burst", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-total-max", ++ "help": "total bytes burst", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-write-max", ++ "help": "I/O operations write burst", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-read-max", ++ "help": "I/O operations read burst", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-total-max", ++ "help": "I/O operations burst", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-write", ++ "help": "limit write bytes per second", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-read", ++ "help": "limit read bytes per second", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.bps-total", ++ "help": "limit total bytes per second", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-write", ++ "help": "limit write operations per second", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-read", ++ "help": "limit read operations per second", ++ "type": "number" ++ }, ++ { ++ "name": "throttling.iops-total", ++ "help": "limit total I/O operations per second", ++ "type": "number" ++ }, ++ { ++ "name": "werror", ++ "help": "write error action", ++ "type": "string" ++ }, ++ { ++ "name": "format", ++ "help": "disk format (raw, qcow2, ...)", ++ "type": "string" ++ }, ++ { ++ "name": "cache.writeback", ++ "help": "Enable writeback mode", ++ "type": "boolean" ++ }, ++ { ++ "name": "aio", ++ "help": "host AIO implementation (threads, native)", ++ "type": "string" ++ }, ++ { ++ "name": "discard", ++ "help": "discard operation (ignore/off, unmap/on)", ++ "type": "string" ++ }, ++ { ++ "name": "snapshot", ++ "help": "enable/disable snapshot mode", ++ "type": "boolean" ++ } ++ ], ++ "option": "drive" ++ } ++ ], ++ "id": "libvirt-45" ++} ++ ++{ ++ "return": [ ++ { ++ "state": false, ++ "capability": "xbzrle" ++ }, ++ { ++ "state": false, ++ "capability": "rdma-pin-all" ++ }, ++ { ++ "state": false, ++ "capability": "auto-converge" ++ }, ++ { ++ "state": false, ++ "capability": "zero-blocks" ++ }, ++ { ++ "state": false, ++ "capability": "compress" ++ }, ++ { ++ "state": false, ++ "capability": "events" ++ }, ++ { ++ "state": false, ++ "capability": "postcopy-ram" ++ } ++ ], ++ "id": "libvirt-46" ++} +diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +new file mode 100644 +index 0000000..8fb66d2 +--- /dev/null ++++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +@@ -0,0 +1,254 @@ ++ ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 2006091 ++ 0 ++ (v2.7.0-rc1-52-g42e0d60) ++ x86_64 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c +index b98f775..d5ed65e 100644 +--- a/tests/qemucapabilitiestest.c ++++ b/tests/qemucapabilitiestest.c +@@ -115,6 +115,7 @@ mymain(void) + DO_TEST("x86_64", "caps_2.4.0"); + DO_TEST("x86_64", "caps_2.5.0"); + DO_TEST("x86_64", "caps_2.6.0"); ++ DO_TEST("x86_64", "caps_2.7.0"); + DO_TEST("aarch64", "caps_2.6.0-gicv2"); + DO_TEST("aarch64", "caps_2.6.0-gicv3"); + DO_TEST("ppc64le", "caps_2.6.0"); +-- +2.10.0 + diff --git a/SOURCES/libvirt-tests-qemuxml2xml-Format-status-XML-header-dynamically.patch b/SOURCES/libvirt-tests-qemuxml2xml-Format-status-XML-header-dynamically.patch new file mode 100644 index 0000000..b58223a --- /dev/null +++ b/SOURCES/libvirt-tests-qemuxml2xml-Format-status-XML-header-dynamically.patch @@ -0,0 +1,186 @@ +From e4c5a6e99b4e0f7a2314a72b4aaf20362c93bf71 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:10:46 -0400 +Subject: [PATCH] tests: qemuxml2xml: Format status XML header dynamically + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +Status XML tests were done by prepending a constant string to an +existing XML. With the planned changes the header will depend on data +present in the definition rather than just on the data that was parsed. + +The first dynamic element in the header will be the vcpu thread list. +Reuse and rename qemuXML2XMLPreFormatCallback for gathering the relevant +data when checking the active XML parsing and formating and pass the +bitmap to a newly crated header generator. + +(cherry picked from commit 7615917a0acec668c3e229148bda11aa3694db00) +--- + tests/qemuxml2xmltest.c | 74 +++++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 63 insertions(+), 11 deletions(-) + +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index a757fdb..573899f 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -33,13 +33,21 @@ struct testInfo { + char *outActiveName; + char *outInactiveName; + ++ virBitmapPtr activeVcpus; ++ + virQEMUCapsPtr qemuCaps; + }; + + static int +-qemuXML2XMLPreFormatCallback(virDomainDefPtr def ATTRIBUTE_UNUSED, +- const void *opaque ATTRIBUTE_UNUSED) ++qemuXML2XMLActivePreFormatCallback(virDomainDefPtr def, ++ const void *opaque) + { ++ struct testInfo *info = (struct testInfo *) opaque; ++ ++ /* store vCPU bitmap so that the status XML can be created faithfully */ ++ if (!info->activeVcpus) ++ info->activeVcpus = virDomainDefGetOnlineVcpumap(def); ++ + return 0; + } + +@@ -50,7 +58,8 @@ testXML2XMLActive(const void *opaque) + + return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, + info->inName, info->outActiveName, true, +- qemuXML2XMLPreFormatCallback, opaque, 0, ++ qemuXML2XMLActivePreFormatCallback, ++ opaque, 0, + TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS); + } + +@@ -62,18 +71,17 @@ testXML2XMLInactive(const void *opaque) + + return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName, + info->outInactiveName, false, +- qemuXML2XMLPreFormatCallback, opaque, 0, ++ NULL, opaque, 0, + TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS); + } + + +-static const char testStatusXMLPrefix[] = ++static const char testStatusXMLPrefixHeader[] = + "\n" + " \n" +-" \n" +-" \n" +-" \n" +-" \n" ++" \n"; ++ ++static const char testStatusXMLPrefixFooter[] = + " \n" + " \n" + " \n" +@@ -95,6 +103,40 @@ static const char testStatusXMLSuffix[] = + "\n"; + + ++static void ++testGetStatuXMLPrefixVcpus(virBufferPtr buf, ++ const struct testInfo *data) ++{ ++ ssize_t vcpuid = -1; ++ ++ virBufferAddLit(buf, "\n"); ++ virBufferAdjustIndent(buf, 2); ++ ++ while ((vcpuid = virBitmapNextSetBit(data->activeVcpus, vcpuid)) >= 0) ++ virBufferAsprintf(buf, "\n", vcpuid + 3803519); ++ ++ virBufferAdjustIndent(buf, -2); ++ virBufferAddLit(buf, "\n"); ++} ++ ++ ++static char * ++testGetStatusXMLPrefix(const struct testInfo *data) ++{ ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ ++ virBufferAdd(&buf, testStatusXMLPrefixHeader, -1); ++ virBufferAdjustIndent(&buf, 2); ++ ++ testGetStatuXMLPrefixVcpus(&buf, data); ++ ++ virBufferAdjustIndent(&buf, -2); ++ virBufferAdd(&buf, testStatusXMLPrefixFooter, -1); ++ ++ return virBufferContentAndReset(&buf); ++} ++ ++ + static int + testCompareStatusXMLToXMLFiles(const void *opaque) + { +@@ -105,6 +147,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque) + char *expect = NULL; + char *actual = NULL; + char *source = NULL; ++ char *header = NULL; + char *inFile = NULL, *outActiveFile = NULL; + int ret = -1; + int keepBlanksDefault = xmlKeepBlanksDefault(0); +@@ -114,8 +157,11 @@ testCompareStatusXMLToXMLFiles(const void *opaque) + if (virTestLoadFile(data->outActiveName, &outActiveFile) < 0) + goto cleanup; + ++ if (!(header = testGetStatusXMLPrefix(data))) ++ goto cleanup; ++ + /* construct faked source status XML */ +- virBufferAdd(&buf, testStatusXMLPrefix, -1); ++ virBufferAdd(&buf, header, -1); + virBufferAdjustIndent(&buf, 2); + virBufferAddStr(&buf, inFile); + virBufferAdjustIndent(&buf, -2); +@@ -127,7 +173,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque) + } + + /* construct the expect string */ +- virBufferAdd(&buf, testStatusXMLPrefix, -1); ++ virBufferAdd(&buf, header, -1); + virBufferAdjustIndent(&buf, 2); + virBufferAddStr(&buf, outActiveFile); + virBufferAdjustIndent(&buf, -2); +@@ -175,6 +221,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque) + VIR_FREE(actual); + VIR_FREE(source); + VIR_FREE(inFile); ++ VIR_FREE(header); + VIR_FREE(outActiveFile); + return ret; + } +@@ -187,6 +234,9 @@ testInfoFree(struct testInfo *info) + VIR_FREE(info->outActiveName); + VIR_FREE(info->outInactiveName); + ++ virBitmapFree(info->activeVcpus); ++ info->activeVcpus = NULL; ++ + virObjectUnref(info->qemuCaps); + } + +@@ -261,6 +311,8 @@ mymain(void) + struct testInfo info; + virQEMUDriverConfigPtr cfg = NULL; + ++ memset(&info, 0, sizeof(info)); ++ + if (qemuTestDriverInit(&driver) < 0) + return EXIT_FAILURE; + +-- +2.10.0 + diff --git a/SOURCES/libvirt-tools-Make-use-of-the-correct-environment-variables.patch b/SOURCES/libvirt-tools-Make-use-of-the-correct-environment-variables.patch new file mode 100644 index 0000000..c7ec5e1 --- /dev/null +++ b/SOURCES/libvirt-tools-Make-use-of-the-correct-environment-variables.patch @@ -0,0 +1,145 @@ +From 25ae7dad87e5b44a6fa6e5da11a85ab1baba5af8 Mon Sep 17 00:00:00 2001 +Message-Id: <25ae7dad87e5b44a6fa6e5da11a85ab1baba5af8@dist-git> +From: Erik Skultety +Date: Tue, 2 Aug 2016 09:55:53 +0200 +Subject: [PATCH] tools: Make use of the correct environment variables + +Since commit 834c5720 which extracted the generic functionality out of virsh +and made it available for other clients like virt-admin to make use of it, it +also introduced a bug when it renamed the original VIRSH_ environment variables +to VSH_ variables. Virt-admin of course suffers from the same bug, so this +patch modifies the generic module vsh.c to construct the correct name for +environment variables of each client from information it has. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1357363 + +Signed-off-by: Erik Skultety +(cherry picked from commit d02ef33451a0d84692f32fe0877d621bfe243f50) +Signed-off-by: Erik Skultety + + Conflicts: + tools/vsh.c - variable in upstream virsh/virt-admin auto-completion + support caused this fix to be inapplicable +--- + tools/virsh.c | 1 + + tools/virt-admin.c | 1 + + tools/vsh.c | 23 ++++++++++++----------- + tools/vsh.h | 1 + + 4 files changed, 15 insertions(+), 11 deletions(-) + +diff --git a/tools/virsh.c b/tools/virsh.c +index 5dc482d..f74698f 100644 +--- a/tools/virsh.c ++++ b/tools/virsh.c +@@ -935,6 +935,7 @@ main(int argc, char **argv) + memset(ctl, 0, sizeof(vshControl)); + memset(&virshCtl, 0, sizeof(virshControl)); + ctl->name = "virsh"; /* hardcoded name of the binary */ ++ ctl->env_prefix = "VIRSH"; + ctl->log_fd = -1; /* Initialize log file descriptor */ + ctl->debug = VSH_DEBUG_DEFAULT; + ctl->hooks = &hooks; +diff --git a/tools/virt-admin.c b/tools/virt-admin.c +index a59c4c7..2ae05da 100644 +--- a/tools/virt-admin.c ++++ b/tools/virt-admin.c +@@ -1340,6 +1340,7 @@ main(int argc, char **argv) + memset(ctl, 0, sizeof(vshControl)); + memset(&virtAdminCtl, 0, sizeof(vshAdmControl)); + ctl->name = "virt-admin"; /* hardcoded name of the binary */ ++ ctl->env_prefix = "VIRT_ADMIN"; + ctl->log_fd = -1; /* Initialize log file descriptor */ + ctl->debug = VSH_DEBUG_DEFAULT; + ctl->hooks = &hooks; +diff --git a/tools/vsh.c b/tools/vsh.c +index 2f564e6..79709ab 100644 +--- a/tools/vsh.c ++++ b/tools/vsh.c +@@ -2611,16 +2611,10 @@ static int + vshReadlineInit(vshControl *ctl) + { + char *userdir = NULL; +- char *name_capitalized = NULL; + int max_history = 500; + int ret = -1; + char *histsize_env = NULL; + const char *histsize_str = NULL; +- const char *strings[] = { +- name_capitalized, +- "HISTSIZE", +- NULL +- }; + + /* Allow conditional parsing of the ~/.inputrc file. + * Work around ancient readline 4.1 (hello Mac OS X), +@@ -2631,8 +2625,7 @@ vshReadlineInit(vshControl *ctl) + /* Tell the completer that we want a crack first. */ + rl_attempted_completion_function = vshReadlineCompletion; + +- if (virStringToUpper(&name_capitalized, ctl->name) < 0 || +- !(histsize_env = virStringJoin(strings, "_"))) ++ if (virAsprintf(&histsize_env, "%s_HISTSIZE", ctl->env_prefix) < 0) + goto cleanup; + + /* Limit the total size of the history buffer */ +@@ -2674,7 +2667,6 @@ vshReadlineInit(vshControl *ctl) + + cleanup: + VIR_FREE(userdir); +- VIR_FREE(name_capitalized); + VIR_FREE(histsize_env); + return ret; + } +@@ -2746,10 +2738,14 @@ static int + vshInitDebug(vshControl *ctl) + { + const char *debugEnv; ++ char *env = NULL; + + if (ctl->debug == VSH_DEBUG_DEFAULT) { ++ if (virAsprintf(&env, "%s_DEBUG", ctl->env_prefix) < 0) ++ return -1; ++ + /* log level not set from commandline, check env variable */ +- debugEnv = virGetEnvAllowSUID("VSH_DEBUG"); ++ debugEnv = virGetEnvAllowSUID(env); + if (debugEnv) { + int debug; + if (virStrToLong_i(debugEnv, NULL, 10, &debug) < 0 || +@@ -2760,15 +2756,20 @@ vshInitDebug(vshControl *ctl) + ctl->debug = debug; + } + } ++ VIR_FREE(env); + } + + if (ctl->logfile == NULL) { ++ if (virAsprintf(&env, "%s_LOG_FILE", ctl->env_prefix) < 0) ++ return -1; ++ + /* log file not set from cmdline */ +- debugEnv = virGetEnvBlockSUID("VSH_LOG_FILE"); ++ debugEnv = virGetEnvBlockSUID(env); + if (debugEnv && *debugEnv) { + ctl->logfile = vshStrdup(ctl, debugEnv); + vshOpenLogFile(ctl); + } ++ VIR_FREE(env); + } + + return 0; +diff --git a/tools/vsh.h b/tools/vsh.h +index 8d67397..7f43055 100644 +--- a/tools/vsh.h ++++ b/tools/vsh.h +@@ -197,6 +197,7 @@ struct _vshControl { + const char *name; /* hardcoded name of the binary that cannot + * be changed without recompilation compared + * to program name */ ++ const char *env_prefix; /* hardcoded environment variable prefix */ + char *connname; /* connection name */ + char *progname; /* program name */ + vshCmd *cmd; /* the current command */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-Add-getters-for-cgroup-block-device-I-O-throttling.patch b/SOURCES/libvirt-util-Add-getters-for-cgroup-block-device-I-O-throttling.patch deleted file mode 100644 index 8c060ec..0000000 --- a/SOURCES/libvirt-util-Add-getters-for-cgroup-block-device-I-O-throttling.patch +++ /dev/null @@ -1,383 +0,0 @@ -From 69936a5d5fa55ae387ca24e978aa4529ca252b75 Mon Sep 17 00:00:00 2001 -Message-Id: <69936a5d5fa55ae387ca24e978aa4529ca252b75@dist-git> -From: Martin Kletzander -Date: Tue, 18 Aug 2015 17:28:00 -0700 -Subject: [PATCH] util: Add getters for cgroup block device I/O throttling - -https://bugzilla.redhat.com/show_bug.cgi?id=1165580 - -Since now they were not needed, but I sense they will be in a short -while. - -Signed-off-by: Martin Kletzander -(cherry picked from commit 89c509a0c1857883d0627919e21f7600648ab81c) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 5 + - src/util/vircgroup.c | 280 ++++++++++++++++++++++++++++++++++++++++++++++- - src/util/vircgroup.h | 20 ++++ - 3 files changed, 302 insertions(+), 3 deletions(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index a170214..be85c6b 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1177,6 +1177,11 @@ virCgroupDenyDeviceMajor; - virCgroupDenyDevicePath; - virCgroupDetectMountsFromFile; - virCgroupFree; -+virCgroupGetBlkioDeviceReadBps; -+virCgroupGetBlkioDeviceReadIops; -+virCgroupGetBlkioDeviceWeight; -+virCgroupGetBlkioDeviceWriteBps; -+virCgroupGetBlkioDeviceWriteIops; - virCgroupGetBlkioIoDeviceServiced; - virCgroupGetBlkioIoServiced; - virCgroupGetBlkioWeight; -diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c -index afa85de..c94512a 100644 ---- a/src/util/vircgroup.c -+++ b/src/util/vircgroup.c -@@ -804,6 +804,39 @@ virCgroupGetValueStr(virCgroupPtr group, - - - static int -+virCgroupGetValueForBlkDev(virCgroupPtr group, -+ int controller, -+ const char *key, -+ const char *path, -+ char **value) -+{ -+ char *prefix = NULL; -+ char *str = NULL; -+ char **lines = NULL; -+ int ret = -1; -+ -+ if (virCgroupGetValueStr(group, controller, key, &str) < 0) -+ goto error; -+ -+ if (!(prefix = virCgroupGetBlockDevString(path))) -+ goto error; -+ -+ if (!(lines = virStringSplit(str, "\n", -1))) -+ goto error; -+ -+ if (VIR_STRDUP(*value, virStringGetFirstWithPrefix(lines, prefix)) < 0) -+ goto error; -+ -+ ret = 0; -+ error: -+ VIR_FREE(str); -+ VIR_FREE(prefix); -+ virStringFreeList(lines); -+ return ret; -+} -+ -+ -+static int - virCgroupSetValueU64(virCgroupPtr group, - int controller, - const char *key, -@@ -2259,9 +2292,6 @@ virCgroupSetBlkioDeviceWriteBps(virCgroupPtr group, - * @weight: The new device weight (100-1000), - * (10-1000) after kernel 2.6.39, or 0 to clear - * -- * device_weight is treated as a write-only parameter, so -- * there isn't a getter counterpart. -- * - * Returns: 0 on success, -1 on error - */ - int -@@ -2289,6 +2319,196 @@ virCgroupSetBlkioDeviceWeight(virCgroupPtr group, - return ret; - } - -+/** -+ * virCgroupGetBlkioDeviceReadIops: -+ * @group: The cgroup to gather block io setting for -+ * @path: The path of device -+ * @riops: Returned device read iops throttle, 0 if there is none -+ * -+ * Returns: 0 on success, -1 on error -+ */ -+int -+virCgroupGetBlkioDeviceReadIops(virCgroupPtr group, -+ const char *path, -+ unsigned int *riops) -+{ -+ char *str = NULL; -+ int ret = -1; -+ -+ if (virCgroupGetValueForBlkDev(group, -+ VIR_CGROUP_CONTROLLER_BLKIO, -+ "blkio.throttle.read_iops_device", -+ path, -+ &str) < 0) -+ goto error; -+ -+ if (!str) { -+ *riops = 0; -+ } else if (virStrToLong_ui(str, NULL, 10, riops) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unable to parse '%s' as an integer"), -+ str); -+ goto error; -+ } -+ -+ ret = 0; -+ error: -+ VIR_FREE(str); -+ return ret; -+} -+ -+/** -+ * virCgroupGetBlkioDeviceWriteIops: -+ * @group: The cgroup to gather block io setting for -+ * @path: The path of device -+ * @wiops: Returned device write iops throttle, 0 if there is none -+ * -+ * Returns: 0 on success, -1 on error -+ */ -+int -+virCgroupGetBlkioDeviceWriteIops(virCgroupPtr group, -+ const char *path, -+ unsigned int *wiops) -+{ -+ char *str = NULL; -+ int ret = -1; -+ -+ if (virCgroupGetValueForBlkDev(group, -+ VIR_CGROUP_CONTROLLER_BLKIO, -+ "blkio.throttle.write_iops_device", -+ path, -+ &str) < 0) -+ goto error; -+ -+ if (!str) { -+ *wiops = 0; -+ } else if (virStrToLong_ui(str, NULL, 10, wiops) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unable to parse '%s' as an integer"), -+ str); -+ goto error; -+ } -+ -+ ret = 0; -+ error: -+ VIR_FREE(str); -+ return ret; -+} -+ -+/** -+ * virCgroupGetBlkioDeviceReadBps: -+ * @group: The cgroup to gather block io setting for -+ * @path: The path of device -+ * @rbps: Returned device read bps throttle, 0 if there is none -+ * -+ * Returns: 0 on success, -1 on error -+ */ -+int -+virCgroupGetBlkioDeviceReadBps(virCgroupPtr group, -+ const char *path, -+ unsigned long long *rbps) -+{ -+ char *str = NULL; -+ int ret = -1; -+ -+ if (virCgroupGetValueForBlkDev(group, -+ VIR_CGROUP_CONTROLLER_BLKIO, -+ "blkio.throttle.read_bps_device", -+ path, -+ &str) < 0) -+ goto error; -+ -+ if (!str) { -+ *rbps = 0; -+ } else if (virStrToLong_ull(str, NULL, 10, rbps) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unable to parse '%s' as an integer"), -+ str); -+ goto error; -+ } -+ -+ ret = 0; -+ error: -+ VIR_FREE(str); -+ return ret; -+} -+ -+/** -+ * virCgroupGetBlkioDeviceWriteBps: -+ * @group: The cgroup to gather block io setting for -+ * @path: The path of device -+ * @wbps: Returned device write bps throttle, 0 if there is none -+ * -+ * Returns: 0 on success, -1 on error -+ */ -+int -+virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group, -+ const char *path, -+ unsigned long long *wbps) -+{ -+ char *str = NULL; -+ int ret = -1; -+ -+ if (virCgroupGetValueForBlkDev(group, -+ VIR_CGROUP_CONTROLLER_BLKIO, -+ "blkio.throttle.write_bps_device", -+ path, -+ &str) < 0) -+ goto error; -+ -+ if (!str) { -+ *wbps = 0; -+ } else if (virStrToLong_ull(str, NULL, 10, wbps) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unable to parse '%s' as an integer"), -+ str); -+ goto error; -+ } -+ -+ ret = 0; -+ error: -+ VIR_FREE(str); -+ return ret; -+} -+ -+/** -+ * virCgroupGetBlkioDeviceWeight: -+ * @group: The cgroup to gather block io setting for -+ * @path: The path of device -+ * @weight: Returned device weight, 0 if there is none -+ * -+ * Returns: 0 on success, -1 on error -+ */ -+int -+virCgroupGetBlkioDeviceWeight(virCgroupPtr group, -+ const char *path, -+ unsigned int *weight) -+{ -+ char *str = NULL; -+ int ret = -1; -+ -+ if (virCgroupGetValueForBlkDev(group, -+ VIR_CGROUP_CONTROLLER_BLKIO, -+ "blkio.weight_device", -+ path, -+ &str) < 0) -+ goto error; -+ -+ if (!str) { -+ *weight = 0; -+ } else if (virStrToLong_ui(str, NULL, 10, weight) < 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Unable to parse '%s' as an integer"), -+ str); -+ goto error; -+ } -+ -+ ret = 0; -+ error: -+ VIR_FREE(str); -+ return ret; -+} -+ - - /** - * virCgroupSetMemory: -@@ -4204,6 +4424,60 @@ virCgroupSetBlkioDeviceWriteBps(virCgroupPtr group ATTRIBUTE_UNUSED, - return -1; - } - -+int -+virCgroupGetBlkioDeviceWeight(virCgroupPtr group ATTRIBUTE_UNUSED, -+ const char *path ATTRIBUTE_UNUSED, -+ const char *dev_str ATTRIBUTE_UNUSED, -+ unsigned int weight ATTRIBUTE_UNUSED) -+{ -+ virReportSystemError(ENOSYS, "%s", -+ _("Control groups not supported on this platform")); -+ return -1; -+} -+ -+int -+virCgroupGetBlkioDeviceReadIops(virCgroupPtr group ATTRIBUTE_UNUSED, -+ const char *path ATTRIBUTE_UNUSED, -+ const char *dev_str ATTRIBUTE_UNUSED, -+ unsigned int riops ATTRIBUTE_UNUSED) -+{ -+ virReportSystemError(ENOSYS, "%s", -+ _("Control groups not supported on this platform")); -+ return -1; -+} -+ -+int -+virCgroupGetBlkioDeviceWriteIops(virCgroupPtr group ATTRIBUTE_UNUSED, -+ const char *path ATTRIBUTE_UNUSED, -+ const char *dev_str ATTRIBUTE_UNUSED, -+ unsigned int wiops ATTRIBUTE_UNUSED) -+{ -+ virReportSystemError(ENOSYS, "%s", -+ _("Control groups not supported on this platform")); -+ return -1; -+} -+ -+int -+virCgroupGetBlkioDeviceReadBps(virCgroupPtr group ATTRIBUTE_UNUSED, -+ const char *path ATTRIBUTE_UNUSED, -+ const char *dev_str ATTRIBUTE_UNUSED, -+ unsigned long long rbps ATTRIBUTE_UNUSED) -+{ -+ virReportSystemError(ENOSYS, "%s", -+ _("Control groups not supported on this platform")); -+ return -1; -+} -+ -+int -+virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group ATTRIBUTE_UNUSED, -+ const char *path ATTRIBUTE_UNUSED, -+ const char *dev_str ATTRIBUTE_UNUSED, -+ unsigned long long wbps ATTRIBUTE_UNUSED) -+{ -+ virReportSystemError(ENOSYS, "%s", -+ _("Control groups not supported on this platform")); -+ return -1; -+} - - int - virCgroupSetMemory(virCgroupPtr group ATTRIBUTE_UNUSED, -diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h -index 675a185..63a9e1c 100644 ---- a/src/util/vircgroup.h -+++ b/src/util/vircgroup.h -@@ -169,6 +169,26 @@ int virCgroupSetBlkioDeviceWriteBps(virCgroupPtr group, - const char *path, - unsigned long long wbps); - -+int virCgroupGetBlkioDeviceWeight(virCgroupPtr group, -+ const char *path, -+ unsigned int *weight); -+ -+int virCgroupGetBlkioDeviceReadIops(virCgroupPtr group, -+ const char *path, -+ unsigned int *riops); -+ -+int virCgroupGetBlkioDeviceWriteIops(virCgroupPtr group, -+ const char *path, -+ unsigned int *wiops); -+ -+int virCgroupGetBlkioDeviceReadBps(virCgroupPtr group, -+ const char *path, -+ unsigned long long *rbps); -+ -+int virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group, -+ const char *path, -+ unsigned long long *wbps); -+ - int virCgroupSetMemory(virCgroupPtr group, unsigned long long kb); - int virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb); - --- -2.5.1 - diff --git a/SOURCES/libvirt-util-Add-usage-for-encryption.patch b/SOURCES/libvirt-util-Add-usage-for-encryption.patch new file mode 100644 index 0000000..2b9f302 --- /dev/null +++ b/SOURCES/libvirt-util-Add-usage-for-encryption.patch @@ -0,0 +1,357 @@ +From 47fc4f22b1ebc54f3ffb6f36f8efb7f9304ef1c5 Mon Sep 17 00:00:00 2001 +Message-Id: <47fc4f22b1ebc54f3ffb6f36f8efb7f9304ef1c5@dist-git> +From: John Ferlan +Date: Mon, 25 Jul 2016 12:42:46 -0400 +Subject: [PATCH] util: Add 'usage' for encryption + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +In order to use more common code and set up for a future type, modify the +encryption secret to allow the "usage" attribute or the "uuid" attribute +to define the secret. The "usage" in the case of a volume secret would be +the path to the volume as dictated by the backwards compatibility brought +on by virStorageGenerateQcowEncryption where it set up the usage field as +the vol->target.path and didn't allow someone to provide it. This carries +into virSecretObjListFindByUsageLocked which takes the secret usage attribute +value from from the domain disk definition and compares it against the +usage type from the secret definition. Since none of the code dealing +with qcow/qcow2 encryption secrets uses usage for lookup, it's a mostly +cosmetic change. The real usage comes in a future path where the encryption +is expanded to be a luks volume and the secret will allow definition of +the usage field. + +This code will make use of the virSecretLookup{Parse|Format}Secret common code. + +Signed-off-by: John Ferlan +(cherry picked from commit 47e88b33befa1aafa4fd4db99c77a45c66d41c0a) +--- + docs/formatstorageencryption.html.in | 12 +++++--- + docs/schemas/storagecommon.rng | 11 +++++-- + src/qemu/qemu_process.c | 13 +++----- + src/storage/storage_backend.c | 3 +- + src/storage/storage_backend_fs.c | 3 +- + src/util/virstorageencryption.c | 26 ++++++---------- + src/util/virstorageencryption.h | 3 +- + .../qemuxml2argv-encrypted-disk-usage.args | 24 +++++++++++++++ + .../qemuxml2argv-encrypted-disk-usage.xml | 36 ++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 1 + + .../qemuxml2xmlout-encrypted-disk-usage.xml | 1 + + tests/qemuxml2xmltest.c | 1 + + 12 files changed, 98 insertions(+), 36 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.xml + create mode 120000 tests/qemuxml2xmloutdata/qemuxml2xmlout-encrypted-disk-usage.xml + +diff --git a/docs/formatstorageencryption.html.in b/docs/formatstorageencryption.html.in +index 04c3346..58e1073 100644 +--- a/docs/formatstorageencryption.html.in ++++ b/docs/formatstorageencryption.html.in +@@ -25,10 +25,14 @@ +

+ The encryption tag can currently contain a sequence of + secret tags, each with mandatory attributes type +- and uuid. The only currently defined value of +- type is passphrase. uuid +- refers to a secret known to libvirt. libvirt can use a secret value +- previously set using virSecretSetValue(), or, if supported ++ and either uuid or usage ++ (since 2.1.0). The only currently defined ++ value of type is passphrase. The ++ uuid is "uuid" of the secret while ++ usage is the value "usage" subelement field. ++ A secret value can be set in libvirt by the ++ ++ virSecretSetValue API. Alternatively, if supported + by the particular volume format and driver, automatically generate a + secret value at the time of volume creation, and store it using the + specified uuid. +diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng +index 7c04462..c5b71de 100644 +--- a/docs/schemas/storagecommon.rng ++++ b/docs/schemas/storagecommon.rng +@@ -27,9 +27,14 @@ + passphrase + + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 4eb35ea..4ffd9b7 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -70,6 +70,7 @@ + #include "virnuma.h" + #include "virstring.h" + #include "virhostdev.h" ++#include "secret_util.h" + #include "storage/storage_driver.h" + #include "configmake.h" + #include "nwfilter_conf.h" +@@ -377,7 +378,6 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, + char **secretRet, + size_t *secretLen) + { +- virSecretPtr secret; + char *passphrase; + unsigned char *data; + size_t size; +@@ -416,14 +416,9 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, + goto cleanup; + } + +- secret = conn->secretDriver->secretLookupByUUID(conn, +- enc->secrets[0]->uuid); +- if (secret == NULL) +- goto cleanup; +- data = conn->secretDriver->secretGetValue(secret, &size, 0, +- VIR_SECRET_GET_VALUE_INTERNAL_CALL); +- virObjectUnref(secret); +- if (data == NULL) ++ if (virSecretGetSecretString(conn, &enc->secrets[0]->seclookupdef, ++ VIR_SECRET_USAGE_TYPE_VOLUME, ++ &data, &size) < 0) + goto cleanup; + + if (memchr(data, '\0', size) != NULL) { +diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c +index 5adf1fd..d6a451d 100644 +--- a/src/storage/storage_backend.c ++++ b/src/storage/storage_backend.c +@@ -648,7 +648,8 @@ virStorageGenerateQcowEncryption(virConnectPtr conn, + goto cleanup; + + enc_secret->type = VIR_STORAGE_ENCRYPTION_SECRET_TYPE_PASSPHRASE; +- memcpy(enc_secret->uuid, secret->uuid, VIR_UUID_BUFLEN); ++ enc_secret->seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID; ++ memcpy(enc_secret->seclookupdef.u.uuid, secret->uuid, VIR_UUID_BUFLEN); + enc->format = VIR_STORAGE_ENCRYPTION_FORMAT_QCOW; + enc->secrets[0] = enc_secret; /* Space for secrets[0] allocated above */ + enc_secret = NULL; +diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c +index 44dabf4..839a2c7 100644 +--- a/src/storage/storage_backend_fs.c ++++ b/src/storage/storage_backend_fs.c +@@ -1312,7 +1312,8 @@ virStorageBackendFileSystemLoadDefaultSecrets(virConnectPtr conn, + vol->target.encryption->secrets[0] = encsec; + + encsec->type = VIR_STORAGE_ENCRYPTION_SECRET_TYPE_PASSPHRASE; +- virSecretGetUUID(sec, encsec->uuid); ++ encsec->seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID; ++ virSecretGetUUID(sec, encsec->seclookupdef.u.uuid); + virObjectUnref(sec); + + return 0; +diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c +index 8105158..afb44da 100644 +--- a/src/util/virstorageencryption.c ++++ b/src/util/virstorageencryption.c +@@ -34,6 +34,7 @@ + #include "virerror.h" + #include "viruuid.h" + #include "virfile.h" ++#include "virsecret.h" + + #define VIR_FROM_THIS VIR_FROM_STORAGE + +@@ -114,6 +115,7 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, + virStorageEncryptionSecretPtr ret; + char *type_str = NULL; + char *uuidstr = NULL; ++ char *usagestr = NULL; + + if (VIR_ALLOC(ret) < 0) + return NULL; +@@ -133,21 +135,12 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, + type_str); + goto cleanup; + } ++ ++ if (virSecretLookupParseSecret(node, &ret->seclookupdef) < 0) ++ goto cleanup; ++ + VIR_FREE(type_str); + +- if ((uuidstr = virXPathString("string(./@uuid)", ctxt))) { +- if (virUUIDParse(uuidstr, ret->uuid) < 0) { +- virReportError(VIR_ERR_XML_ERROR, +- _("malformed volume encryption uuid '%s'"), +- uuidstr); +- goto cleanup; +- } +- VIR_FREE(uuidstr); +- } else { +- virReportError(VIR_ERR_XML_ERROR, "%s", +- _("missing volume encryption uuid")); +- goto cleanup; +- } + ctxt->node = old_node; + return ret; + +@@ -155,6 +148,7 @@ virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, + VIR_FREE(type_str); + virStorageEncryptionSecretFree(ret); + VIR_FREE(uuidstr); ++ VIR_FREE(usagestr); + ctxt->node = old_node; + return NULL; + } +@@ -244,7 +238,6 @@ virStorageEncryptionSecretFormat(virBufferPtr buf, + virStorageEncryptionSecretPtr secret) + { + const char *type; +- char uuidstr[VIR_UUID_STRING_BUFLEN]; + + if (!(type = virStorageEncryptionSecretTypeToString(secret->type))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +@@ -252,9 +245,8 @@ virStorageEncryptionSecretFormat(virBufferPtr buf, + return -1; + } + +- virUUIDFormat(secret->uuid, uuidstr); +- virBufferAsprintf(buf, "\n", +- type, uuidstr); ++ virSecretLookupFormatSecret(buf, type, &secret->seclookupdef); ++ + return 0; + } + +diff --git a/src/util/virstorageencryption.h b/src/util/virstorageencryption.h +index 04641b1..c68c66e 100644 +--- a/src/util/virstorageencryption.h ++++ b/src/util/virstorageencryption.h +@@ -25,6 +25,7 @@ + + # include "internal.h" + # include "virbuffer.h" ++# include "virsecret.h" + # include "virutil.h" + + # include +@@ -40,7 +41,7 @@ typedef struct _virStorageEncryptionSecret virStorageEncryptionSecret; + typedef virStorageEncryptionSecret *virStorageEncryptionSecretPtr; + struct _virStorageEncryptionSecret { + int type; /* virStorageEncryptionSecretType */ +- unsigned char uuid[VIR_UUID_BUFLEN]; ++ virSecretLookupTypeDef seclookupdef; + }; + + typedef enum { +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args +new file mode 100644 +index 0000000..4371413 +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.args +@@ -0,0 +1,24 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu \ ++-name encryptdisk \ ++-S \ ++-M pc \ ++-m 1024 \ ++-smp 1 \ ++-uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 \ ++-nographic \ ++-nodefaults \ ++-monitor unix:/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \ ++-no-acpi \ ++-boot c \ ++-usb \ ++-drive file=/storage/guest_disks/encryptdisk,format=qcow2,if=none,\ ++id=drive-virtio-disk0 \ ++-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\ ++id=virtio-disk0 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.xml b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.xml +new file mode 100644 +index 0000000..ec6413f +--- /dev/null ++++ b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.xml +@@ -0,0 +1,36 @@ ++ ++ encryptdisk ++ 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 ++ 1048576 ++ 524288 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu ++ ++ ++ ++ ++ ++ ++ ++

++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 7fc10a8..d37d125 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1361,6 +1361,7 @@ mymain(void) + driver.caps->host.cpu = cpuDefault; + + DO_TEST("encrypted-disk", NONE); ++ DO_TEST("encrypted-disk-usage", NONE); + + DO_TEST("memtune", NONE); + DO_TEST("memtune-unlimited", NONE); +diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-encrypted-disk-usage.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-encrypted-disk-usage.xml +new file mode 120000 +index 0000000..824120a +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-encrypted-disk-usage.xml +@@ -0,0 +1 @@ ++../qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.xml +\ No newline at end of file +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index 2112d39..693e712 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -501,6 +501,7 @@ mymain(void) + DO_TEST("pci-serial-dev-chardev"); + + DO_TEST("encrypted-disk"); ++ DO_TEST("encrypted-disk-usage"); + DO_TEST("memtune"); + DO_TEST("memtune-unlimited"); + DO_TEST("blkiotune"); +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-Add-virCgroupGetBlockDevString.patch b/SOURCES/libvirt-util-Add-virCgroupGetBlockDevString.patch deleted file mode 100644 index 87f4e7c..0000000 --- a/SOURCES/libvirt-util-Add-virCgroupGetBlockDevString.patch +++ /dev/null @@ -1,310 +0,0 @@ -From 53d1fe4360d79d81864731234925d616a5646814 Mon Sep 17 00:00:00 2001 -Message-Id: <53d1fe4360d79d81864731234925d616a5646814@dist-git> -From: Martin Kletzander -Date: Tue, 18 Aug 2015 17:27:59 -0700 -Subject: [PATCH] util: Add virCgroupGetBlockDevString - -https://bugzilla.redhat.com/show_bug.cgi?id=1165580 - -This function translates device paths to "major:minor " string, and all -virCgroupSetBlkioDevice* functions are modified to use it. It's a -cleanup with no functional change. - -Signed-off-by: Martin Kletzander -(cherry picked from commit ea9db906fcf8425edad7ea49701c9b6495554b7f) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/util/vircgroup.c | 180 ++++++++++++++++++++------------------------------- - 1 file changed, 70 insertions(+), 110 deletions(-) - -diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c -index 0599ba5..afa85de 100644 ---- a/src/util/vircgroup.c -+++ b/src/util/vircgroup.c -@@ -705,6 +705,35 @@ virCgroupDetect(virCgroupPtr group, - } - - -+static char * -+virCgroupGetBlockDevString(const char *path) -+{ -+ char *ret = NULL; -+ struct stat sb; -+ -+ if (stat(path, &sb) < 0) { -+ virReportSystemError(errno, -+ _("Path '%s' is not accessible"), -+ path); -+ return NULL; -+ } -+ -+ if (!S_ISBLK(sb.st_mode)) { -+ virReportSystemError(EINVAL, -+ _("Path '%s' must be a block device"), -+ path); -+ return NULL; -+ } -+ -+ /* Automatically append space after the string since all callers -+ * use it anyway */ -+ if (virAsprintf(&ret, "%d:%d ", major(sb.st_rdev), minor(sb.st_rdev)) < 0) -+ return NULL; -+ -+ return ret; -+} -+ -+ - static int - virCgroupSetValueStr(virCgroupPtr group, - int controller, -@@ -1966,7 +1995,6 @@ virCgroupGetBlkioIoDeviceServiced(virCgroupPtr group, - long long *requests_write) - { - char *str1 = NULL, *str2 = NULL, *str3 = NULL, *p1, *p2; -- struct stat sb; - size_t i; - int ret = -1; - -@@ -1983,20 +2011,6 @@ virCgroupGetBlkioIoDeviceServiced(virCgroupPtr group, - requests_write - }; - -- if (stat(path, &sb) < 0) { -- virReportSystemError(errno, -- _("Path '%s' is not accessible"), -- path); -- return -1; -- } -- -- if (!S_ISBLK(sb.st_mode)) { -- virReportSystemError(EINVAL, -- _("Path '%s' must be a block device"), -- path); -- return -1; -- } -- - if (virCgroupGetValueStr(group, - VIR_CGROUP_CONTROLLER_BLKIO, - "blkio.throttle.io_service_bytes", &str1) < 0) -@@ -2007,7 +2021,7 @@ virCgroupGetBlkioIoDeviceServiced(virCgroupPtr group, - "blkio.throttle.io_serviced", &str2) < 0) - goto cleanup; - -- if (virAsprintf(&str3, "%d:%d ", major(sb.st_rdev), minor(sb.st_rdev)) < 0) -+ if (!(str3 = virCgroupGetBlockDevString(path))) - goto cleanup; - - if (!(p1 = strstr(str1, str3))) { -@@ -2116,33 +2130,22 @@ virCgroupSetBlkioDeviceReadIops(virCgroupPtr group, - const char *path, - unsigned int riops) - { -- char *str; -- struct stat sb; -- int ret; -+ char *str = NULL; -+ char *blkstr = NULL; -+ int ret = -1; - -- if (stat(path, &sb) < 0) { -- virReportSystemError(errno, -- _("Path '%s' is not accessible"), -- path); -+ if (!(blkstr = virCgroupGetBlockDevString(path))) - return -1; -- } - -- if (!S_ISBLK(sb.st_mode)) { -- virReportSystemError(EINVAL, -- _("Path '%s' must be a block device"), -- path); -- return -1; -- } -- -- if (virAsprintf(&str, "%d:%d %u", major(sb.st_rdev), -- minor(sb.st_rdev), riops) < 0) -- return -1; -+ if (virAsprintf(&str, "%s%u", blkstr, riops) < 0) -+ goto error; - - ret = virCgroupSetValueStr(group, - VIR_CGROUP_CONTROLLER_BLKIO, - "blkio.throttle.read_iops_device", - str); -- -+ error: -+ VIR_FREE(blkstr); - VIR_FREE(str); - return ret; - } -@@ -2161,33 +2164,22 @@ virCgroupSetBlkioDeviceWriteIops(virCgroupPtr group, - const char *path, - unsigned int wiops) - { -- char *str; -- struct stat sb; -- int ret; -+ char *str = NULL; -+ char *blkstr = NULL; -+ int ret = -1; - -- if (stat(path, &sb) < 0) { -- virReportSystemError(errno, -- _("Path '%s' is not accessible"), -- path); -+ if (!(blkstr = virCgroupGetBlockDevString(path))) - return -1; -- } - -- if (!S_ISBLK(sb.st_mode)) { -- virReportSystemError(EINVAL, -- _("Path '%s' must be a block device"), -- path); -- return -1; -- } -- -- if (virAsprintf(&str, "%d:%d %u", major(sb.st_rdev), -- minor(sb.st_rdev), wiops) < 0) -- return -1; -+ if (virAsprintf(&str, "%s%u", blkstr, wiops) < 0) -+ goto error; - - ret = virCgroupSetValueStr(group, - VIR_CGROUP_CONTROLLER_BLKIO, - "blkio.throttle.write_iops_device", - str); -- -+ error: -+ VIR_FREE(blkstr); - VIR_FREE(str); - return ret; - } -@@ -2206,33 +2198,22 @@ virCgroupSetBlkioDeviceReadBps(virCgroupPtr group, - const char *path, - unsigned long long rbps) - { -- char *str; -- struct stat sb; -- int ret; -+ char *str = NULL; -+ char *blkstr = NULL; -+ int ret = -1; - -- if (stat(path, &sb) < 0) { -- virReportSystemError(errno, -- _("Path '%s' is not accessible"), -- path); -+ if (!(blkstr = virCgroupGetBlockDevString(path))) - return -1; -- } - -- if (!S_ISBLK(sb.st_mode)) { -- virReportSystemError(EINVAL, -- _("Path '%s' must be a block device"), -- path); -- return -1; -- } -- -- if (virAsprintf(&str, "%d:%d %llu", major(sb.st_rdev), -- minor(sb.st_rdev), rbps) < 0) -- return -1; -+ if (virAsprintf(&str, "%s%llu", blkstr, rbps) < 0) -+ goto error; - - ret = virCgroupSetValueStr(group, - VIR_CGROUP_CONTROLLER_BLKIO, - "blkio.throttle.read_bps_device", - str); -- -+ error: -+ VIR_FREE(blkstr); - VIR_FREE(str); - return ret; - } -@@ -2250,33 +2231,22 @@ virCgroupSetBlkioDeviceWriteBps(virCgroupPtr group, - const char *path, - unsigned long long wbps) - { -- char *str; -- struct stat sb; -- int ret; -+ char *str = NULL; -+ char *blkstr = NULL; -+ int ret = -1; - -- if (stat(path, &sb) < 0) { -- virReportSystemError(errno, -- _("Path '%s' is not accessible"), -- path); -+ if (!(blkstr = virCgroupGetBlockDevString(path))) - return -1; -- } - -- if (!S_ISBLK(sb.st_mode)) { -- virReportSystemError(EINVAL, -- _("Path '%s' must be a block device"), -- path); -- return -1; -- } -- -- if (virAsprintf(&str, "%d:%d %llu", major(sb.st_rdev), -- minor(sb.st_rdev), wbps) < 0) -- return -1; -+ if (virAsprintf(&str, "%s%llu", blkstr, wbps) < 0) -+ goto error; - - ret = virCgroupSetValueStr(group, - VIR_CGROUP_CONTROLLER_BLKIO, - "blkio.throttle.write_bps_device", - str); -- -+ error: -+ VIR_FREE(blkstr); - VIR_FREE(str); - return ret; - } -@@ -2299,32 +2269,22 @@ virCgroupSetBlkioDeviceWeight(virCgroupPtr group, - const char *path, - unsigned int weight) - { -- char *str; -- struct stat sb; -- int ret; -+ char *str = NULL; -+ char *blkstr = NULL; -+ int ret = -1; - -- if (stat(path, &sb) < 0) { -- virReportSystemError(errno, -- _("Path '%s' is not accessible"), -- path); -+ if (!(blkstr = virCgroupGetBlockDevString(path))) - return -1; -- } - -- if (!S_ISBLK(sb.st_mode)) { -- virReportSystemError(EINVAL, -- _("Path '%s' must be a block device"), -- path); -- return -1; -- } -- -- if (virAsprintf(&str, "%d:%d %d", major(sb.st_rdev), minor(sb.st_rdev), -- weight) < 0) -- return -1; -+ if (virAsprintf(&str, "%s%d", blkstr, weight) < 0) -+ goto error; - - ret = virCgroupSetValueStr(group, - VIR_CGROUP_CONTROLLER_BLKIO, - "blkio.weight_device", - str); -+ error: -+ VIR_FREE(blkstr); - VIR_FREE(str); - return ret; - } --- -2.5.1 - diff --git a/SOURCES/libvirt-util-Add-virStringGetFirstWithPrefix.patch b/SOURCES/libvirt-util-Add-virStringGetFirstWithPrefix.patch deleted file mode 100644 index a7224a2..0000000 --- a/SOURCES/libvirt-util-Add-virStringGetFirstWithPrefix.patch +++ /dev/null @@ -1,79 +0,0 @@ -From a7232a3278c7eb1363b4795b9cc556fe8b14b950 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -Date: Tue, 18 Aug 2015 17:27:58 -0700 -Subject: [PATCH] util: Add virStringGetFirstWithPrefix - -https://bugzilla.redhat.com/show_bug.cgi?id=1165580 - -That function takes string list and returns first string in that list -that starts with the @prefix parameter with that prefix being skipped as -the caller knows what it starts with (also for easier manipulation in -future). - -Signed-off-by: Martin Kletzander -(cherry picked from commit 1fe69c4656082f48762f69149efc6d9d01d62ce1) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/util/virstring.c | 17 +++++++++++++++++ - src/util/virstring.h | 2 ++ - 3 files changed, 20 insertions(+) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 15fa785..a170214 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -2174,6 +2174,7 @@ virStrdup; - virStringArrayHasString; - virStringFreeList; - virStringFreeListCount; -+virStringGetFirstWithPrefix; - virStringHasControlChars; - virStringIsEmpty; - virStringJoin; -diff --git a/src/util/virstring.c b/src/util/virstring.c -index 5794f96..31f77cd 100644 ---- a/src/util/virstring.c -+++ b/src/util/virstring.c -@@ -238,6 +238,23 @@ virStringArrayHasString(char **strings, const char *needle) - return false; - } - -+char * -+virStringGetFirstWithPrefix(char **strings, const char *prefix) -+{ -+ size_t i = 0; -+ -+ if (!strings) -+ return NULL; -+ -+ while (strings[i]) { -+ if (STRPREFIX(strings[i], prefix)) -+ return strings[i] + strlen(prefix); -+ i++; -+ } -+ -+ return NULL; -+} -+ - /* Like strtol, but produce an "int" result, and check more carefully. - Return 0 upon success; return -1 to indicate failure. - When END_PTR is NULL, the byte after the final valid digit must be NUL. -diff --git a/src/util/virstring.h b/src/util/virstring.h -index e6dcb32..f65a126 100644 ---- a/src/util/virstring.h -+++ b/src/util/virstring.h -@@ -47,6 +47,8 @@ void virStringFreeListCount(char **strings, size_t count); - size_t virStringListLen(const char **strings); - - bool virStringArrayHasString(char **strings, const char *needle); -+char *virStringGetFirstWithPrefix(char **strings, const char *prefix) -+ ATTRIBUTE_NONNULL(2); - - char *virArgvToString(const char *const *argv); - --- -2.5.1 - diff --git a/SOURCES/libvirt-util-Extract-and-rename-qemuDomainDelCgroupForThread-to-virCgroupDelThread.patch b/SOURCES/libvirt-util-Extract-and-rename-qemuDomainDelCgroupForThread-to-virCgroupDelThread.patch new file mode 100644 index 0000000..d549397 --- /dev/null +++ b/SOURCES/libvirt-util-Extract-and-rename-qemuDomainDelCgroupForThread-to-virCgroupDelThread.patch @@ -0,0 +1,128 @@ +From 717c8b3107df3cda89453bd2427c231bdad84357 Mon Sep 17 00:00:00 2001 +Message-Id: <717c8b3107df3cda89453bd2427c231bdad84357@dist-git> +From: Peter Krempa +Date: Wed, 24 Aug 2016 16:11:32 -0400 +Subject: [PATCH] util: Extract and rename qemuDomainDelCgroupForThread to + virCgroupDelThread + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +(cherry picked from commit c84c2cb389398d684a00066c421813e7908a84e7) +--- + src/libvirt_private.syms | 1 + + src/qemu/qemu_driver.c | 27 +++------------------------ + src/util/vircgroup.c | 20 ++++++++++++++++++++ + src/util/vircgroup.h | 4 ++++ + 4 files changed, 28 insertions(+), 24 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index b7a1663..7535064 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -1265,6 +1265,7 @@ virCgroupBindMount; + virCgroupControllerAvailable; + virCgroupControllerTypeFromString; + virCgroupControllerTypeToString; ++virCgroupDelThread; + virCgroupDenyAllDevices; + virCgroupDenyDevice; + virCgroupDenyDevicePath; +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 35ed8ec..43e00ff 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -4596,25 +4596,6 @@ static void qemuProcessEventHandler(void *data, void *opaque) + + + static int +-qemuDomainDelCgroupForThread(virCgroupPtr cgroup, +- virCgroupThreadName nameval, +- int idx) +-{ +- virCgroupPtr new_cgroup = NULL; +- +- if (cgroup) { +- if (virCgroupNewThread(cgroup, nameval, idx, false, &new_cgroup) < 0) +- return -1; +- +- /* Remove the offlined cgroup */ +- virCgroupRemove(new_cgroup); +- virCgroupFree(&new_cgroup); +- } +- +- return 0; +-} +- +-static int + qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, + virDomainObjPtr vm, + unsigned int vcpu) +@@ -4707,8 +4688,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, + + virDomainAuditVcpu(vm, oldvcpus, oldvcpus - 1, "update", true); + +- if (qemuDomainDelCgroupForThread(priv->cgroup, +- VIR_CGROUP_THREAD_VCPU, vcpu) < 0) ++ if (virCgroupDelThread(priv->cgroup, VIR_CGROUP_THREAD_VCPU, vcpu) < 0) + goto cleanup; + + ret = 0; +@@ -5910,9 +5890,8 @@ qemuDomainHotplugDelIOThread(virQEMUDriverPtr driver, + + virDomainIOThreadIDDel(vm->def, iothread_id); + +- if (qemuDomainDelCgroupForThread(priv->cgroup, +- VIR_CGROUP_THREAD_IOTHREAD, +- iothread_id) < 0) ++ if (virCgroupDelThread(priv->cgroup, VIR_CGROUP_THREAD_IOTHREAD, ++ iothread_id) < 0) + goto cleanup; + + ret = 0; +diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c +index 04f3818..97cf246 100644 +--- a/src/util/vircgroup.c ++++ b/src/util/vircgroup.c +@@ -4819,3 +4819,23 @@ virCgroupControllerAvailable(int controller ATTRIBUTE_UNUSED) + return false; + } + #endif /* !VIR_CGROUP_SUPPORTED */ ++ ++ ++int ++virCgroupDelThread(virCgroupPtr cgroup, ++ virCgroupThreadName nameval, ++ int idx) ++{ ++ virCgroupPtr new_cgroup = NULL; ++ ++ if (cgroup) { ++ if (virCgroupNewThread(cgroup, nameval, idx, false, &new_cgroup) < 0) ++ return -1; ++ ++ /* Remove the offlined cgroup */ ++ virCgroupRemove(new_cgroup); ++ virCgroupFree(&new_cgroup); ++ } ++ ++ return 0; ++} +diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h +index 2ddbb35..4b8f3ff 100644 +--- a/src/util/vircgroup.h ++++ b/src/util/vircgroup.h +@@ -86,6 +86,10 @@ int virCgroupNewThread(virCgroupPtr domain, + virCgroupPtr *group) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(5); + ++int virCgroupDelThread(virCgroupPtr cgroup, ++ virCgroupThreadName nameval, ++ int idx); ++ + int virCgroupNewDetect(pid_t pid, + int controllers, + virCgroupPtr *group); +-- +2.10.0 + diff --git a/SOURCES/libvirt-util-Fix-virCgroupNewMachine-ATTRIBUTE_NONNULL-args.patch b/SOURCES/libvirt-util-Fix-virCgroupNewMachine-ATTRIBUTE_NONNULL-args.patch deleted file mode 100644 index 1d35557..0000000 --- a/SOURCES/libvirt-util-Fix-virCgroupNewMachine-ATTRIBUTE_NONNULL-args.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 8ff6234dc3f9d3d83bc104b4b3c0515f48aa305a Mon Sep 17 00:00:00 2001 -Message-Id: <8ff6234dc3f9d3d83bc104b4b3c0515f48aa305a@dist-git> -From: John Ferlan -Date: Tue, 16 Feb 2016 11:55:11 +0100 -Subject: [PATCH] util: Fix virCgroupNewMachine ATTRIBUTE_NONNULL args - -https://bugzilla.redhat.com/show_bug.cgi?id=1308494 - -Commit id 'c3bd0019c0' removed arg3, but forgot to adjust the numbers -for NONNULL - caused build failure for coverity - -(cherry picked from commit b8c0f186543c01cbda95c7251a0a992823764df5) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/util/vircgroup.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h -index 6570cb3..b98e416 100644 ---- a/src/util/vircgroup.h -+++ b/src/util/vircgroup.h -@@ -110,7 +110,7 @@ int virCgroupNewMachine(const char *name, - int controllers, - virCgroupPtr *group) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) -- ATTRIBUTE_NONNULL(4); -+ ATTRIBUTE_NONNULL(3); - - int virCgroupTerminateMachine(const char *name) - ATTRIBUTE_NONNULL(1); --- -2.7.2 - diff --git a/SOURCES/libvirt-util-Introduce-virISCSINodeNew.patch b/SOURCES/libvirt-util-Introduce-virISCSINodeNew.patch new file mode 100644 index 0000000..2f52dbd --- /dev/null +++ b/SOURCES/libvirt-util-Introduce-virISCSINodeNew.patch @@ -0,0 +1,131 @@ +From 8a7b904aff7216941b5f804d4d84d7163b3b6908 Mon Sep 17 00:00:00 2001 +Message-Id: <8a7b904aff7216941b5f804d4d84d7163b3b6908@dist-git> +From: John Ferlan +Date: Mon, 1 Aug 2016 13:31:52 -0400 +Subject: [PATCH] util: Introduce virISCSINodeNew + +https://bugzilla.redhat.com/show_bug.cgi?id=1356436 + +According to RFC 3721 (https://www.ietf.org/rfc/rfc3721.txt), there are +two ways to "discover" targets in/for the iSCSI environment. Discovery +is the process which allows the initiator to find the targets to which +it has access and at least one address at which each target may be +accessed. + +The method currently implemented in libvirt using the virISCSIScanTargets +API is known as "SendTargets" discovery. This method is more useful when +the target IP Address and TCP port information are available, e.g. in +libvirt terms the "portal". It returns a list of targets for the portal. +>From that list, the target can be found. This operation can also fill an +iSCSI node table into which iSCSI logins may occur. Commit id '56057900' +altered that filling by adding the "--op nonpersistent" since it was +not necessarily desired to perform that for non libvirt related targets. + +The second method is "Static Configuration". This method not only needs +the IP Address and TCP port (e.g. portal), but also the iSCSI target name. +In libvirt terms this would be the device path field from the iSCSI pool + XML. This patch implements the second methodology using that +required device path as the targetname. + +(cherry picked from commit ae65c908b7a8a951e0049ff7cd57f03644e1d5b8) +Signed-off-by: John Ferlan +--- + src/libvirt_private.syms | 1 + + src/util/viriscsi.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/util/viriscsi.h | 6 ++++++ + 3 files changed, 58 insertions(+) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 4dd93d7..62c9dc5 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -1714,6 +1714,7 @@ iptablesRemoveUdpOutput; + virISCSIConnectionLogin; + virISCSIConnectionLogout; + virISCSIGetSession; ++virISCSINodeNew; + virISCSINodeUpdate; + virISCSIRescanLUNs; + virISCSIScanTargets; +diff --git a/src/util/viriscsi.c b/src/util/viriscsi.c +index e705517..504ffbd 100644 +--- a/src/util/viriscsi.c ++++ b/src/util/viriscsi.c +@@ -444,6 +444,57 @@ virISCSIScanTargets(const char *portal, + return ret; + } + ++/* ++ * virISCSINodeNew: ++ * @portal: address for iSCSI target ++ * @target: IQN and specific LUN target ++ * ++ * Usage of nonpersistent discovery in virISCSIScanTargets is useful primarily ++ * only when the target IQN is not known; however, since we have the target IQN ++ * usage of the "--op new" can be done. This avoids problems if "--op delete" ++ * had been used wiping out the static nodes determined by the scanning of ++ * all targets. ++ * ++ * NB: If an iSCSI node record is already created for this portal and ++ * target, subsequent "--op new" commands do not return an error. ++ * ++ * Returns 0 on success, -1 w/ error message on error ++ */ ++int ++virISCSINodeNew(const char *portal, ++ const char *target) ++{ ++ virCommandPtr cmd = NULL; ++ int status; ++ int ret = -1; ++ ++ cmd = virCommandNewArgList(ISCSIADM, ++ "--mode", "node", ++ "--portal", portal, ++ "--targetname", target, ++ "--op", "new", ++ NULL); ++ ++ if (virCommandRun(cmd, &status) < 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("Failed new node mode for target '%s'"), ++ target); ++ goto cleanup; ++ } ++ ++ if (status != 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("%s failed new mode for target '%s' with status '%d'"), ++ ISCSIADM, target, status); ++ goto cleanup; ++ } ++ ++ ret = 0; ++ cleanup: ++ virCommandFree(cmd); ++ return ret; ++} ++ + + int + virISCSINodeUpdate(const char *portal, +diff --git a/src/util/viriscsi.h b/src/util/viriscsi.h +index 459249e..a44beea 100644 +--- a/src/util/viriscsi.h ++++ b/src/util/viriscsi.h +@@ -54,6 +54,12 @@ virISCSIScanTargets(const char *portal, + ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; + + int ++virISCSINodeNew(const char *portal, ++ const char *target) ++ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ++ ATTRIBUTE_RETURN_CHECK; ++ ++int + virISCSINodeUpdate(const char *portal, + const char *target, + const char *name, +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-bitmap-Don-t-alloc-overly-large-binary-bitmaps.patch b/SOURCES/libvirt-util-bitmap-Don-t-alloc-overly-large-binary-bitmaps.patch deleted file mode 100644 index 1160fba..0000000 --- a/SOURCES/libvirt-util-bitmap-Don-t-alloc-overly-large-binary-bitmaps.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 56f8f0b1c608f6ae3488658d6c1367e8fc933e52 Mon Sep 17 00:00:00 2001 -Message-Id: <56f8f0b1c608f6ae3488658d6c1367e8fc933e52@dist-git> -From: Peter Krempa -Date: Wed, 8 Jul 2015 11:06:59 +0200 -Subject: [PATCH] util: bitmap: Don't alloc overly large binary bitmaps - -Optimize the virBitmap to array-of-char bitmap conversion by skipping -trailing zero bytes. - -This also fixes a regression when requesting iothread information from a -live VM since after commit 825df8c3158cfaf5f398418471f10f4ff3c3515a the -bitmap returned from virProcessGetAffinity is too big to be formatted -properly via RPC. A user would get the following error: - -error: Unable to get domain IOThreads information -error: Unable to encode message payload - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238589 -(cherry picked from commit e8c5f61e91025f244bb022b1774a3fc6484625f8) - -Signed-off-by: Jiri Denemark ---- - src/util/virbitmap.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c -index 9abc807..4d270a9 100644 ---- a/src/util/virbitmap.c -+++ b/src/util/virbitmap.c -@@ -498,9 +498,12 @@ virBitmapPtr virBitmapNewData(void *data, int len) - */ - int virBitmapToData(virBitmapPtr bitmap, unsigned char **data, int *dataLen) - { -- int len; -+ ssize_t len; - -- len = (bitmap->max_bit + CHAR_BIT - 1) / CHAR_BIT; -+ if ((len = virBitmapLastSetBit(bitmap)) < 0) -+ len = 1; -+ else -+ len = (len + CHAR_BIT) / CHAR_BIT; - - if (VIR_ALLOC_N(*data, len) < 0) - return -1; --- -2.4.5 - diff --git a/SOURCES/libvirt-util-don-t-use-netlink-to-save-set-mac-for-macvtap-passthrough-802.1Qbh.patch b/SOURCES/libvirt-util-don-t-use-netlink-to-save-set-mac-for-macvtap-passthrough-802.1Qbh.patch deleted file mode 100644 index c3f33ed..0000000 --- a/SOURCES/libvirt-util-don-t-use-netlink-to-save-set-mac-for-macvtap-passthrough-802.1Qbh.patch +++ /dev/null @@ -1,89 +0,0 @@ -From e09abaad84630d6cd25a1ecff1811ce070201006 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Laine Stump -Date: Thu, 3 Sep 2015 12:08:25 -0400 -Subject: [PATCH] util: don't use netlink to save/set mac for - macvtap+passthrough+802.1Qbh - -Before libvirt sets the MAC address of the physdev (the physical -ethernet device) linked to a macvtap passthrough device, it always -saves the previous MAC address to restore when the guest is finished -(following a "leave nothing behind" policy). For a long time it -accomplished the save/restore with a combination of -ioctl(SIOCGIFHWADDR) and ioctl(SIOCSIFHWADDR), but in commit cbfe38c -(first in libvirt 1.2.15) this was changed to use netlink RTM_GETLINK -and RTM_SETLINK commands sent to the Physical Function (PF) of any -device that was detected to be a Virtual Function (VF). - -We later found out that this caused problems with any devices using -the Cisco enic driver (e.g. vmfex cards) because the enic driver -hasn't implemented the function that is called to gather the -information in the IFLA_VFINFO_LIST attribute of RTM_GETLINK -(ndo_get_vf_config() for those keeping score), so we would never get -back a useful response. - -In an ideal world, all drivers would implement all functions, but it -turns out that in this case we can work around this omission without -any bad side effects - since all macvtap passthrough -definitions pointing to a physdev that uses the enic driver *must* -have a , and since no other type of -ethernet devices use 802.1Qbh, libvirt can change its behavior in this -case to use the old-style. ioctl(SIOC[GS]IFHWADDR). That's what this -patch does. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1257004 -(cherry picked from commit 46cf0cefa0168a0d929ca87010f59e1cba6c689b) - -Signed-off-by: Jiri Denemark ---- - src/util/virnetdevmacvlan.c | 26 ++++++++++++++++++++++---- - 1 file changed, 22 insertions(+), 4 deletions(-) - -diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c -index 213b8eb..641bd24 100644 ---- a/src/util/virnetdevmacvlan.c -+++ b/src/util/virnetdevmacvlan.c -@@ -778,9 +778,22 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname, - * This is especially important when using SRIOV capable cards that - * emulate their switch in firmware. - */ -+ - if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) { -- if (virNetDevReplaceNetConfig(linkdev, -1, macaddress, -1, stateDir) < 0) -- return -1; -+ if (virtPortProfile && -+ virtPortProfile->virtPortType == VIR_NETDEV_VPORT_PROFILE_8021QBH) { -+ /* The Cisco enic driver (the only card that uses -+ * 802.1Qbh) doesn't support IFLA_VFINFO_LIST, which is -+ * required for virNetDevReplaceNetConfig(), so we must -+ * use this function (which uses ioctl(SIOCGIFHWADDR) -+ * instead or virNetDevReplaceNetConfig() -+ */ -+ if (virNetDevReplaceMacAddress(linkdev, macaddress, stateDir) < 0) -+ return -1; -+ } else { -+ if (virNetDevReplaceNetConfig(linkdev, -1, macaddress, -1, stateDir) < 0) -+ return -1; -+ } - } - - if (tgifname) { -@@ -913,8 +926,13 @@ int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname, - int ret = 0; - int vf = -1; - -- if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) -- ignore_value(virNetDevRestoreNetConfig(linkdev, vf, stateDir)); -+ if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) { -+ if (virtPortProfile && -+ virtPortProfile->virtPortType == VIR_NETDEV_VPORT_PROFILE_8021QBH) -+ ignore_value(virNetDevRestoreMacAddress(linkdev, stateDir)); -+ else -+ ignore_value(virNetDevRestoreNetConfig(linkdev, vf, stateDir)); -+ } - - if (ifname) { - if (virNetDevVPortProfileDisassociate(ifname, --- -2.5.1 - diff --git a/SOURCES/libvirt-util-json-Make-first-argument-of-virJSONValueCopy-const.patch b/SOURCES/libvirt-util-json-Make-first-argument-of-virJSONValueCopy-const.patch new file mode 100644 index 0000000..5d734a6 --- /dev/null +++ b/SOURCES/libvirt-util-json-Make-first-argument-of-virJSONValueCopy-const.patch @@ -0,0 +1,44 @@ +From 55efbb158069281e9b6c8f435cadbe0eba15640f Mon Sep 17 00:00:00 2001 +Message-Id: <55efbb158069281e9b6c8f435cadbe0eba15640f@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:47 +0200 +Subject: [PATCH] util: json: Make first argument of virJSONValueCopy const + +It's just read. + +(cherry picked from commit 22ad4a7c0a546ca156f5a5b18ad2fcd6a699442c) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virjson.c | 2 +- + src/util/virjson.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/util/virjson.c b/src/util/virjson.c +index afc98e3..b6d9a34 100644 +--- a/src/util/virjson.c ++++ b/src/util/virjson.c +@@ -1241,7 +1241,7 @@ virJSONValueObjectForeachKeyValue(const virJSONValue *object, + + + virJSONValuePtr +-virJSONValueCopy(virJSONValuePtr in) ++virJSONValueCopy(const virJSONValue *in) + { + size_t i; + virJSONValuePtr out = NULL; +diff --git a/src/util/virjson.h b/src/util/virjson.h +index a5aef39..64cae88 100644 +--- a/src/util/virjson.h ++++ b/src/util/virjson.h +@@ -171,6 +171,6 @@ int virJSONValueObjectForeachKeyValue(const virJSONValue *object, + virJSONValueObjectIteratorFunc cb, + void *opaque); + +-virJSONValuePtr virJSONValueCopy(virJSONValuePtr in); ++virJSONValuePtr virJSONValueCopy(const virJSONValue *in); + + #endif /* __VIR_JSON_H_ */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-json-Make-first-argument-of-virJSONValueObjectForeachKeyValue-const.patch b/SOURCES/libvirt-util-json-Make-first-argument-of-virJSONValueObjectForeachKeyValue-const.patch new file mode 100644 index 0000000..4946942 --- /dev/null +++ b/SOURCES/libvirt-util-json-Make-first-argument-of-virJSONValueObjectForeachKeyValue-const.patch @@ -0,0 +1,48 @@ +From c0d35995c15a2c2a341d112cf74bcd943b2dc92f Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:41 +0200 +Subject: [PATCH] util: json: Make first argument of + virJSONValueObjectForeachKeyValue const + +The iterator function (second argument) already requires that the object +is handled as 'const' thus we won't modify the object itself. + +(cherry picked from commit bc4339719eb8eb5c83127d6f152f9e77915a7b9c) + +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virjson.c | 2 +- + src/util/virjson.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/util/virjson.c b/src/util/virjson.c +index 1022cfc..afc98e3 100644 +--- a/src/util/virjson.c ++++ b/src/util/virjson.c +@@ -1220,7 +1220,7 @@ virJSONValueObjectIsNull(virJSONValuePtr object, + * during iteration and -1 on generic errors. + */ + int +-virJSONValueObjectForeachKeyValue(virJSONValuePtr object, ++virJSONValueObjectForeachKeyValue(const virJSONValue *object, + virJSONValueObjectIteratorFunc cb, + void *opaque) + { +diff --git a/src/util/virjson.h b/src/util/virjson.h +index 66ed48a..a5aef39 100644 +--- a/src/util/virjson.h ++++ b/src/util/virjson.h +@@ -167,7 +167,7 @@ typedef int (*virJSONValueObjectIteratorFunc)(const char *key, + const virJSONValue *value, + void *opaque); + +-int virJSONValueObjectForeachKeyValue(virJSONValuePtr object, ++int virJSONValueObjectForeachKeyValue(const virJSONValue *object, + virJSONValueObjectIteratorFunc cb, + void *opaque); + +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-make-virNetDev-Replace-Restore-MacAddress-public-functions.patch b/SOURCES/libvirt-util-make-virNetDev-Replace-Restore-MacAddress-public-functions.patch deleted file mode 100644 index 4c610ac..0000000 --- a/SOURCES/libvirt-util-make-virNetDev-Replace-Restore-MacAddress-public-functions.patch +++ /dev/null @@ -1,260 +0,0 @@ -From 42d7166762dd388b6c235430734f9ead5a40afd5 Mon Sep 17 00:00:00 2001 -Message-Id: <42d7166762dd388b6c235430734f9ead5a40afd5@dist-git> -From: Laine Stump -Date: Thu, 3 Sep 2015 12:08:24 -0400 -Subject: [PATCH] util: make virNetDev(Replace|Restore)MacAddress public - functions - -These functions were made static as a part of commit cbfe38c since -they were no longer called from outside virnetdev.c. We once again -need to call them from another file, so this patch makes them once -again public. - -Prerequisite for the fix for: - - https://bugzilla.redhat.com/show_bug.cgi?id=1257004 - -(cherry picked from commit 3ce08fab8477da2c76918329523a5e6a312cef06) - -Conflicts: - src/util/virnetdev.c - one extra blank line in white space - -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 2 + - src/util/virnetdev.c | 173 ++++++++++++++++++++++++----------------------- - src/util/virnetdev.h | 10 +++ - 3 files changed, 99 insertions(+), 86 deletions(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 434bbf3..9332194 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1765,7 +1765,9 @@ virNetDevGetVirtualFunctions; - virNetDevGetVLanID; - virNetDevIsVirtualFunction; - virNetDevLinkDump; -+virNetDevReplaceMacAddress; - virNetDevReplaceNetConfig; -+virNetDevRestoreMacAddress; - virNetDevRestoreNetConfig; - virNetDevRxFilterFree; - virNetDevRxFilterModeTypeFromString; -diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c -index e4fcd81..a1a4ea1 100644 ---- a/src/util/virnetdev.c -+++ b/src/util/virnetdev.c -@@ -350,6 +350,92 @@ int virNetDevGetMAC(const char *ifname, - #endif - - -+/** -+ * virNetDevReplaceMacAddress: -+ * @macaddress: new MAC address for interface -+ * @linkdev: name of interface -+ * @stateDir: directory to store old MAC address -+ * -+ * Returns 0 on success, -1 on failure -+ * -+ */ -+int -+virNetDevReplaceMacAddress(const char *linkdev, -+ const virMacAddr *macaddress, -+ const char *stateDir) -+{ -+ virMacAddr oldmac; -+ char *path = NULL; -+ char macstr[VIR_MAC_STRING_BUFLEN]; -+ int ret = -1; -+ -+ if (virNetDevGetMAC(linkdev, &oldmac) < 0) -+ return -1; -+ -+ if (virAsprintf(&path, "%s/%s", -+ stateDir, -+ linkdev) < 0) -+ return -1; -+ virMacAddrFormat(&oldmac, macstr); -+ if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) { -+ virReportSystemError(errno, _("Unable to preserve mac for %s"), -+ linkdev); -+ goto cleanup; -+ } -+ -+ if (virNetDevSetMAC(linkdev, macaddress) < 0) -+ goto cleanup; -+ -+ ret = 0; -+ cleanup: -+ VIR_FREE(path); -+ return ret; -+} -+ -+/** -+ * virNetDevRestoreMacAddress: -+ * @linkdev: name of interface -+ * @stateDir: directory containing old MAC address -+ * -+ * Returns 0 on success, -errno on failure. -+ * -+ */ -+int -+virNetDevRestoreMacAddress(const char *linkdev, -+ const char *stateDir) -+{ -+ int rc = -1; -+ char *oldmacname = NULL; -+ char *macstr = NULL; -+ char *path = NULL; -+ virMacAddr oldmac; -+ -+ if (virAsprintf(&path, "%s/%s", -+ stateDir, -+ linkdev) < 0) -+ return -1; -+ -+ if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0) -+ goto cleanup; -+ -+ if (virMacAddrParse(macstr, &oldmac) != 0) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Cannot parse MAC address from '%s'"), -+ oldmacname); -+ goto cleanup; -+ } -+ -+ /*reset mac and remove file-ignore results*/ -+ rc = virNetDevSetMAC(linkdev, &oldmac); -+ ignore_value(unlink(path)); -+ -+ cleanup: -+ VIR_FREE(macstr); -+ VIR_FREE(path); -+ return rc; -+} -+ -+ - #if defined(SIOCGIFMTU) && defined(HAVE_STRUCT_IFREQ) - /** - * virNetDevGetMTU: -@@ -1828,95 +1914,10 @@ virNetDevSysfsFile(char **pf_sysfs_device_link ATTRIBUTE_UNUSED, - return -1; - } - -+ - #endif /* !__linux__ */ - #if defined(__linux__) && defined(HAVE_LIBNL) && defined(IFLA_VF_MAX) - --/** -- * virNetDevReplaceMacAddress: -- * @macaddress: new MAC address for interface -- * @linkdev: name of interface -- * @stateDir: directory to store old MAC address -- * -- * Returns 0 on success, -1 on failure -- * -- */ --static int --virNetDevReplaceMacAddress(const char *linkdev, -- const virMacAddr *macaddress, -- const char *stateDir) --{ -- virMacAddr oldmac; -- char *path = NULL; -- char macstr[VIR_MAC_STRING_BUFLEN]; -- int ret = -1; -- -- if (virNetDevGetMAC(linkdev, &oldmac) < 0) -- return -1; -- -- if (virAsprintf(&path, "%s/%s", -- stateDir, -- linkdev) < 0) -- return -1; -- virMacAddrFormat(&oldmac, macstr); -- if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) { -- virReportSystemError(errno, _("Unable to preserve mac for %s"), -- linkdev); -- goto cleanup; -- } -- -- if (virNetDevSetMAC(linkdev, macaddress) < 0) -- goto cleanup; -- -- ret = 0; -- -- cleanup: -- VIR_FREE(path); -- return ret; --} -- --/** -- * virNetDevRestoreMacAddress: -- * @linkdev: name of interface -- * @stateDir: directory containing old MAC address -- * -- * Returns 0 on success, -errno on failure. -- * -- */ --static int --virNetDevRestoreMacAddress(const char *linkdev, -- const char *stateDir) --{ -- int rc = -1; -- char *oldmacname = NULL; -- char *macstr = NULL; -- char *path = NULL; -- virMacAddr oldmac; -- -- if (virAsprintf(&path, "%s/%s", -- stateDir, -- linkdev) < 0) -- return -1; -- -- if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0) -- goto cleanup; -- -- if (virMacAddrParse(macstr, &oldmac) != 0) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Cannot parse MAC address from '%s'"), -- oldmacname); -- goto cleanup; -- } -- -- /*reset mac and remove file-ignore results*/ -- rc = virNetDevSetMAC(linkdev, &oldmac); -- ignore_value(unlink(path)); -- -- cleanup: -- VIR_FREE(macstr); -- VIR_FREE(path); -- return rc; --} -- - - static struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = { - [IFLA_VF_MAC] = { .type = NLA_UNSPEC, -diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h -index 190b70e..3568724 100644 ---- a/src/util/virnetdev.h -+++ b/src/util/virnetdev.h -@@ -114,6 +114,16 @@ int virNetDevGetMAC(const char *ifname, - virMacAddrPtr macaddr) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; - -+int virNetDevReplaceMacAddress(const char *linkdev, -+ const virMacAddr *macaddress, -+ const char *stateDir) -+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) -+ ATTRIBUTE_RETURN_CHECK; -+ -+int virNetDevRestoreMacAddress(const char *linkdev, -+ const char *stateDir) -+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; -+ - int virNetDevSetMTU(const char *ifname, - int mtu) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; --- -2.5.1 - diff --git a/SOURCES/libvirt-util-qemu-Add-support-for-numbered-array-members.patch b/SOURCES/libvirt-util-qemu-Add-support-for-numbered-array-members.patch new file mode 100644 index 0000000..4ffe03f --- /dev/null +++ b/SOURCES/libvirt-util-qemu-Add-support-for-numbered-array-members.patch @@ -0,0 +1,169 @@ +From 4c7c0cbfadf1df719e3236d8ea09e97d2b69cb15 Mon Sep 17 00:00:00 2001 +Message-Id: <4c7c0cbfadf1df719e3236d8ea09e97d2b69cb15@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:42:02 +0200 +Subject: [PATCH] util: qemu: Add support for numbered array members + +Add support for converting objects nested in arrays with a numbering +discriminator on the command line. This syntax is used for the +object-based specification of disk source properties. + +(cherry picked from commit 74df83a9eba87f81d4190dad0db7e30b9d89c7ea) +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/libvirt_private.syms | 1 + + src/util/virqemu.c | 33 +++++++++++++++++++++++++++++++++ + src/util/virqemu.h | 3 +++ + tests/qemucommandutiltest.c | 36 +++++++++++++++++++++++++++++++++--- + 4 files changed, 70 insertions(+), 3 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 27bf269..533cf55 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2195,6 +2195,7 @@ virProcessWait; + virQEMUBuildBufferEscapeComma; + virQEMUBuildCommandLineJSON; + virQEMUBuildCommandLineJSONArrayBitmap; ++virQEMUBuildCommandLineJSONArrayNumbered; + virQEMUBuildLuksOpts; + virQEMUBuildObjectCommandlineFromJSON; + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 8babe36..20410f7 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -79,6 +79,39 @@ virQEMUBuildCommandLineJSONArrayBitmap(const char *key, + } + + ++int ++virQEMUBuildCommandLineJSONArrayNumbered(const char *key, ++ const virJSONValue *array, ++ virBufferPtr buf) ++{ ++ const virJSONValue *member; ++ size_t nelems = virJSONValueArraySize(array); ++ char *prefix = NULL; ++ size_t i; ++ int ret = 0; ++ ++ for (i = 0; i < nelems; i++) { ++ member = virJSONValueArrayGet((virJSONValuePtr) array, i); ++ ++ if (virAsprintf(&prefix, "%s.%zu", key, i) < 0) ++ goto cleanup; ++ ++ if (virQEMUBuildCommandLineJSONRecurse(prefix, member, buf, ++ virQEMUBuildCommandLineJSONArrayNumbered, ++ true) < 0) ++ goto cleanup; ++ ++ VIR_FREE(prefix); ++ } ++ ++ ret = 0; ++ ++ cleanup: ++ VIR_FREE(prefix); ++ return ret; ++} ++ ++ + /* internal iterator to handle nested object formatting */ + static int + virQEMUBuildCommandLineJSONIterate(const char *key, +diff --git a/src/util/virqemu.h b/src/util/virqemu.h +index 801c35b..40cd9b8 100644 +--- a/src/util/virqemu.h ++++ b/src/util/virqemu.h +@@ -35,6 +35,9 @@ typedef int (*virQEMUBuildCommandLineJSONArrayFormatFunc)(const char *key, + int virQEMUBuildCommandLineJSONArrayBitmap(const char *key, + const virJSONValue *array, + virBufferPtr buf); ++int virQEMUBuildCommandLineJSONArrayNumbered(const char *key, ++ const virJSONValue *array, ++ virBufferPtr buf); + + int virQEMUBuildCommandLineJSON(const virJSONValue *value, + virBufferPtr buf, +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index 0bf0351..1985983 100644 +--- a/tests/qemucommandutiltest.c ++++ b/tests/qemucommandutiltest.c +@@ -30,6 +30,7 @@ typedef struct + { + const char *props; + const char *expectprops; ++ virQEMUBuildCommandLineJSONArrayFormatFunc arrayfunc; + } testQemuCommandBuildObjectFromJSONData; + + static int +@@ -46,8 +47,7 @@ testQemuCommandBuildFromJSON(const void *opaque) + return -1; + } + +- if (virQEMUBuildCommandLineJSON(val, &buf, +- virQEMUBuildCommandLineJSONArrayBitmap) < 0) { ++ if (virQEMUBuildCommandLineJSON(val, &buf, data->arrayfunc) < 0) { + fprintf(stderr, + "\nvirQEMUBuildCommandlineJSON failed process JSON:\n%s\n", + data->props); +@@ -83,16 +83,23 @@ mymain(void) + + virTestCounterReset("testQemuCommandBuildFromJSON"); + +-#define DO_TEST_COMMAND_OBJECT_FROM_JSON(PROPS, EXPECT) \ ++#define DO_TEST_COMMAND_FROM_JSON(PROPS, ARRAYFUNC, EXPECT) \ + do { \ + data1.props = PROPS; \ + data1.expectprops = EXPECT; \ ++ data1.arrayfunc = ARRAYFUNC; \ + if (virTestRun(virTestCounterNext(), \ + testQemuCommandBuildFromJSON, \ + &data1) < 0) \ + ret = -1; \ + } while (0) + ++#define DO_TEST_COMMAND_OBJECT_FROM_JSON(PROPS, EXPECT) \ ++ DO_TEST_COMMAND_FROM_JSON(PROPS, virQEMUBuildCommandLineJSONArrayBitmap, EXPECT) ++ ++#define DO_TEST_COMMAND_DRIVE_FROM_JSON(PROPS, EXPECT) \ ++ DO_TEST_COMMAND_FROM_JSON(PROPS, virQEMUBuildCommandLineJSONArrayNumbered, EXPECT) ++ + DO_TEST_COMMAND_OBJECT_FROM_JSON("{}", NULL); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"string\":\"qwer\"}", "string=qwer"); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"string\":\"qw,e,r\"}", "string=qw,,e,,r"); +@@ -120,6 +127,29 @@ mymain(void) + "}", + "nest.boolean=yes,nest.hyphen-name=1234," + "nest.some_string=bleah,nest.bleah=bl,,eah"); ++ DO_TEST_COMMAND_DRIVE_FROM_JSON("{\"driver\":\"gluster\"," ++ "\"volume\":\"test\"," ++ "\"path\":\"img\"," ++ "\"server\":[ { \"type\":\"tcp\"," ++ "\"host\":\"example.com\"," ++ "\"port\":\"1234\"" ++ "}," ++ "{ \"type\":\"unix\"," ++ "\"socket\":\"/path/socket\"" ++ "}," ++ "{ \"type\":\"tcp\"," ++ "\"host\":\"example.com\"" ++ "}" ++ "]" ++ "}", ++ "driver=gluster,volume=test,path=img," ++ "server.0.type=tcp," ++ "server.0.host=example.com," ++ "server.0.port=1234," ++ "server.1.type=unix," ++ "server.1.socket=/path/socket," ++ "server.2.type=tcp," ++ "server.2.host=example.com"); + + return ret; + +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-qemu-Add-support-for-user-passed-strings-in-JSON-commandline.patch b/SOURCES/libvirt-util-qemu-Add-support-for-user-passed-strings-in-JSON-commandline.patch new file mode 100644 index 0000000..56df66f --- /dev/null +++ b/SOURCES/libvirt-util-qemu-Add-support-for-user-passed-strings-in-JSON-commandline.patch @@ -0,0 +1,49 @@ +From dc6ab905ea7c40ab3bdb76ecb8b3eb7b088c4a05 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:43 +0200 +Subject: [PATCH] util: qemu: Add support for user-passed strings in + JSON->commandline + +Until now the JSON->commandline convertor was used only for objects +created by qemu. To allow reusing it with disk formatter we'll need to +escape ',' as usual in qemu commandlines. + +(cherry picked from commit 25a272ada48302ea0d7333b4f2e3556a713230a5) + +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virqemu.c | 3 ++- + tests/qemucommandutiltest.c | 1 + + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index a5d5385..99c14c2 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -46,7 +46,8 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + + switch ((virJSONType) value->type) { + case VIR_JSON_TYPE_STRING: +- virBufferAsprintf(buf, ",%s=%s", key, value->data.string); ++ virBufferAsprintf(buf, ",%s=", key); ++ virQEMUBuildBufferEscapeComma(buf, value->data.string); + break; + + case VIR_JSON_TYPE_NUMBER: +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index 21fef1c..8299462 100644 +--- a/tests/qemucommandutiltest.c ++++ b/tests/qemucommandutiltest.c +@@ -100,6 +100,7 @@ mymain(void) + + DO_TEST_COMMAND_OBJECT_FROM_JSON("{}", NULL); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"string\":\"qwer\"}", "string=qwer"); ++ DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"string\":\"qw,e,r\"}", "string=qw,,e,,r"); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"number\":1234}", "number=1234"); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"boolean\":true}", "boolean=yes"); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"boolean\":false}", "boolean=no"); +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-qemu-Add-wrapper-for-JSON-commandline-conversion.patch b/SOURCES/libvirt-util-qemu-Add-wrapper-for-JSON-commandline-conversion.patch new file mode 100644 index 0000000..95d5df9 --- /dev/null +++ b/SOURCES/libvirt-util-qemu-Add-wrapper-for-JSON-commandline-conversion.patch @@ -0,0 +1,200 @@ +From eafefeba1bb510d26e37b9d7d9f3e84f9a41e462 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:42 +0200 +Subject: [PATCH] util: qemu: Add wrapper for JSON -> commandline conversion + +Refactor the command line generator by adding a wrapper (with +documentation) that will handle the outermost object iteration. + +This patch also renames the functions and tweaks the error message for +nested arrays to be more universal. + +The new function is then reused to simplify qemucommandutiltest. + +(cherry picked from commit f0276c34891cb17c4b20ad9956267d6249d24cfa) + +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/libvirt_private.syms | 1 + + src/util/virqemu.c | 45 +++++++++++++++++++++++++++++++++------------ + src/util/virqemu.h | 3 +++ + tests/qemucommandutiltest.c | 22 ++++++++++++++-------- + 4 files changed, 51 insertions(+), 20 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 3e4b2e7..70e40be 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2193,6 +2193,7 @@ virProcessWait; + + # util/virqemu.h + virQEMUBuildBufferEscapeComma; ++virQEMUBuildCommandLineJSON; + virQEMUBuildLuksOpts; + virQEMUBuildObjectCommandlineFromJSON; + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 7d181e1..a5d5385 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -33,10 +33,10 @@ VIR_LOG_INIT("util.qemu"); + + + static int +-virQEMUBuildObjectCommandLinePropsInternal(const char *key, +- const virJSONValue *value, +- virBufferPtr buf, +- bool nested) ++virQEMUBuildCommandLineJSONRecurse(const char *key, ++ const virJSONValue *value, ++ virBufferPtr buf, ++ bool nested) + { + virJSONValuePtr elem; + virBitmapPtr bitmap = NULL; +@@ -64,7 +64,8 @@ virQEMUBuildObjectCommandLinePropsInternal(const char *key, + case VIR_JSON_TYPE_ARRAY: + if (nested) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("nested -object property arrays are not supported")); ++ _("nested JSON array to commandline conversion is " ++ "not supported")); + return -1; + } + +@@ -87,8 +88,7 @@ virQEMUBuildObjectCommandLinePropsInternal(const char *key, + elem = virJSONValueArrayGet((virJSONValuePtr)value, i); + + /* recurse to avoid duplicating code */ +- if (virQEMUBuildObjectCommandLinePropsInternal(key, elem, buf, +- true) < 0) ++ if (virQEMUBuildCommandLineJSONRecurse(key, elem, buf, true) < 0) + return -1; + } + } +@@ -108,11 +108,34 @@ virQEMUBuildObjectCommandLinePropsInternal(const char *key, + + + static int +-virQEMUBuildObjectCommandLineProps(const char *key, ++virQEMUBuildCommandLineJSONIterate(const char *key, + const virJSONValue *value, + void *opaque) + { +- return virQEMUBuildObjectCommandLinePropsInternal(key, value, opaque, false); ++ return virQEMUBuildCommandLineJSONRecurse(key, value, opaque, false); ++} ++ ++ ++/** ++ * virQEMUBuildCommandLineJSON: ++ * @value: json object containing the value ++ * @buf: otuput buffer ++ * ++ * Formats JSON value object into command line parameters suitable for use with ++ * qemu. ++ * ++ * Returns 0 on success -1 on error. ++ */ ++int ++virQEMUBuildCommandLineJSON(const virJSONValue *value, ++ virBufferPtr buf) ++{ ++ if (virJSONValueObjectForeachKeyValue(value, ++ virQEMUBuildCommandLineJSONIterate, ++ buf) < 0) ++ return -1; ++ ++ return 0; + } + + +@@ -126,9 +149,7 @@ virQEMUBuildObjectCommandlineFromJSON(const char *type, + + virBufferAsprintf(&buf, "%s,id=%s", type, alias); + +- if (virJSONValueObjectForeachKeyValue(props, +- virQEMUBuildObjectCommandLineProps, +- &buf) < 0) ++ if (virQEMUBuildCommandLineJSON(props, &buf) < 0) + goto cleanup; + + if (virBufferCheckError(&buf) < 0) +diff --git a/src/util/virqemu.h b/src/util/virqemu.h +index eb75d1b..efc6c42 100644 +--- a/src/util/virqemu.h ++++ b/src/util/virqemu.h +@@ -29,6 +29,9 @@ + # include "virjson.h" + # include "virstorageencryption.h" + ++int virQEMUBuildCommandLineJSON(const virJSONValue *value, ++ virBufferPtr buf); ++ + char *virQEMUBuildObjectCommandlineFromJSON(const char *type, + const char *alias, + virJSONValuePtr props); +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index c02d1db..21fef1c 100644 +--- a/tests/qemucommandutiltest.c ++++ b/tests/qemucommandutiltest.c +@@ -33,11 +33,12 @@ typedef struct + } testQemuCommandBuildObjectFromJSONData; + + static int +-testQemuCommandBuildObjectFromJSON(const void *opaque) ++testQemuCommandBuildFromJSON(const void *opaque) + { + const testQemuCommandBuildObjectFromJSONData *data = opaque; + virJSONValuePtr val = NULL; + char *expect = NULL; ++ virBuffer buf = VIR_BUFFER_INITIALIZER; + char *result = NULL; + int ret = -1; + +@@ -46,13 +47,18 @@ testQemuCommandBuildObjectFromJSON(const void *opaque) + return -1; + } + +- if (virAsprintf(&expect, "testobject,id=testalias%s%s", +- data->expectprops ? "," : "", +- data->expectprops ? data->expectprops : "") < 0) ++ if (data->expectprops && ++ virAsprintf(&expect, ",%s", data->expectprops) < 0) + return -1; + +- result = virQEMUBuildObjectCommandlineFromJSON("testobject", +- "testalias", val); ++ if (virQEMUBuildCommandLineJSON(val, &buf) < 0) { ++ fprintf(stderr, ++ "\nvirQEMUBuildCommandlineJSON failed process JSON:\n%s\n", ++ data->props); ++ goto cleanup; ++ } ++ ++ result = virBufferContentAndReset(&buf); + + if (STRNEQ_NULLABLE(expect, result)) { + fprintf(stderr, "\nFailed to create object string. " +@@ -80,14 +86,14 @@ mymain(void) + return EXIT_AM_SKIP; + #endif + +- virTestCounterReset("testQemuCommandBuildObjectFromJSON"); ++ virTestCounterReset("testQemuCommandBuildFromJSON"); + + #define DO_TEST_COMMAND_OBJECT_FROM_JSON(PROPS, EXPECT) \ + do { \ + data1.props = PROPS; \ + data1.expectprops = EXPECT; \ + if (virTestRun(virTestCounterNext(), \ +- testQemuCommandBuildObjectFromJSON, \ ++ testQemuCommandBuildFromJSON, \ + &data1) < 0) \ + ret = -1; \ + } while (0) +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-qemu-Allow-for-different-approaches-to-format-JSON-arrays.patch b/SOURCES/libvirt-util-qemu-Allow-for-different-approaches-to-format-JSON-arrays.patch new file mode 100644 index 0000000..1c71728 --- /dev/null +++ b/SOURCES/libvirt-util-qemu-Allow-for-different-approaches-to-format-JSON-arrays.patch @@ -0,0 +1,231 @@ +From e07158fef33e27a1e76cf9e4e04884462a876ea8 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:45 +0200 +Subject: [PATCH] util: qemu: Allow for different approaches to format JSON + arrays + +For use with memory hotplug virQEMUBuildCommandLineJSONRecurse attempted +to format JSON arrays as bitmap on the command line. Make the formatter +function configurable so that it can be reused with different syntaxes +of arrays such as numbered arrays for use with disk sources. + +This patch extracts the code and adds a parameter for the function that +will allow to plug in different formatters. + +(cherry picked from commit b7eef33df20dc19b3c70285ee29dabd2ee7391fa) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/libvirt_private.syms | 1 + + src/util/virqemu.c | 73 ++++++++++++++++++++++++++++++--------------- + src/util/virqemu.h | 10 ++++++- + tests/qemucommandutiltest.c | 3 +- + 4 files changed, 61 insertions(+), 26 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 70e40be..27bf269 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2194,6 +2194,7 @@ virProcessWait; + # util/virqemu.h + virQEMUBuildBufferEscapeComma; + virQEMUBuildCommandLineJSON; ++virQEMUBuildCommandLineJSONArrayBitmap; + virQEMUBuildLuksOpts; + virQEMUBuildObjectCommandlineFromJSON; + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index df665ad..3cc59e7 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -36,6 +36,7 @@ VIR_LOG_INIT("util.qemu"); + struct virQEMUCommandLineJSONIteratorData { + const char *prefix; + virBufferPtr buf; ++ virQEMUBuildCommandLineJSONArrayFormatFunc arrayFunc; + }; + + +@@ -43,8 +44,41 @@ static int + virQEMUBuildCommandLineJSONRecurse(const char *key, + const virJSONValue *value, + virBufferPtr buf, ++ virQEMUBuildCommandLineJSONArrayFormatFunc arrayFunc, + bool nested); + ++ ++ ++int ++virQEMUBuildCommandLineJSONArrayBitmap(const char *key, ++ const virJSONValue *array, ++ virBufferPtr buf) ++{ ++ ssize_t pos = -1; ++ ssize_t end; ++ virBitmapPtr bitmap = NULL; ++ ++ if (virJSONValueGetArrayAsBitmap(array, &bitmap) < 0) ++ return -1; ++ ++ while ((pos = virBitmapNextSetBit(bitmap, pos)) > -1) { ++ if ((end = virBitmapNextClearBit(bitmap, pos)) < 0) ++ end = virBitmapLastSetBit(bitmap) + 1; ++ ++ if (end - 1 > pos) { ++ virBufferAsprintf(buf, ",%s=%zd-%zd", key, pos, end - 1); ++ pos = end; ++ } else { ++ virBufferAsprintf(buf, ",%s=%zd", key, pos); ++ } ++ } ++ ++ virBitmapFree(bitmap); ++ ++ return 0; ++} ++ ++ + /* internal iterator to handle nested object formatting */ + static int + virQEMUBuildCommandLineJSONIterate(const char *key, +@@ -59,11 +93,13 @@ virQEMUBuildCommandLineJSONIterate(const char *key, + if (virAsprintf(&tmpkey, "%s.%s", data->prefix, key) < 0) + return -1; + +- ret = virQEMUBuildCommandLineJSONRecurse(tmpkey, value, data->buf, false); ++ ret = virQEMUBuildCommandLineJSONRecurse(tmpkey, value, data->buf, ++ data->arrayFunc, false); + + VIR_FREE(tmpkey); + } else { +- ret = virQEMUBuildCommandLineJSONRecurse(key, value, data->buf, false); ++ ret = virQEMUBuildCommandLineJSONRecurse(key, value, data->buf, ++ data->arrayFunc, false); + } + + return ret; +@@ -74,13 +110,11 @@ static int + virQEMUBuildCommandLineJSONRecurse(const char *key, + const virJSONValue *value, + virBufferPtr buf, ++ virQEMUBuildCommandLineJSONArrayFormatFunc arrayFunc, + bool nested) + { +- struct virQEMUCommandLineJSONIteratorData data = { key, buf }; ++ struct virQEMUCommandLineJSONIteratorData data = { key, buf, arrayFunc }; + virJSONValuePtr elem; +- virBitmapPtr bitmap = NULL; +- ssize_t pos = -1; +- ssize_t end; + size_t i; + + if (!key && value->type != VIR_JSON_TYPE_OBJECT) { +@@ -115,26 +149,15 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + return -1; + } + +- if (virJSONValueGetArrayAsBitmap(value, &bitmap) == 0) { +- while ((pos = virBitmapNextSetBit(bitmap, pos)) > -1) { +- if ((end = virBitmapNextClearBit(bitmap, pos)) < 0) +- end = virBitmapLastSetBit(bitmap) + 1; +- +- if (end - 1 > pos) { +- virBufferAsprintf(buf, ",%s=%zd-%zd", key, pos, end - 1); +- pos = end; +- } else { +- virBufferAsprintf(buf, ",%s=%zd", key, pos); +- } +- } +- } else { ++ if (!arrayFunc || arrayFunc(key, value, buf) < 0) { + /* fallback, treat the array as a non-bitmap, adding the key + * for each member */ + for (i = 0; i < virJSONValueArraySize(value); i++) { + elem = virJSONValueArrayGet((virJSONValuePtr)value, i); + + /* recurse to avoid duplicating code */ +- if (virQEMUBuildCommandLineJSONRecurse(key, elem, buf, true) < 0) ++ if (virQEMUBuildCommandLineJSONRecurse(key, elem, buf, ++ arrayFunc, true) < 0) + return -1; + } + } +@@ -153,7 +176,6 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + return -1; + } + +- virBitmapFree(bitmap); + return 0; + } + +@@ -162,6 +184,7 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + * virQEMUBuildCommandLineJSON: + * @value: json object containing the value + * @buf: otuput buffer ++ * @arrayFunc: array formatter function to allow for different syntax + * + * Formats JSON value object into command line parameters suitable for use with + * qemu. +@@ -170,9 +193,10 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + */ + int + virQEMUBuildCommandLineJSON(const virJSONValue *value, +- virBufferPtr buf) ++ virBufferPtr buf, ++ virQEMUBuildCommandLineJSONArrayFormatFunc array) + { +- return virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, false); ++ return virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false); + } + + +@@ -186,7 +210,8 @@ virQEMUBuildObjectCommandlineFromJSON(const char *type, + + virBufferAsprintf(&buf, "%s,id=%s", type, alias); + +- if (virQEMUBuildCommandLineJSON(props, &buf) < 0) ++ if (virQEMUBuildCommandLineJSON(props, &buf, ++ virQEMUBuildCommandLineJSONArrayBitmap) < 0) + goto cleanup; + + if (virBufferCheckError(&buf) < 0) +diff --git a/src/util/virqemu.h b/src/util/virqemu.h +index efc6c42..801c35b 100644 +--- a/src/util/virqemu.h ++++ b/src/util/virqemu.h +@@ -29,8 +29,16 @@ + # include "virjson.h" + # include "virstorageencryption.h" + ++typedef int (*virQEMUBuildCommandLineJSONArrayFormatFunc)(const char *key, ++ const virJSONValue *array, ++ virBufferPtr buf); ++int virQEMUBuildCommandLineJSONArrayBitmap(const char *key, ++ const virJSONValue *array, ++ virBufferPtr buf); ++ + int virQEMUBuildCommandLineJSON(const virJSONValue *value, +- virBufferPtr buf); ++ virBufferPtr buf, ++ virQEMUBuildCommandLineJSONArrayFormatFunc array); + + char *virQEMUBuildObjectCommandlineFromJSON(const char *type, + const char *alias, +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index 4872ea3..a5e3153 100644 +--- a/tests/qemucommandutiltest.c ++++ b/tests/qemucommandutiltest.c +@@ -51,7 +51,8 @@ testQemuCommandBuildFromJSON(const void *opaque) + virAsprintf(&expect, ",%s", data->expectprops) < 0) + return -1; + +- if (virQEMUBuildCommandLineJSON(val, &buf) < 0) { ++ if (virQEMUBuildCommandLineJSON(val, &buf, ++ virQEMUBuildCommandLineJSONArrayBitmap) < 0) { + fprintf(stderr, + "\nvirQEMUBuildCommandlineJSON failed process JSON:\n%s\n", + data->props); +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-qemu-Allow-nested-objects-in-JSON-commandline-generator.patch b/SOURCES/libvirt-util-qemu-Allow-nested-objects-in-JSON-commandline-generator.patch new file mode 100644 index 0000000..7174796 --- /dev/null +++ b/SOURCES/libvirt-util-qemu-Allow-nested-objects-in-JSON-commandline-generator.patch @@ -0,0 +1,163 @@ +From 6360c62ec2a0ccfb66346daa3566930111685598 Mon Sep 17 00:00:00 2001 +Message-Id: <6360c62ec2a0ccfb66346daa3566930111685598@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:44 +0200 +Subject: [PATCH] util: qemu: Allow nested objects in JSON -> commandline + generator + +Move the iterator of objects to the recursive function so that nested +objects are supported by flattening the structure with '.' delimiters. + +(cherry picked from commit cd86d6f4656d01894141840531d61595e40e4682) + +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virqemu.c | 70 ++++++++++++++++++++++++++++++++++----------- + tests/qemucommandutiltest.c | 8 ++++++ + 2 files changed, 61 insertions(+), 17 deletions(-) + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 99c14c2..df665ad 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -26,11 +26,49 @@ + #include "virerror.h" + #include "virlog.h" + #include "virqemu.h" ++#include "virstring.h" ++#include "viralloc.h" + + #define VIR_FROM_THIS VIR_FROM_NONE + + VIR_LOG_INIT("util.qemu"); + ++struct virQEMUCommandLineJSONIteratorData { ++ const char *prefix; ++ virBufferPtr buf; ++}; ++ ++ ++static int ++virQEMUBuildCommandLineJSONRecurse(const char *key, ++ const virJSONValue *value, ++ virBufferPtr buf, ++ bool nested); ++ ++/* internal iterator to handle nested object formatting */ ++static int ++virQEMUBuildCommandLineJSONIterate(const char *key, ++ const virJSONValue *value, ++ void *opaque) ++{ ++ struct virQEMUCommandLineJSONIteratorData *data = opaque; ++ char *tmpkey = NULL; ++ int ret = -1; ++ ++ if (data->prefix) { ++ if (virAsprintf(&tmpkey, "%s.%s", data->prefix, key) < 0) ++ return -1; ++ ++ ret = virQEMUBuildCommandLineJSONRecurse(tmpkey, value, data->buf, false); ++ ++ VIR_FREE(tmpkey); ++ } else { ++ ret = virQEMUBuildCommandLineJSONRecurse(key, value, data->buf, false); ++ } ++ ++ return ret; ++} ++ + + static int + virQEMUBuildCommandLineJSONRecurse(const char *key, +@@ -38,12 +76,19 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + virBufferPtr buf, + bool nested) + { ++ struct virQEMUCommandLineJSONIteratorData data = { key, buf }; + virJSONValuePtr elem; + virBitmapPtr bitmap = NULL; + ssize_t pos = -1; + ssize_t end; + size_t i; + ++ if (!key && value->type != VIR_JSON_TYPE_OBJECT) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("only JSON objects can be top level")); ++ return -1; ++ } ++ + switch ((virJSONType) value->type) { + case VIR_JSON_TYPE_STRING: + virBufferAsprintf(buf, ",%s=", key); +@@ -96,10 +141,15 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + break; + + case VIR_JSON_TYPE_OBJECT: ++ if (virJSONValueObjectForeachKeyValue(value, ++ virQEMUBuildCommandLineJSONIterate, ++ &data) < 0) ++ return -1; ++ break; ++ + case VIR_JSON_TYPE_NULL: + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("NULL and OBJECT JSON types can't be converted to " +- "commandline string")); ++ _("NULL JSON type can't be converted to commandline")); + return -1; + } + +@@ -108,15 +158,6 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + } + + +-static int +-virQEMUBuildCommandLineJSONIterate(const char *key, +- const virJSONValue *value, +- void *opaque) +-{ +- return virQEMUBuildCommandLineJSONRecurse(key, value, opaque, false); +-} +- +- + /** + * virQEMUBuildCommandLineJSON: + * @value: json object containing the value +@@ -131,12 +172,7 @@ int + virQEMUBuildCommandLineJSON(const virJSONValue *value, + virBufferPtr buf) + { +- if (virJSONValueObjectForeachKeyValue(value, +- virQEMUBuildCommandLineJSONIterate, +- buf) < 0) +- return -1; +- +- return 0; ++ return virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, false); + } + + +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index 8299462..4872ea3 100644 +--- a/tests/qemucommandutiltest.c ++++ b/tests/qemucommandutiltest.c +@@ -117,6 +117,14 @@ mymain(void) + "array=bleah,array=qwerty,array=1"); + DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"boolean\":true,\"hyphen-name\":1234,\"some_string\":\"bleah\"}", + "boolean=yes,hyphen-name=1234,some_string=bleah"); ++ DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"nest\": {\"boolean\":true," ++ "\"hyphen-name\":1234," ++ "\"some_string\":\"bleah\"," ++ "\"bleah\":\"bl,eah\"" ++ "}" ++ "}", ++ "nest.boolean=yes,nest.hyphen-name=1234," ++ "nest.some_string=bleah,nest.bleah=bl,,eah"); + + return ret; + +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-qemu-Don-t-generate-any-extra-commas-in-virQEMUBuildCommandLineJSON.patch b/SOURCES/libvirt-util-qemu-Don-t-generate-any-extra-commas-in-virQEMUBuildCommandLineJSON.patch new file mode 100644 index 0000000..8cbaa38 --- /dev/null +++ b/SOURCES/libvirt-util-qemu-Don-t-generate-any-extra-commas-in-virQEMUBuildCommandLineJSON.patch @@ -0,0 +1,131 @@ +From b268c983e92680e9083c9e8d75e64e6215dff7b9 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:46 +0200 +Subject: [PATCH] util: qemu: Don't generate any extra commas in + virQEMUBuildCommandLineJSON + +The function would generate a leading comma. Let the callers properly +add commas by formatting the commas at the end and trimming the trailing +one. + +(cherry picked from commit ca620e35ea75dc07f9415c384e240cc2adea4cb4) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virqemu.c | 22 ++++++++++++++-------- + tests/qemucommandutiltest.c | 10 ++-------- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/src/util/virqemu.c b/src/util/virqemu.c +index 3cc59e7..8babe36 100644 +--- a/src/util/virqemu.c ++++ b/src/util/virqemu.c +@@ -66,10 +66,10 @@ virQEMUBuildCommandLineJSONArrayBitmap(const char *key, + end = virBitmapLastSetBit(bitmap) + 1; + + if (end - 1 > pos) { +- virBufferAsprintf(buf, ",%s=%zd-%zd", key, pos, end - 1); ++ virBufferAsprintf(buf, "%s=%zd-%zd,", key, pos, end - 1); + pos = end; + } else { +- virBufferAsprintf(buf, ",%s=%zd", key, pos); ++ virBufferAsprintf(buf, "%s=%zd,", key, pos); + } + } + +@@ -125,19 +125,20 @@ virQEMUBuildCommandLineJSONRecurse(const char *key, + + switch ((virJSONType) value->type) { + case VIR_JSON_TYPE_STRING: +- virBufferAsprintf(buf, ",%s=", key); ++ virBufferAsprintf(buf, "%s=", key); + virQEMUBuildBufferEscapeComma(buf, value->data.string); ++ virBufferAddLit(buf, ","); + break; + + case VIR_JSON_TYPE_NUMBER: +- virBufferAsprintf(buf, ",%s=%s", key, value->data.number); ++ virBufferAsprintf(buf, "%s=%s,", key, value->data.number); + break; + + case VIR_JSON_TYPE_BOOLEAN: + if (value->data.boolean) +- virBufferAsprintf(buf, ",%s=yes", key); ++ virBufferAsprintf(buf, "%s=yes,", key); + else +- virBufferAsprintf(buf, ",%s=no", key); ++ virBufferAsprintf(buf, "%s=no,", key); + + break; + +@@ -196,7 +197,12 @@ virQEMUBuildCommandLineJSON(const virJSONValue *value, + virBufferPtr buf, + virQEMUBuildCommandLineJSONArrayFormatFunc array) + { +- return virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false); ++ if (virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false) < 0) ++ return -1; ++ ++ virBufferTrim(buf, ",", -1); ++ ++ return 0; + } + + +@@ -208,7 +214,7 @@ virQEMUBuildObjectCommandlineFromJSON(const char *type, + virBuffer buf = VIR_BUFFER_INITIALIZER; + char *ret = NULL; + +- virBufferAsprintf(&buf, "%s,id=%s", type, alias); ++ virBufferAsprintf(&buf, "%s,id=%s,", type, alias); + + if (virQEMUBuildCommandLineJSON(props, &buf, + virQEMUBuildCommandLineJSONArrayBitmap) < 0) +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index a5e3153..0bf0351 100644 +--- a/tests/qemucommandutiltest.c ++++ b/tests/qemucommandutiltest.c +@@ -37,7 +37,6 @@ testQemuCommandBuildFromJSON(const void *opaque) + { + const testQemuCommandBuildObjectFromJSONData *data = opaque; + virJSONValuePtr val = NULL; +- char *expect = NULL; + virBuffer buf = VIR_BUFFER_INITIALIZER; + char *result = NULL; + int ret = -1; +@@ -47,10 +46,6 @@ testQemuCommandBuildFromJSON(const void *opaque) + return -1; + } + +- if (data->expectprops && +- virAsprintf(&expect, ",%s", data->expectprops) < 0) +- return -1; +- + if (virQEMUBuildCommandLineJSON(val, &buf, + virQEMUBuildCommandLineJSONArrayBitmap) < 0) { + fprintf(stderr, +@@ -61,10 +56,10 @@ testQemuCommandBuildFromJSON(const void *opaque) + + result = virBufferContentAndReset(&buf); + +- if (STRNEQ_NULLABLE(expect, result)) { ++ if (STRNEQ_NULLABLE(data->expectprops, result)) { + fprintf(stderr, "\nFailed to create object string. " + "\nExpected:\n'%s'\nGot:\n'%s'", +- NULLSTR(expect), NULLSTR(result)); ++ NULLSTR(data->expectprops), NULLSTR(result)); + goto cleanup; + } + +@@ -72,7 +67,6 @@ testQemuCommandBuildFromJSON(const void *opaque) + cleanup: + virJSONValueFree(val); + VIR_FREE(result); +- VIR_FREE(expect); + return ret; + } + +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-JSON-backing-store-parser-for-sheepdog-protocol.patch b/SOURCES/libvirt-util-storage-Add-JSON-backing-store-parser-for-sheepdog-protocol.patch new file mode 100644 index 0000000..a326a63 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-JSON-backing-store-parser-for-sheepdog-protocol.patch @@ -0,0 +1,60 @@ +From 263cc0f803c4c0e2e7ac1a9bce3fc2ee20539ff9 Mon Sep 17 00:00:00 2001 +Message-Id: <263cc0f803c4c0e2e7ac1a9bce3fc2ee20539ff9@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:54 +0200 +Subject: [PATCH] util: storage: Add JSON backing store parser for 'sheepdog' + protocol + +(cherry picked from commit ba8806c8cc62161ea55d0ef68bcaab73a2c70bf8) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 7f598fa..48c0956 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2755,6 +2755,30 @@ virStorageSourceParseBackingJSONNbd(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONSheepdog(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int opaque ATTRIBUTE_UNUSED) ++{ ++ const char *filename; ++ ++ /* legacy URI based syntax passed via 'filename' option */ ++ if ((filename = virJSONValueObjectGetString(json, "filename"))) { ++ if (strstr(filename, "://")) ++ return virStorageSourceParseBackingJSONUriStr(src, filename, ++ VIR_STORAGE_NET_PROTOCOL_SHEEPDOG); ++ ++ /* libvirt doesn't implement a parser for the legacy non-URI syntax */ ++ } ++ ++ /* Sheepdog currently supports only URI and legacy syntax passed in as filename */ ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing sheepdog URI in JSON backing volume definition")); ++ ++ return -1; ++} ++ ++ + struct virStorageSourceJSONDriverParser { + const char *drvname; + int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); +@@ -2773,6 +2797,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"gluster", virStorageSourceParseBackingJSONGluster, 0}, + {"iscsi", virStorageSourceParseBackingJSONiSCSI, 0}, + {"nbd", virStorageSourceParseBackingJSONNbd, 0}, ++ {"sheepdog", virStorageSourceParseBackingJSONSheepdog, 0}, + }; + + +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-JSON-backing-volume-parser-for-nbd-protocol.patch b/SOURCES/libvirt-util-storage-Add-JSON-backing-volume-parser-for-nbd-protocol.patch new file mode 100644 index 0000000..abd0ffe --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-JSON-backing-volume-parser-for-nbd-protocol.patch @@ -0,0 +1,122 @@ +From 35b27f217c3614ffe368262297ca4e77e9bec4bb Mon Sep 17 00:00:00 2001 +Message-Id: <35b27f217c3614ffe368262297ca4e77e9bec4bb@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:53 +0200 +Subject: [PATCH] util: storage: Add JSON backing volume parser for 'nbd' + protocol + +(cherry picked from commit a1674fd9d98d5e0c39c02a0c05841089c8ed63f2) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + tests/virstoragetest.c | 30 ++++++++++++++++++++++++++++++ + 2 files changed, 75 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 7fd1593..7f598fa 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2711,6 +2711,50 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONNbd(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int opaque ATTRIBUTE_UNUSED) ++{ ++ const char *path = virJSONValueObjectGetString(json, "path"); ++ const char *host = virJSONValueObjectGetString(json, "host"); ++ const char *port = virJSONValueObjectGetString(json, "port"); ++ const char *export = virJSONValueObjectGetString(json, "export"); ++ ++ if (!path && !host) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing path or host of NBD server in JSON backing " ++ "volume definition")); ++ return -1; ++ } ++ ++ src->type = VIR_STORAGE_TYPE_NETWORK; ++ src->protocol = VIR_STORAGE_NET_PROTOCOL_NBD; ++ ++ if (VIR_STRDUP(src->path, export) < 0) ++ return -1; ++ ++ if (VIR_ALLOC_N(src->hosts, 1) < 0) ++ return -1; ++ src->nhosts = 1; ++ ++ if (path) { ++ src->hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_UNIX; ++ if (VIR_STRDUP(src->hosts[0].socket, path) < 0) ++ return -1; ++ } else { ++ src->hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_TCP; ++ if (VIR_STRDUP(src->hosts[0].name, host) < 0) ++ return -1; ++ ++ if (VIR_STRDUP(src->hosts[0].port, port) < 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ + struct virStorageSourceJSONDriverParser { + const char *drvname; + int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); +@@ -2728,6 +2772,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"tftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP}, + {"gluster", virStorageSourceParseBackingJSONGluster, 0}, + {"iscsi", virStorageSourceParseBackingJSONiSCSI, 0}, ++ {"nbd", virStorageSourceParseBackingJSONNbd, 0}, + }; + + +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 22aae47..4ddcac0 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1437,6 +1437,36 @@ mymain(void) + " \n" + " \n" + "\n"); ++ TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"nbd\"," ++ "\"path\":\"/path/to/socket\"" ++ "}" ++ "}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"nbd\"," ++ "\"file.path\":\"/path/to/socket\"" ++ "}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"nbd\"," ++ "\"export\":\"blah\"," ++ "\"host\":\"example.org\"," ++ "\"port\":\"6000\"" ++ "}" ++ "}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"nbd\"," ++ "\"file.export\":\"blah\"," ++ "\"file.host\":\"example.org\"," ++ "\"file.port\":\"6000\"" ++ "}", ++ "\n" ++ " \n" ++ "\n"); + + cleanup: + /* Final cleanup */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-JSON-backing-volume-parser-for-ssh-protocol.patch b/SOURCES/libvirt-util-storage-Add-JSON-backing-volume-parser-for-ssh-protocol.patch new file mode 100644 index 0000000..4fe3bf0 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-JSON-backing-volume-parser-for-ssh-protocol.patch @@ -0,0 +1,104 @@ +From b3704c6f2dba4017787ded2b7f90bd08d56cead7 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:56 +0200 +Subject: [PATCH] util: storage: Add JSON backing volume parser for 'ssh' + protocol + +(cherry picked from commit bc225b1b5fe3e02eac76f12792aac16d00a7de1d) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 38 ++++++++++++++++++++++++++++++++++++++ + tests/virstoragetest.c | 19 +++++++++++++++++++ + 2 files changed, 57 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index c0172af..1612e66 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2781,6 +2781,43 @@ virStorageSourceParseBackingJSONSheepdog(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONSSH(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int opaque ATTRIBUTE_UNUSED) ++{ ++ const char *path = virJSONValueObjectGetString(json, "path"); ++ const char *host = virJSONValueObjectGetString(json, "host"); ++ const char *port = virJSONValueObjectGetString(json, "port"); ++ ++ if (!host || !path) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing host or path of SSH JSON backing " ++ "volume definition")); ++ return -1; ++ } ++ ++ src->type = VIR_STORAGE_TYPE_NETWORK; ++ src->protocol = VIR_STORAGE_NET_PROTOCOL_SSH; ++ ++ if (VIR_STRDUP(src->path, path) < 0) ++ return -1; ++ ++ if (VIR_ALLOC_N(src->hosts, 1) < 0) ++ return -1; ++ src->nhosts = 1; ++ ++ src->hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_TCP; ++ if (VIR_STRDUP(src->hosts[0].name, host) < 0) ++ return -1; ++ ++ if (VIR_STRDUP(src->hosts[0].port, port) < 0) ++ return -1; ++ ++ return 0; ++} ++ ++ + struct virStorageSourceJSONDriverParser { + const char *drvname; + int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); +@@ -2800,6 +2837,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"iscsi", virStorageSourceParseBackingJSONiSCSI, 0}, + {"nbd", virStorageSourceParseBackingJSONNbd, 0}, + {"sheepdog", virStorageSourceParseBackingJSONSheepdog, 0}, ++ {"ssh", virStorageSourceParseBackingJSONSSH, 0}, + }; + + +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 4ddcac0..3b19f59 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1467,6 +1467,25 @@ mymain(void) + "\n" + " \n" + "\n"); ++ TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"ssh\"," ++ "\"host\":\"example.org\"," ++ "\"port\":\"6000\"," ++ "\"path\":\"blah\"," ++ "\"user\":\"user\"" ++ "}" ++ "}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"ssh\"," ++ "\"file.host\":\"example.org\"," ++ "\"file.port\":\"6000\"," ++ "\"file.path\":\"blah\"," ++ "\"file.user\":\"user\"" ++ "}", ++ "\n" ++ " \n" ++ "\n"); + + cleanup: + /* Final cleanup */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-json-pseudo-protocol-support-for-gluster-volumes.patch b/SOURCES/libvirt-util-storage-Add-json-pseudo-protocol-support-for-gluster-volumes.patch new file mode 100644 index 0000000..1dec7be --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-json-pseudo-protocol-support-for-gluster-volumes.patch @@ -0,0 +1,204 @@ +From e8733d3357443e9265d923ff0824ae13902a4f9a Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:51 +0200 +Subject: [PATCH] util: storage: Add json pseudo protocol support for gluster + volumes + +Along with the legacy URI based syntax add support for the brand-new +fully object based syntax. + +(cherry picked from commit 2ed772cd635bfc0fa332c1122aea3f489b879b1a) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/virstoragetest.c | 46 ++++++++++++++++++++ + 2 files changed, 154 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 06f7f56..23cdf4b 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2584,6 +2584,113 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONGlusterHost(virStorageNetHostDefPtr host, ++ virJSONValuePtr json) ++{ ++ const char *type = virJSONValueObjectGetString(json, "type"); ++ const char *hostname = virJSONValueObjectGetString(json, "host"); ++ const char *port = virJSONValueObjectGetString(json, "port"); ++ const char *socket = virJSONValueObjectGetString(json, "socket"); ++ int transport; ++ ++ if ((transport = virStorageNetHostTransportTypeFromString(type)) < 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("unknown backing store transport protocol '%s'"), type); ++ return -1; ++ } ++ ++ host->transport = transport; ++ ++ switch ((virStorageNetHostTransport) transport) { ++ case VIR_STORAGE_NET_HOST_TRANS_TCP: ++ if (!hostname) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing hostname for tcp backing server in " ++ "JSON backing definition for gluster volume")); ++ return -1; ++ } ++ ++ if (VIR_STRDUP(host->name, hostname) < 0 || ++ VIR_STRDUP(host->port, port) < 0) ++ return -1; ++ break; ++ ++ case VIR_STORAGE_NET_HOST_TRANS_UNIX: ++ if (!socket) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing socket path for udp backing server in " ++ "JSON backing definition for gluster volume")); ++ return -1; ++ } ++ ++ ++ if (VIR_STRDUP(host->socket, socket) < 0) ++ return -1; ++ break; ++ ++ case VIR_STORAGE_NET_HOST_TRANS_RDMA: ++ case VIR_STORAGE_NET_HOST_TRANS_LAST: ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("backing store protocol '%s' is not yet supported"), ++ type); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++static int ++virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int opaque ATTRIBUTE_UNUSED) ++{ ++ const char *uri = virJSONValueObjectGetString(json, "filename"); ++ const char *volume = virJSONValueObjectGetString(json, "volume"); ++ const char *path = virJSONValueObjectGetString(json, "path"); ++ virJSONValuePtr server = virJSONValueObjectGetArray(json, "server"); ++ size_t nservers; ++ size_t i; ++ ++ /* legacy URI based syntax passed via 'filename' option */ ++ if (uri) ++ return virStorageSourceParseBackingJSONUriStr(src, uri, ++ VIR_STORAGE_NET_PROTOCOL_GLUSTER); ++ ++ if (!volume || !path || !server) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing 'volume', 'path' or 'server' attribute in " ++ "JSON backing definition for gluster volume")); ++ return -1; ++ } ++ ++ if (VIR_STRDUP(src->volume, volume) < 0 || ++ virAsprintf(&src->path, "/%s", path) < 0) ++ return -1; ++ ++ nservers = virJSONValueArraySize(server); ++ ++ if (nservers < 1) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("at least 1 server is necessary in " ++ "JSON backing definition for gluster volume")); ++ } ++ ++ if (VIR_ALLOC_N(src->hosts, nservers) < 0) ++ return -1; ++ src->nhosts = nservers; ++ ++ for (i = 0; i < nservers; i++) { ++ if (virStorageSourceParseBackingJSONGlusterHost(src->hosts + i, ++ virJSONValueArrayGet(server, i)) < 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ + struct virStorageSourceJSONDriverParser { + const char *drvname; + int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); +@@ -2599,6 +2706,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"ftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTP}, + {"ftps", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTPS}, + {"tftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP}, ++ {"gluster", virStorageSourceParseBackingJSONGluster, 0}, + }; + + +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index f8e6e9a..22aae47 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1391,6 +1391,52 @@ mymain(void) + TEST_BACKING_PARSE("json:{\"file.driver\":\"ftp\", " + "\"file.uri\":\"http://example.com/file\"}", + NULL); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"gluster\", " ++ "\"file.filename\":\"gluster://example.com/vol/file\"}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"gluster\"," ++ "\"volume\":\"testvol\"," ++ "\"path\":\"img.qcow2\"," ++ "\"server\":[ { \"type\":\"tcp\"," ++ "\"host\":\"example.com\"," ++ "\"port\":\"1234\"" ++ "}," ++ "{ \"type\":\"unix\"," ++ "\"socket\":\"/path/socket\"" ++ "}," ++ "{ \"type\":\"tcp\"," ++ "\"host\":\"example.com\"" ++ "}" ++ "]" ++ "}" ++ "}", ++ "\n" ++ " \n" ++ " \n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"gluster\"," ++ "\"file.volume\":\"testvol\"," ++ "\"file.path\":\"img.qcow2\"," ++ "\"file.server\":[ { \"type\":\"tcp\"," ++ "\"host\":\"example.com\"," ++ "\"port\":\"1234\"" ++ "}," ++ "{ \"type\":\"unix\"," ++ "\"socket\":\"/path/socket\"" ++ "}," ++ "{ \"type\":\"tcp\"," ++ "\"host\":\"example.com\"" ++ "}" ++ "]" ++ "}", ++ "\n" ++ " \n" ++ " \n" ++ " \n" ++ "\n"); + + cleanup: + /* Final cleanup */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-json-pseudo-protocol-support-for-iSCSI-volumes.patch b/SOURCES/libvirt-util-storage-Add-json-pseudo-protocol-support-for-iSCSI-volumes.patch new file mode 100644 index 0000000..feac8b6 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-json-pseudo-protocol-support-for-iSCSI-volumes.patch @@ -0,0 +1,59 @@ +From c121eeae663ec36a5b6d2269e843b22df58b68ed Mon Sep 17 00:00:00 2001 +Message-Id: +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:52 +0200 +Subject: [PATCH] util: storage: Add json pseudo protocol support for iSCSI + volumes + +iSCSI is a bit odd in this aspect since it only supports URIs but using +the 'filename' property and does not have any alternative syntax. + +(cherry picked from commit 3236bb23707f918a7abf00bd3e3f47f9b0bb3a18) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 23cdf4b..7fd1593 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2691,6 +2691,26 @@ virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int opaque ATTRIBUTE_UNUSED) ++{ ++ const char *uri; ++ ++ /* legacy URI based syntax passed via 'filename' option */ ++ if ((uri = virJSONValueObjectGetString(json, "filename"))) ++ return virStorageSourceParseBackingJSONUriStr(src, uri, ++ VIR_STORAGE_NET_PROTOCOL_ISCSI); ++ ++ /* iSCSI currently supports only URI syntax passed in as filename */ ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing iSCSI URI in JSON backing volume definition")); ++ ++ return -1; ++} ++ ++ + struct virStorageSourceJSONDriverParser { + const char *drvname; + int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); +@@ -2707,6 +2727,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"ftps", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTPS}, + {"tftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP}, + {"gluster", virStorageSourceParseBackingJSONGluster, 0}, ++ {"iscsi", virStorageSourceParseBackingJSONiSCSI, 0}, + }; + + +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-parser-for-qemu-s-json-backing-pseudo-protocol.patch b/SOURCES/libvirt-util-storage-Add-parser-for-qemu-s-json-backing-pseudo-protocol.patch new file mode 100644 index 0000000..ff33852 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-parser-for-qemu-s-json-backing-pseudo-protocol.patch @@ -0,0 +1,257 @@ +From 296915a9c0a8de38ed83203f21811ef19465d69e Mon Sep 17 00:00:00 2001 +Message-Id: <296915a9c0a8de38ed83203f21811ef19465d69e@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:48 +0200 +Subject: [PATCH] util: storage: Add parser for qemu's json backing + pseudo-protocol + +Add a modular parser that will allow to parse 'json' backing definitions +that are supported by qemu. The initial implementation adds support for +the 'file' driver. + +Due to the approach qemu took to implement the JSON backing strings it's +possible to specify them in two approaches. + +The object approach: + json:{ "file" : { "driver":"file", + "filename":"/path/to/file" + } + } + +And a partially flattened approach: + json:{"file.driver":"file" + "file.filename":"/path/to/file" + } + +Both of the above are supported by qemu and by the code added in this +commit. The current implementation de-flattens the first level ('file.') +if possible and required. Other handling may be added later but +currently only one level was possible anyways. + +(cherry picked from commit e91f767c7433d9216c741f441196cd67c1934375) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 161 ++++++++++++++++++++++++++++++++++++++++++++-- + tests/virstoragetest.c | 15 +++++ + 2 files changed, 169 insertions(+), 7 deletions(-) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index aa5f302..25f363d 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -43,6 +43,7 @@ + #include "viruri.h" + #include "dirname.h" + #include "virbuffer.h" ++#include "virjson.h" + + #define VIR_FROM_THIS VIR_FROM_STORAGE + +@@ -2523,10 +2524,154 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONPath(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int type) ++{ ++ const char *path; ++ ++ if (!(path = virJSONValueObjectGetString(json, "filename"))) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing 'filename' field in JSON backing volume " ++ "definition")); ++ return -1; ++ } ++ ++ if (VIR_STRDUP(src->path, path) < 0) ++ return -1; ++ ++ src->type = type; ++ return 0; ++} ++ ++ ++struct virStorageSourceJSONDriverParser { ++ const char *drvname; ++ int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); ++ int opaque; ++}; ++ ++static const struct virStorageSourceJSONDriverParser jsonParsers[] = { ++ {"file", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_FILE}, ++}; ++ ++ ++static int ++virStorageSourceParseBackingJSONDeflattenWorker(const char *key, ++ const virJSONValue *value, ++ void *opaque) ++{ ++ virJSONValuePtr retobj = opaque; ++ virJSONValuePtr newval = NULL; ++ const char *newkey; ++ ++ if (!(newkey = STRSKIP(key, "file."))) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("JSON backing file syntax is neither nested nor " ++ "flattened")); ++ return -1; ++ } ++ ++ if (!(newval = virJSONValueCopy(value))) ++ return -1; ++ ++ if (virJSONValueObjectAppend(retobj, newkey, newval) < 0) { ++ virJSONValueFree(newval); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++/** ++ * virStorageSourceParseBackingJSONDeflatten: ++ * ++ * The json: pseudo-protocol syntax in qemu allows multiple approaches to ++ * describe nesting of the values. This is due to the lax handling of the string ++ * in qemu and the fact that internally qemu is flattening the values using '.'. ++ * ++ * This allows to specify nested json strings either using nested json objects ++ * or prefixing object members with the parent object name followed by the dot. ++ * ++ * This function will attempt to reverse the process and provide a nested json ++ * hierarchy so that the parsers can be kept simple and we still can use the ++ * weird syntax some users might use. ++ * ++ * Currently this function will flatten out just the 'file.' prefix into a new ++ * tree. Any other syntax will be rejected. ++ */ ++static virJSONValuePtr ++virStorageSourceParseBackingJSONDeflatten(virJSONValuePtr json) ++{ ++ virJSONValuePtr ret; ++ ++ if (!(ret = virJSONValueNewObject())) ++ return NULL; ++ ++ if (virJSONValueObjectForeachKeyValue(json, ++ virStorageSourceParseBackingJSONDeflattenWorker, ++ ret) < 0) { ++ virJSONValueFree(ret); ++ return NULL; ++ } ++ ++ return ret; ++} ++ ++ ++static int ++virStorageSourceParseBackingJSON(virStorageSourcePtr src, ++ const char *json) ++{ ++ virJSONValuePtr root = NULL; ++ virJSONValuePtr fixedroot = NULL; ++ virJSONValuePtr file; ++ const char *drvname; ++ size_t i; ++ int ret = -1; ++ ++ if (!(root = virJSONValueFromString(json))) ++ return -1; ++ ++ if (!(file = virJSONValueObjectGetObject(root, "file"))) { ++ if (!(fixedroot = virStorageSourceParseBackingJSONDeflatten(root))) ++ goto cleanup; ++ ++ file = fixedroot; ++ } ++ ++ if (!(drvname = virJSONValueObjectGetString(file, "driver"))) { ++ virReportError(VIR_ERR_INVALID_ARG, _("JSON backing volume defintion " ++ "'%s' lacks driver name"), json); ++ goto cleanup; ++ } ++ ++ for (i = 0; i < ARRAY_CARDINALITY(jsonParsers); i++) { ++ if (STREQ(drvname, jsonParsers[i].drvname)) { ++ ret = jsonParsers[i].func(src, file, jsonParsers[i].opaque); ++ goto cleanup; ++ } ++ } ++ ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("missing parser implementation for JSON backing volume " ++ "driver '%s'"), drvname); ++ ++ cleanup: ++ virJSONValueFree(root); ++ virJSONValueFree(fixedroot); ++ return ret; ++} ++ ++ + virStorageSourcePtr + virStorageSourceNewFromBackingAbsolute(const char *path) + { ++ const char *json; + virStorageSourcePtr ret; ++ int rc; + + if (VIR_ALLOC(ret) < 0) + return NULL; +@@ -2540,13 +2685,15 @@ virStorageSourceNewFromBackingAbsolute(const char *path) + ret->type = VIR_STORAGE_TYPE_NETWORK; + + /* handle URI formatted backing stores */ +- if (strstr(path, "://")) { +- if (virStorageSourceParseBackingURI(ret, path) < 0) +- goto error; +- } else { +- if (virStorageSourceParseBackingColon(ret, path) < 0) +- goto error; +- } ++ if ((json = STRSKIP(path, "json:"))) ++ rc = virStorageSourceParseBackingJSON(ret, json); ++ else if (strstr(path, "://")) ++ rc = virStorageSourceParseBackingURI(ret, path); ++ else ++ rc = virStorageSourceParseBackingColon(ret, path); ++ ++ if (rc < 0) ++ goto error; + } + + return ret; +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 6016a3b..04575f2 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1355,6 +1355,21 @@ mymain(void) + "\n" + " \n" + "\n"); ++ TEST_BACKING_PARSE("json:", NULL); ++ TEST_BACKING_PARSE("json:asdgsdfg", NULL); ++ TEST_BACKING_PARSE("json:{}", NULL); ++ TEST_BACKING_PARSE("json: { \"file.driver\":\"blah\"}", NULL); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"file\"}", NULL); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"file\", " ++ "\"file.filename\":\"/path/to/file\"}", ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"file\", " ++ "\"filename\":\"/path/to/file\"}", NULL); ++ TEST_BACKING_PARSE("json:{\"file\" : { \"driver\":\"file\"," ++ "\"filename\":\"/path/to/file\"" ++ "}" ++ "}", ++ "\n"); + + cleanup: + /* Final cleanup */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-ssh-network-storage-protocol.patch b/SOURCES/libvirt-util-storage-Add-ssh-network-storage-protocol.patch new file mode 100644 index 0000000..de6b6df --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-ssh-network-storage-protocol.patch @@ -0,0 +1,148 @@ +From 91fb6be3924d7b0de8d0d3392f24cdb49f83dbb0 Mon Sep 17 00:00:00 2001 +Message-Id: <91fb6be3924d7b0de8d0d3392f24cdb49f83dbb0@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:55 +0200 +Subject: [PATCH] util: storage: Add 'ssh' network storage protocol + +Allow using 'ssh' protocol in backing chains and later for disks +themselves. + +(cherry picked from commit 29f06ff548e8910ba48c207591788b32c3544e40) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/libxl/libxl_conf.c | 1 + + src/qemu/qemu_command.c | 7 +++++++ + src/qemu/qemu_driver.c | 3 +++ + src/qemu/qemu_parse_command.c | 1 + + src/util/virstoragefile.c | 4 +++- + src/util/virstoragefile.h | 1 + + src/xenconfig/xen_xl.c | 1 + + 7 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c +index 584eb8f..de538be 100644 +--- a/src/libxl/libxl_conf.c ++++ b/src/libxl/libxl_conf.c +@@ -581,6 +581,7 @@ libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src, + case VIR_STORAGE_NET_PROTOCOL_ISCSI: + case VIR_STORAGE_NET_PROTOCOL_GLUSTER: + case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + case VIR_STORAGE_NET_PROTOCOL_LAST: + case VIR_STORAGE_NET_PROTOCOL_NONE: + virReportError(VIR_ERR_NO_SUPPORT, +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 6c91e53..9ac90f7 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -480,6 +480,9 @@ qemuNetworkDriveGetPort(int protocol, + case VIR_STORAGE_NET_PROTOCOL_NBD: + return 10809; + ++ case VIR_STORAGE_NET_PROTOCOL_SSH: ++ return 22; ++ + case VIR_STORAGE_NET_PROTOCOL_ISCSI: + case VIR_STORAGE_NET_PROTOCOL_GLUSTER: + /* no default port specified */ +@@ -878,6 +881,10 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src, + ret = virBufferContentAndReset(&buf); + break; + ++ case VIR_STORAGE_NET_PROTOCOL_SSH: ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("'ssh' protocol is not yet supported")); ++ goto cleanup; + + case VIR_STORAGE_NET_PROTOCOL_LAST: + case VIR_STORAGE_NET_PROTOCOL_NONE: +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 2d6e5d2..aed5e80 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -13371,6 +13371,7 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk) + case VIR_STORAGE_NET_PROTOCOL_FTP: + case VIR_STORAGE_NET_PROTOCOL_FTPS: + case VIR_STORAGE_NET_PROTOCOL_TFTP: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + case VIR_STORAGE_NET_PROTOCOL_LAST: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("external inactive snapshots are not supported on " +@@ -13433,6 +13434,7 @@ qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr d + case VIR_STORAGE_NET_PROTOCOL_FTP: + case VIR_STORAGE_NET_PROTOCOL_FTPS: + case VIR_STORAGE_NET_PROTOCOL_TFTP: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + case VIR_STORAGE_NET_PROTOCOL_LAST: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("external active snapshots are not supported on " +@@ -13577,6 +13579,7 @@ qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn, + case VIR_STORAGE_NET_PROTOCOL_FTP: + case VIR_STORAGE_NET_PROTOCOL_FTPS: + case VIR_STORAGE_NET_PROTOCOL_TFTP: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + case VIR_STORAGE_NET_PROTOCOL_LAST: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("internal inactive snapshots are not supported on " +diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c +index 9ee262b..b1d8a1d 100644 +--- a/src/qemu/qemu_parse_command.c ++++ b/src/qemu/qemu_parse_command.c +@@ -2013,6 +2013,7 @@ qemuParseCommandLine(virCapsPtr caps, + case VIR_STORAGE_NET_PROTOCOL_FTP: + case VIR_STORAGE_NET_PROTOCOL_FTPS: + case VIR_STORAGE_NET_PROTOCOL_TFTP: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + case VIR_STORAGE_NET_PROTOCOL_LAST: + case VIR_STORAGE_NET_PROTOCOL_NONE: + /* ignored for now */ +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 48c0956..c0172af 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -84,7 +84,8 @@ VIR_ENUM_IMPL(virStorageNetProtocol, VIR_STORAGE_NET_PROTOCOL_LAST, + "https", + "ftp", + "ftps", +- "tftp") ++ "tftp", ++ "ssh") + + VIR_ENUM_IMPL(virStorageNetHostTransport, VIR_STORAGE_NET_HOST_TRANS_LAST, + "tcp", +@@ -2510,6 +2511,7 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src, + case VIR_STORAGE_NET_PROTOCOL_TFTP: + case VIR_STORAGE_NET_PROTOCOL_ISCSI: + case VIR_STORAGE_NET_PROTOCOL_GLUSTER: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("malformed backing store path for protocol %s"), + protocol); +diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h +index 1a76fad..3ea3a60 100644 +--- a/src/util/virstoragefile.h ++++ b/src/util/virstoragefile.h +@@ -132,6 +132,7 @@ typedef enum { + VIR_STORAGE_NET_PROTOCOL_FTP, + VIR_STORAGE_NET_PROTOCOL_FTPS, + VIR_STORAGE_NET_PROTOCOL_TFTP, ++ VIR_STORAGE_NET_PROTOCOL_SSH, + + VIR_STORAGE_NET_PROTOCOL_LAST + } virStorageNetProtocol; +diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c +index d524a82..f8cebd2 100644 +--- a/src/xenconfig/xen_xl.c ++++ b/src/xenconfig/xen_xl.c +@@ -726,6 +726,7 @@ xenFormatXLDiskSrcNet(virStorageSourcePtr src) + case VIR_STORAGE_NET_PROTOCOL_ISCSI: + case VIR_STORAGE_NET_PROTOCOL_GLUSTER: + case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: ++ case VIR_STORAGE_NET_PROTOCOL_SSH: + case VIR_STORAGE_NET_PROTOCOL_LAST: + case VIR_STORAGE_NET_PROTOCOL_NONE: + virReportError(VIR_ERR_NO_SUPPORT, +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-support-for-URI-based-backing-volumes-in-qemu-s-JSON-pseudo-protocol.patch b/SOURCES/libvirt-util-storage-Add-support-for-URI-based-backing-volumes-in-qemu-s-JSON-pseudo-protocol.patch new file mode 100644 index 0000000..4d5f5c4 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-support-for-URI-based-backing-volumes-in-qemu-s-JSON-pseudo-protocol.patch @@ -0,0 +1,108 @@ +From 98ee2fc5d1f1650aa8fafaf5448f48bf6bdcd48b Mon Sep 17 00:00:00 2001 +Message-Id: <98ee2fc5d1f1650aa8fafaf5448f48bf6bdcd48b@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:50 +0200 +Subject: [PATCH] util: storage: Add support for URI based backing volumes in + qemu's JSON pseudo-protocol + +http(s), ftp(s) and tftp use URIs for volume definitions in the JSON +pseudo protocol so it's pretty straightforward to add support for them. + +(cherry picked from commit ba05b5b7e78476497fb2222f449b8cad2738acb1) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 43 +++++++++++++++++++++++++++++++++++++++++++ + tests/virstoragetest.c | 15 +++++++++++++++ + 2 files changed, 58 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 45266c5..06f7f56 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2546,6 +2546,44 @@ virStorageSourceParseBackingJSONPath(virStorageSourcePtr src, + } + + ++static int ++virStorageSourceParseBackingJSONUriStr(virStorageSourcePtr src, ++ const char *uri, ++ int protocol) ++{ ++ if (virStorageSourceParseBackingURI(src, uri) < 0) ++ return -1; ++ ++ if (src->protocol != protocol) { ++ virReportError(VIR_ERR_INVALID_ARG, ++ _("expected protocol '%s' but got '%s' in URI JSON volume " ++ "definition"), ++ virStorageNetProtocolTypeToString(protocol), ++ virStorageNetProtocolTypeToString(src->protocol)); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++static int ++virStorageSourceParseBackingJSONUri(virStorageSourcePtr src, ++ virJSONValuePtr json, ++ int protocol) ++{ ++ const char *uri; ++ ++ if (!(uri = virJSONValueObjectGetString(json, "uri"))) { ++ virReportError(VIR_ERR_INVALID_ARG, "%s", ++ _("missing URI in JSON backing volume definition")); ++ return -1; ++ } ++ ++ return virStorageSourceParseBackingJSONUriStr(src, uri, protocol); ++} ++ ++ + struct virStorageSourceJSONDriverParser { + const char *drvname; + int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque); +@@ -2556,6 +2594,11 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"file", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_FILE}, + {"host_device", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK}, + {"host_cdrom", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK}, ++ {"http", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_HTTP}, ++ {"https", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_HTTPS}, ++ {"ftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTP}, ++ {"ftps", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTPS}, ++ {"tftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP}, + }; + + +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 6873180..f8e6e9a 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1376,6 +1376,21 @@ mymain(void) + TEST_BACKING_PARSE("json:{\"file.driver\":\"host_cdrom\", " + "\"file.filename\":\"/path/to/cdrom\"}", + "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"http\", " ++ "\"file.uri\":\"http://example.com/file\"}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file\":{ \"driver\":\"http\"," ++ "\"uri\":\"http://example.com/file\"" ++ "}" ++ "}", ++ "\n" ++ " \n" ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"ftp\", " ++ "\"file.uri\":\"http://example.com/file\"}", ++ NULL); + + cleanup: + /* Final cleanup */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Add-support-for-host-device-backing-specified-via-JSON.patch b/SOURCES/libvirt-util-storage-Add-support-for-host-device-backing-specified-via-JSON.patch new file mode 100644 index 0000000..fd931a6 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Add-support-for-host-device-backing-specified-via-JSON.patch @@ -0,0 +1,51 @@ +From 73fc27c0ac5b2c8eedf2c92ba5fd4a473ca14f1c Mon Sep 17 00:00:00 2001 +Message-Id: <73fc27c0ac5b2c8eedf2c92ba5fd4a473ca14f1c@dist-git> +From: Peter Krempa +Date: Tue, 2 Aug 2016 13:41:49 +0200 +Subject: [PATCH] util: storage: Add support for host device backing specified + via JSON + +JSON pseudo protocol for qemu allows to explicitly specify devices. +Add convertor to the internal type. + +(cherry picked from commit 47f292dd35c4f2163d4a5f6d8673128c74e91a48) +https://bugzilla.redhat.com/show_bug.cgi?id=1134878 [JSON backing] +https://bugzilla.redhat.com/show_bug.cgi?id=1247521 [gluster multi-host] +--- + src/util/virstoragefile.c | 2 ++ + tests/virstoragetest.c | 6 ++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 25f363d..45266c5 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2554,6 +2554,8 @@ struct virStorageSourceJSONDriverParser { + + static const struct virStorageSourceJSONDriverParser jsonParsers[] = { + {"file", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_FILE}, ++ {"host_device", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK}, ++ {"host_cdrom", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK}, + }; + + +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 04575f2..6873180 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1370,6 +1370,12 @@ mymain(void) + "}" + "}", + "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"host_device\", " ++ "\"file.filename\":\"/path/to/dev\"}", ++ "\n"); ++ TEST_BACKING_PARSE("json:{\"file.driver\":\"host_cdrom\", " ++ "\"file.filename\":\"/path/to/cdrom\"}", ++ "\n"); + + cleanup: + /* Final cleanup */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-util-storage-Properly-set-protocol-type-when-parsing-gluster-json-string.patch b/SOURCES/libvirt-util-storage-Properly-set-protocol-type-when-parsing-gluster-json-string.patch new file mode 100644 index 0000000..4775a82 --- /dev/null +++ b/SOURCES/libvirt-util-storage-Properly-set-protocol-type-when-parsing-gluster-json-string.patch @@ -0,0 +1,56 @@ +From 1e2350d96e59ae47fa03530ea7946ae229e99e02 Mon Sep 17 00:00:00 2001 +Message-Id: <1e2350d96e59ae47fa03530ea7946ae229e99e02@dist-git> +From: Peter Krempa +Date: Tue, 6 Sep 2016 14:11:23 +0200 +Subject: [PATCH] util: storage: Properly set protocol type when parsing + gluster json string + +Commit 2ed772cd forgot to set proper protocol. This was also present in +the test data. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1372251 +(cherry picked from commit b7a650c97c717b1065c255a9be620fd2ba320180) +--- + src/util/virstoragefile.c | 3 +++ + tests/virstoragetest.c | 4 ++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index feeb061..02cae66 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2786,6 +2786,9 @@ virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src, + return -1; + } + ++ src->type = VIR_STORAGE_TYPE_NETWORK; ++ src->protocol = VIR_STORAGE_NET_PROTOCOL_GLUSTER; ++ + if (VIR_STRDUP(src->volume, volume) < 0 || + virAsprintf(&src->path, "/%s", path) < 0) + return -1; +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index b3d59ad..623e911 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1412,7 +1412,7 @@ mymain(void) + "]" + "}" + "}", +- "\n" ++ "\n" + " \n" + " \n" + " \n" +@@ -1432,7 +1432,7 @@ mymain(void) + "}" + "]" + "}", +- "\n" ++ "\n" + " \n" + " \n" + " \n" +-- +2.10.0 + diff --git a/SOURCES/libvirt-utils-storage-Fix-JSON-field-name-for-uri-based-storage.patch b/SOURCES/libvirt-utils-storage-Fix-JSON-field-name-for-uri-based-storage.patch new file mode 100644 index 0000000..7b24f89 --- /dev/null +++ b/SOURCES/libvirt-utils-storage-Fix-JSON-field-name-for-uri-based-storage.patch @@ -0,0 +1,61 @@ +From 1b72e7eada1d446f6ff981a21fb822c3a60110c0 Mon Sep 17 00:00:00 2001 +Message-Id: <1b72e7eada1d446f6ff981a21fb822c3a60110c0@dist-git> +From: Peter Krempa +Date: Tue, 16 Aug 2016 13:35:12 +0200 +Subject: [PATCH] utils: storage: Fix JSON field name for uri based storage + +qemu uses 'url' instead of 'uri'. They unfortunately look very similar. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1367260 +(cherry picked from commit c2e12b01baaf660abcf87f4a6f470862ac7aca15) +--- + src/util/virstoragefile.c | 4 ++-- + tests/virstoragetest.c | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 6f7d131..471aa1f 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -2684,9 +2684,9 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src, + { + const char *uri; + +- if (!(uri = virJSONValueObjectGetString(json, "uri"))) { ++ if (!(uri = virJSONValueObjectGetString(json, "url"))) { + virReportError(VIR_ERR_INVALID_ARG, "%s", +- _("missing URI in JSON backing volume definition")); ++ _("missing 'url' in JSON backing volume definition")); + return -1; + } + +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index 3b19f59..b3d59ad 100644 +--- a/tests/virstoragetest.c ++++ b/tests/virstoragetest.c +@@ -1377,19 +1377,19 @@ mymain(void) + "\"file.filename\":\"/path/to/cdrom\"}", + "\n"); + TEST_BACKING_PARSE("json:{\"file.driver\":\"http\", " +- "\"file.uri\":\"http://example.com/file\"}", ++ "\"file.url\":\"http://example.com/file\"}", + "\n" + " \n" + "\n"); + TEST_BACKING_PARSE("json:{\"file\":{ \"driver\":\"http\"," +- "\"uri\":\"http://example.com/file\"" ++ "\"url\":\"http://example.com/file\"" + "}" + "}", + "\n" + " \n" + "\n"); + TEST_BACKING_PARSE("json:{\"file.driver\":\"ftp\", " +- "\"file.uri\":\"http://example.com/file\"}", ++ "\"file.url\":\"http://example.com/file\"}", + NULL); + TEST_BACKING_PARSE("json:{\"file.driver\":\"gluster\", " + "\"file.filename\":\"gluster://example.com/vol/file\"}", +-- +2.9.2 + diff --git a/SOURCES/libvirt-virCondWaitUntil-add-another-return-value.patch b/SOURCES/libvirt-virCondWaitUntil-add-another-return-value.patch deleted file mode 100644 index 6ae430f..0000000 --- a/SOURCES/libvirt-virCondWaitUntil-add-another-return-value.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 5e35cc0386d405c415fe09cd9910f132af8d5645 Mon Sep 17 00:00:00 2001 -Message-Id: <5e35cc0386d405c415fe09cd9910f132af8d5645@dist-git> -From: Pavel Hrdina -Date: Fri, 10 Jul 2015 12:39:29 +0200 -Subject: [PATCH] virCondWaitUntil: add another return value - -We should distinguish between success and timeout, to let the user -handle those two events differently. - -Signed-off-by: Pavel Hrdina -(cherry picked from commit 5c48618f114a62b463dbc8981365448826e6df8b) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1147471 - -Signed-off-by: Pavel Hrdina -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 20 +++++++++++++++----- - 1 file changed, 15 insertions(+), 5 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 535701e..2f1f69d 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -2687,15 +2687,25 @@ virDomainObjWait(virDomainObjPtr vm) - } - - -+/** -+ * Waits for domain condition to be triggered for a specific period of time. -+ * -+ * Returns: -+ * -1 in case of error -+ * 0 on success -+ * 1 on timeout -+ */ - int - virDomainObjWaitUntil(virDomainObjPtr vm, - unsigned long long whenms) - { -- if (virCondWaitUntil(&vm->cond, &vm->parent.lock, whenms) < 0 && -- errno != ETIMEDOUT) { -- virReportSystemError(errno, "%s", -- _("failed to wait for domain condition")); -- return -1; -+ if (virCondWaitUntil(&vm->cond, &vm->parent.lock, whenms) < 0) { -+ if (errno != ETIMEDOUT) { -+ virReportSystemError(errno, "%s", -+ _("failed to wait for domain condition")); -+ return -1; -+ } -+ return 1; - } - return 0; - } --- -2.4.5 - diff --git a/SOURCES/libvirt-virDomainDefParseXML-Check-for-malicious-cpu-ids-in-numa.patch b/SOURCES/libvirt-virDomainDefParseXML-Check-for-malicious-cpu-ids-in-numa.patch deleted file mode 100644 index dbeaedf..0000000 --- a/SOURCES/libvirt-virDomainDefParseXML-Check-for-malicious-cpu-ids-in-numa.patch +++ /dev/null @@ -1,50 +0,0 @@ -From dd119a69ea174b96a8e60755ec75c7ed718aa9b9 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Michal Privoznik -Date: Fri, 7 Aug 2015 17:30:17 +0200 -Subject: [PATCH] virDomainDefParseXML: Check for malicious cpu ids in - -https://bugzilla.redhat.com/show_bug.cgi?id=1176020 - -Some users think this is a good idea: - - 4 - - - - - - - - -It's not. Lets therefore introduce a check and discourage them in -doing so. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 82af954c527e88111b05d50953b80eb4afde4d9a) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 4fe38ae..54d0651 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -15047,6 +15047,12 @@ virDomainDefParseXML(xmlDocPtr xml, - goto error; - } - -+ if (virDomainNumaGetMaxCPUID(def->numa) >= def->maxvcpus) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -+ _("CPU IDs in exceed the count")); -+ goto error; -+ } -+ - if (virDomainNumatuneParseXML(def->numa, - def->placement_mode == - VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC, --- -2.5.0 - diff --git a/SOURCES/libvirt-virDomainHostdevDefFree-Don-t-leak-privateData.patch b/SOURCES/libvirt-virDomainHostdevDefFree-Don-t-leak-privateData.patch new file mode 100644 index 0000000..cef4020 --- /dev/null +++ b/SOURCES/libvirt-virDomainHostdevDefFree-Don-t-leak-privateData.patch @@ -0,0 +1,51 @@ +From a2a4f11adaa26d9f0d9c04de9f0fb915374536d1 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Privoznik +Date: Mon, 25 Jul 2016 12:28:25 -0400 +Subject: [PATCH] virDomainHostdevDefFree: Don't leak privateData + +https://bugzilla.redhat.com/show_bug.cgi?id=1357346 + +After 27726d8c21 a privateData is allocated in +virDomainHostdevDefAlloc(). However, the counter part - freeing +them in Free() is missing which leads to the following memory +leak: + +==6489== 24 bytes in 1 blocks are definitely lost in loss record 684 of 1,003 +==6489== at 0x4C2C070: calloc (vg_replace_malloc.c:623) +==6489== by 0x54B7C94: virAllocVar (viralloc.c:560) +==6489== by 0x5517BE6: virObjectNew (virobject.c:193) +==6489== by 0x1B400121: qemuDomainHostdevPrivateNew (qemu_domain.c:798) +==6489== by 0x5557B24: virDomainHostdevDefAlloc (domain_conf.c:2152) +==6489== by 0x5575578: virDomainHostdevDefParseXML (domain_conf.c:12709) +==6489== by 0x5582292: virDomainDefParseXML (domain_conf.c:16995) +==6489== by 0x5583C98: virDomainDefParseNode (domain_conf.c:17470) +==6489== by 0x5583B07: virDomainDefParse (domain_conf.c:17417) +==6489== by 0x5583B95: virDomainDefParseFile (domain_conf.c:17441) +==6489== by 0x55A3F24: virDomainObjListLoadConfig (virdomainobjlist.c:465) +==6489== by 0x55A43E6: virDomainObjListLoadAllConfigs (virdomainobjlist.c:596) + +Signed-off-by: Michal Privoznik +(cherry picked from commit 6fcffcb141fcbd99c82a95ac0b67908bb057d6d0) +Signed-off-by: John Ferlan +--- + src/conf/domain_conf.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index ddeca0d..8b9b623 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -2218,6 +2218,9 @@ void virDomainHostdevDefClear(virDomainHostdevDefPtr def) + } + break; + } ++ ++ virObjectUnref(def->privateData); ++ def->privateData = NULL; + } + + void virDomainTPMDefFree(virDomainTPMDefPtr def) +-- +2.9.2 + diff --git a/SOURCES/libvirt-virDomainObjSignal-drop-this-function.patch b/SOURCES/libvirt-virDomainObjSignal-drop-this-function.patch deleted file mode 100644 index 19fdec8..0000000 --- a/SOURCES/libvirt-virDomainObjSignal-drop-this-function.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 21f44cec9cc44e52990897a2f752c1ea9e4a2007 Mon Sep 17 00:00:00 2001 -Message-Id: <21f44cec9cc44e52990897a2f752c1ea9e4a2007@dist-git> -From: Pavel Hrdina -Date: Fri, 10 Jul 2015 12:39:30 +0200 -Subject: [PATCH] virDomainObjSignal: drop this function - -There are multiple consumers for the domain condition and we should -always wake them all. - -Signed-off-by: Pavel Hrdina -(cherry picked from commit 6b278f3ad6fa0c8b0366a0858546808e15a6676f) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1147471 - -Signed-off-by: Pavel Hrdina -Signed-off-by: Jiri Denemark ---- - src/conf/domain_conf.c | 7 ------- - src/conf/domain_conf.h | 1 - - src/libvirt_private.syms | 1 - - src/qemu/qemu_process.c | 4 ++-- - 4 files changed, 2 insertions(+), 11 deletions(-) - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 2f1f69d..d990180 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -2662,13 +2662,6 @@ virDomainObjEndAPI(virDomainObjPtr *vm) - - - void --virDomainObjSignal(virDomainObjPtr vm) --{ -- virCondSignal(&vm->cond); --} -- -- --void - virDomainObjBroadcast(virDomainObjPtr vm) - { - virCondBroadcast(&vm->cond); -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 2bdbff1..0adaefc 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -2443,7 +2443,6 @@ void virDomainObjEndAPI(virDomainObjPtr *vm); - bool virDomainObjTaint(virDomainObjPtr obj, - virDomainTaintFlags taint); - --void virDomainObjSignal(virDomainObjPtr vm); - void virDomainObjBroadcast(virDomainObjPtr vm); - int virDomainObjWait(virDomainObjPtr vm); - int virDomainObjWaitUntil(virDomainObjPtr vm, -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 1566d11..720afdf 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -412,7 +412,6 @@ virDomainObjParseNode; - virDomainObjSetDefTransient; - virDomainObjSetMetadata; - virDomainObjSetState; --virDomainObjSignal; - virDomainObjTaint; - virDomainObjUpdateModificationImpact; - virDomainObjWait; -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index 7abeaae..9f1ae5a 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -1007,7 +1007,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - /* We have a SYNC API waiting for this event, dispatch it back */ - diskPriv->blockJobType = type; - diskPriv->blockJobStatus = status; -- virDomainObjSignal(vm); -+ virDomainObjBroadcast(vm); - } else { - /* there is no waiting SYNC API, dispatch the update to a thread */ - if (VIR_ALLOC(processEvent) < 0) -@@ -1503,7 +1503,7 @@ qemuProcessHandleSpiceMigrated(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - } - - priv->job.spiceMigrated = true; -- virDomainObjSignal(vm); -+ virDomainObjBroadcast(vm); - - cleanup: - virObjectUnlock(vm); --- -2.4.5 - diff --git a/SOURCES/libvirt-virNetDevBandwidthParseRate-Reject-negative-values.patch b/SOURCES/libvirt-virNetDevBandwidthParseRate-Reject-negative-values.patch deleted file mode 100644 index 0c892de..0000000 --- a/SOURCES/libvirt-virNetDevBandwidthParseRate-Reject-negative-values.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 571c0cf49730a6c636b71e42c71512ce1b772a31 Mon Sep 17 00:00:00 2001 -Message-Id: <571c0cf49730a6c636b71e42c71512ce1b772a31@dist-git> -From: Michal Privoznik -Date: Mon, 10 Aug 2015 14:15:44 +0200 -Subject: [PATCH] virNetDevBandwidthParseRate: Reject negative values - -https://bugzilla.redhat.com/show_bug.cgi?id=1022292 - -The following XML really does not make any sense: - - - -There can't be a negative packet rate. Well, so far we haven't -assigned any meaning to it. So reject it unless users harm themselves, -because otherwise we turn the negative numbers into really big values. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 2a5d3f227df7be78449792103e0101a4b859c49b) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/conf/netdev_bandwidth_conf.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/conf/netdev_bandwidth_conf.c b/src/conf/netdev_bandwidth_conf.c -index fdd5b7f..8824332 100644 ---- a/src/conf/netdev_bandwidth_conf.c -+++ b/src/conf/netdev_bandwidth_conf.c -@@ -50,7 +50,7 @@ virNetDevBandwidthParseRate(xmlNodePtr node, virNetDevBandwidthRatePtr rate) - floor = virXMLPropString(node, "floor"); - - if (average) { -- if (virStrToLong_ull(average, NULL, 10, &rate->average) < 0) { -+ if (virStrToLong_ullp(average, NULL, 10, &rate->average) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("could not convert bandwidth average value '%s'"), - average); -@@ -68,21 +68,21 @@ virNetDevBandwidthParseRate(xmlNodePtr node, virNetDevBandwidthRatePtr rate) - goto cleanup; - } - -- if (peak && virStrToLong_ull(peak, NULL, 10, &rate->peak) < 0) { -+ if (peak && virStrToLong_ullp(peak, NULL, 10, &rate->peak) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("could not convert bandwidth peak value '%s'"), - peak); - goto cleanup; - } - -- if (burst && virStrToLong_ull(burst, NULL, 10, &rate->burst) < 0) { -+ if (burst && virStrToLong_ullp(burst, NULL, 10, &rate->burst) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("could not convert bandwidth burst value '%s'"), - burst); - goto cleanup; - } - -- if (floor && virStrToLong_ull(floor, NULL, 10, &rate->floor) < 0) { -+ if (floor && virStrToLong_ullp(floor, NULL, 10, &rate->floor) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("could not convert bandwidth floor value '%s'"), - floor); --- -2.5.0 - diff --git a/SOURCES/libvirt-virNetDevBandwidthUpdateRate-turn-class_id-into-integer.patch b/SOURCES/libvirt-virNetDevBandwidthUpdateRate-turn-class_id-into-integer.patch deleted file mode 100644 index 8d1416c..0000000 --- a/SOURCES/libvirt-virNetDevBandwidthUpdateRate-turn-class_id-into-integer.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 36a6bec33e026d7a66edfe95e640562fc7b49aaf Mon Sep 17 00:00:00 2001 -Message-Id: <36a6bec33e026d7a66edfe95e640562fc7b49aaf@dist-git> -From: Michal Privoznik -Date: Fri, 14 Aug 2015 16:06:30 +0200 -Subject: [PATCH] virNetDevBandwidthUpdateRate: turn class_id into integer - -https://bugzilla.redhat.com/show_bug.cgi?id=1252473 - -This is no functional change. It's just that later in the series we -will need to pass class_id as an integer. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 45090449c476d328541225f79d040345a781121a) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/network/bridge_driver.c | 4 ++-- - src/util/virnetdevbandwidth.c | 10 +++++++--- - src/util/virnetdevbandwidth.h | 5 ++--- - 3 files changed, 11 insertions(+), 8 deletions(-) - -diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c -index 3d6721b..17fc430 100644 ---- a/src/network/bridge_driver.c -+++ b/src/network/bridge_driver.c -@@ -4840,7 +4840,7 @@ networkPlugBandwidth(virNetworkObjPtr net, - } - /* update rate for non guaranteed NICs */ - new_rate -= net->floor_sum; -- if (virNetDevBandwidthUpdateRate(net->def->bridge, "1:2", -+ if (virNetDevBandwidthUpdateRate(net->def->bridge, 2, - net->def->bandwidth, new_rate) < 0) - VIR_WARN("Unable to update rate for 1:2 class on %s bridge", - net->def->bridge); -@@ -4891,7 +4891,7 @@ networkUnplugBandwidth(virNetworkObjPtr net, - } - /* update rate for non guaranteed NICs */ - new_rate -= net->floor_sum; -- if (virNetDevBandwidthUpdateRate(net->def->bridge, "1:2", -+ if (virNetDevBandwidthUpdateRate(net->def->bridge, 2, - net->def->bandwidth, new_rate) < 0) - VIR_WARN("Unable to update rate for 1:2 class on %s bridge", - net->def->bridge); -diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c -index 6ae0877..da3a0d3 100644 ---- a/src/util/virnetdevbandwidth.c -+++ b/src/util/virnetdevbandwidth.c -@@ -638,7 +638,8 @@ virNetDevBandwidthUnplug(const char *brname, - /** - * virNetDevBandwidthUpdateRate: - * @ifname: interface name -- * @classid: ID of class to update -+ * @id: unique identifier -+ * @bandwidth: used to derive 'ceil' of class with @id - * @new_rate: new rate - * - * This function updates the 'rate' attribute of HTB class. -@@ -650,16 +651,18 @@ virNetDevBandwidthUnplug(const char *brname, - */ - int - virNetDevBandwidthUpdateRate(const char *ifname, -- const char *class_id, -+ unsigned int id, - virNetDevBandwidthPtr bandwidth, - unsigned long long new_rate) - { - int ret = -1; - virCommandPtr cmd = NULL; -+ char *class_id = NULL; - char *rate = NULL; - char *ceil = NULL; - -- if (virAsprintf(&rate, "%llukbps", new_rate) < 0 || -+ if (virAsprintf(&class_id, "1:%x", id) < 0 || -+ virAsprintf(&rate, "%llukbps", new_rate) < 0 || - virAsprintf(&ceil, "%llukbps", bandwidth->in->peak ? - bandwidth->in->peak : - bandwidth->in->average) < 0) -@@ -677,6 +680,7 @@ virNetDevBandwidthUpdateRate(const char *ifname, - - cleanup: - virCommandFree(cmd); -+ VIR_FREE(class_id); - VIR_FREE(rate); - VIR_FREE(ceil); - return ret; -diff --git a/src/util/virnetdevbandwidth.h b/src/util/virnetdevbandwidth.h -index 9b1d2a6..bceac2e 100644 ---- a/src/util/virnetdevbandwidth.h -+++ b/src/util/virnetdevbandwidth.h -@@ -68,11 +68,10 @@ int virNetDevBandwidthUnplug(const char *brname, - ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; - - int virNetDevBandwidthUpdateRate(const char *ifname, -- const char *class_id, -+ unsigned int id, - virNetDevBandwidthPtr bandwidth, - unsigned long long new_rate) -- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) -- ATTRIBUTE_RETURN_CHECK; -+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; - - int virNetDevBandwidthUpdateFilter(const char *ifname, - const virMacAddr *ifmac_ptr, --- -2.5.0 - diff --git a/SOURCES/libvirt-virNetDevMacVLanCreateWithVPortProfile-Don-t-mask-virNetDevMacVLanTapOpen-error.patch b/SOURCES/libvirt-virNetDevMacVLanCreateWithVPortProfile-Don-t-mask-virNetDevMacVLanTapOpen-error.patch new file mode 100644 index 0000000..5028f23 --- /dev/null +++ b/SOURCES/libvirt-virNetDevMacVLanCreateWithVPortProfile-Don-t-mask-virNetDevMacVLanTapOpen-error.patch @@ -0,0 +1,41 @@ +From c89a04073228b917f1b9a2804267dcabce16f231 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Privoznik +Date: Wed, 10 Aug 2016 17:05:26 +0200 +Subject: [PATCH] virNetDevMacVLanCreateWithVPortProfile: Don't mask + virNetDevMacVLanTapOpen error + +https://bugzilla.redhat.com/show_bug.cgi?id=1240439 + +In this function we create a macvtap device and open its tap +device. Possibly multiple times. Now the thing is, if opening the +tap device fails, that is virNetDevMacVLanTapOpen() returns a +negative value, we unroll all the changes BUT return 0 fooling +caller into thinking everything went okay. + +Signed-off-by: Michal Privoznik +(cherry picked from commit 96e24861564dfdc21b843f00d094d71e696366bd) +Signed-off-by: Michal Privoznik +--- + src/util/virnetdevmacvlan.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c +index c05c67f..88a0f94 100644 +--- a/src/util/virnetdevmacvlan.c ++++ b/src/util/virnetdevmacvlan.c +@@ -1120,8 +1120,10 @@ virNetDevMacVLanCreateWithVPortProfile(const char *ifnameRequested, + } + + if (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) { +- if (virNetDevMacVLanTapOpen(ifnameCreated, tapfd, tapfdSize, 10) < 0) ++ if (virNetDevMacVLanTapOpen(ifnameCreated, tapfd, tapfdSize, 10) < 0) { ++ rc = -1; + goto disassociate_exit; ++ } + + if (virNetDevMacVLanTapSetup(tapfd, tapfdSize, vnet_hdr) < 0) { + VIR_FORCE_CLOSE(rc); /* sets rc to -1 */ +-- +2.9.2 + diff --git a/SOURCES/libvirt-virSecurityManager-Track-if-running-as-privileged.patch b/SOURCES/libvirt-virSecurityManager-Track-if-running-as-privileged.patch deleted file mode 100644 index 61b28b3..0000000 --- a/SOURCES/libvirt-virSecurityManager-Track-if-running-as-privileged.patch +++ /dev/null @@ -1,276 +0,0 @@ -From 7fde617d76934ca94e97257b13ebb96f1ea7bd0a Mon Sep 17 00:00:00 2001 -Message-Id: <7fde617d76934ca94e97257b13ebb96f1ea7bd0a@dist-git> -From: Michal Privoznik -Date: Tue, 15 Sep 2015 11:51:23 +0200 -Subject: [PATCH] virSecurityManager: Track if running as privileged - -https://bugzilla.redhat.com/show_bug.cgi?id=1124841 - -We may want to do some decisions in drivers based on fact if we -are running as privileged user or not. Propagate this info there. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 307fb9044c1c9a5394b66e6909c6fd943d7f84c8) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/lxc/lxc_controller.c | 2 +- - src/lxc/lxc_driver.c | 3 ++- - src/qemu/qemu_driver.c | 7 +++++-- - src/security/security_manager.c | 29 ++++++++++++++++++++++------- - src/security/security_manager.h | 5 ++++- - tests/qemuhotplugtest.c | 2 +- - tests/seclabeltest.c | 2 +- - tests/securityselinuxlabeltest.c | 2 +- - tests/securityselinuxtest.c | 2 +- - 9 files changed, 38 insertions(+), 16 deletions(-) - -diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c -index 06ffee4..7f76d6f 100644 ---- a/src/lxc/lxc_controller.c -+++ b/src/lxc/lxc_controller.c -@@ -2587,7 +2587,7 @@ int main(int argc, char *argv[]) - - if (!(ctrl->securityManager = virSecurityManagerNew(securityDriver, - LXC_DRIVER_NAME, -- false, false, false))) -+ false, false, false, false))) - goto cleanup; - - if (ctrl->def->seclabels) { -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index 1a7cc78..79f92c3 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -1558,7 +1558,8 @@ lxcSecurityInit(virLXCDriverConfigPtr cfg) - LXC_DRIVER_NAME, - false, - cfg->securityDefaultConfined, -- cfg->securityRequireConfined); -+ cfg->securityRequireConfined, -+ true); - if (!mgr) - goto error; - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index e85506e..0f3e987 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -398,7 +398,8 @@ qemuSecurityInit(virQEMUDriverPtr driver) - QEMU_DRIVER_NAME, - cfg->allowDiskFormatProbing, - cfg->securityDefaultConfined, -- cfg->securityRequireConfined))) -+ cfg->securityRequireConfined, -+ virQEMUDriverIsPrivileged(driver)))) - goto error; - if (!stack) { - if (!(stack = virSecurityManagerNewStack(mgr))) -@@ -415,7 +416,8 @@ qemuSecurityInit(virQEMUDriverPtr driver) - QEMU_DRIVER_NAME, - cfg->allowDiskFormatProbing, - cfg->securityDefaultConfined, -- cfg->securityRequireConfined))) -+ cfg->securityRequireConfined, -+ virQEMUDriverIsPrivileged(driver)))) - goto error; - if (!(stack = virSecurityManagerNewStack(mgr))) - goto error; -@@ -429,6 +431,7 @@ qemuSecurityInit(virQEMUDriverPtr driver) - cfg->allowDiskFormatProbing, - cfg->securityDefaultConfined, - cfg->securityRequireConfined, -+ virQEMUDriverIsPrivileged(driver), - cfg->dynamicOwnership, - qemuSecurityChownCallback))) - goto error; -diff --git a/src/security/security_manager.c b/src/security/security_manager.c -index 1098558..28d7dfd 100644 ---- a/src/security/security_manager.c -+++ b/src/security/security_manager.c -@@ -40,6 +40,7 @@ struct _virSecurityManager { - bool allowDiskFormatProbing; - bool defaultConfined; - bool requireConfined; -+ bool privileged; - const char *virtDriver; - void *privateData; - }; -@@ -78,7 +79,8 @@ virSecurityManagerNewDriver(virSecurityDriverPtr drv, - const char *virtDriver, - bool allowDiskFormatProbing, - bool defaultConfined, -- bool requireConfined) -+ bool requireConfined, -+ bool privileged) - { - virSecurityManagerPtr mgr; - char *privateData; -@@ -87,10 +89,10 @@ virSecurityManagerNewDriver(virSecurityDriverPtr drv, - return NULL; - - VIR_DEBUG("drv=%p (%s) virtDriver=%s allowDiskFormatProbing=%d " -- "defaultConfined=%d requireConfined=%d", -+ "defaultConfined=%d requireConfined=%d privileged=%d", - drv, drv->name, virtDriver, - allowDiskFormatProbing, defaultConfined, -- requireConfined); -+ requireConfined, privileged); - - if (VIR_ALLOC_N(privateData, drv->privateDataLen) < 0) - return NULL; -@@ -104,6 +106,7 @@ virSecurityManagerNewDriver(virSecurityDriverPtr drv, - mgr->allowDiskFormatProbing = allowDiskFormatProbing; - mgr->defaultConfined = defaultConfined; - mgr->requireConfined = requireConfined; -+ mgr->privileged = privileged; - mgr->virtDriver = virtDriver; - mgr->privateData = privateData; - -@@ -124,7 +127,8 @@ virSecurityManagerNewStack(virSecurityManagerPtr primary) - virSecurityManagerGetDriver(primary), - virSecurityManagerGetAllowDiskFormatProbing(primary), - virSecurityManagerGetDefaultConfined(primary), -- virSecurityManagerGetRequireConfined(primary)); -+ virSecurityManagerGetRequireConfined(primary), -+ virSecurityManagerGetPrivileged(primary)); - - if (!mgr) - return NULL; -@@ -153,6 +157,7 @@ virSecurityManagerNewDAC(const char *virtDriver, - bool defaultConfined, - bool requireConfined, - bool dynamicOwnership, -+ bool privileged, - virSecurityManagerDACChownCallback chownCallback) - { - virSecurityManagerPtr mgr = -@@ -160,7 +165,8 @@ virSecurityManagerNewDAC(const char *virtDriver, - virtDriver, - allowDiskFormatProbing, - defaultConfined, -- requireConfined); -+ requireConfined, -+ privileged); - - if (!mgr) - return NULL; -@@ -182,7 +188,8 @@ virSecurityManagerNew(const char *name, - const char *virtDriver, - bool allowDiskFormatProbing, - bool defaultConfined, -- bool requireConfined) -+ bool requireConfined, -+ bool privileged) - { - virSecurityDriverPtr drv = virSecurityDriverLookup(name, virtDriver); - if (!drv) -@@ -212,7 +219,8 @@ virSecurityManagerNew(const char *name, - virtDriver, - allowDiskFormatProbing, - defaultConfined, -- requireConfined); -+ requireConfined, -+ privileged); - } - - -@@ -333,6 +341,13 @@ virSecurityManagerGetRequireConfined(virSecurityManagerPtr mgr) - } - - -+bool -+virSecurityManagerGetPrivileged(virSecurityManagerPtr mgr) -+{ -+ return mgr->privileged; -+} -+ -+ - /** - * virSecurityManagerRestoreDiskLabel: - * @mgr: security manager object -diff --git a/src/security/security_manager.h b/src/security/security_manager.h -index 78f34a0..53e56f6 100644 ---- a/src/security/security_manager.h -+++ b/src/security/security_manager.h -@@ -34,7 +34,8 @@ virSecurityManagerPtr virSecurityManagerNew(const char *name, - const char *virtDriver, - bool allowDiskFormatProbing, - bool defaultConfined, -- bool requireConfined); -+ bool requireConfined, -+ bool privileged); - - virSecurityManagerPtr virSecurityManagerNewStack(virSecurityManagerPtr primary); - int virSecurityManagerStackAddNested(virSecurityManagerPtr stack, -@@ -62,6 +63,7 @@ virSecurityManagerPtr virSecurityManagerNewDAC(const char *virtDriver, - bool defaultConfined, - bool requireConfined, - bool dynamicOwnership, -+ bool privileged, - virSecurityManagerDACChownCallback chownCallback); - - int virSecurityManagerPreFork(virSecurityManagerPtr mgr); -@@ -77,6 +79,7 @@ const char *virSecurityManagerGetBaseLabel(virSecurityManagerPtr mgr, int virtTy - bool virSecurityManagerGetAllowDiskFormatProbing(virSecurityManagerPtr mgr); - bool virSecurityManagerGetDefaultConfined(virSecurityManagerPtr mgr); - bool virSecurityManagerGetRequireConfined(virSecurityManagerPtr mgr); -+bool virSecurityManagerGetPrivileged(virSecurityManagerPtr mgr); - - int virSecurityManagerRestoreDiskLabel(virSecurityManagerPtr mgr, - virDomainDefPtr def, -diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c -index 3b547f2..b17a41d 100644 ---- a/tests/qemuhotplugtest.c -+++ b/tests/qemuhotplugtest.c -@@ -361,7 +361,7 @@ mymain(void) - if (!driver.lockManager) - return EXIT_FAILURE; - -- if (!(mgr = virSecurityManagerNew("none", "qemu", false, false, false))) -+ if (!(mgr = virSecurityManagerNew("none", "qemu", false, false, false, true))) - return EXIT_FAILURE; - if (!(driver.securityManager = virSecurityManagerNewStack(mgr))) - return EXIT_FAILURE; -diff --git a/tests/seclabeltest.c b/tests/seclabeltest.c -index 51765c9..93ddcbb 100644 ---- a/tests/seclabeltest.c -+++ b/tests/seclabeltest.c -@@ -17,7 +17,7 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) - if (virThreadInitialize() < 0) - return EXIT_FAILURE; - -- mgr = virSecurityManagerNew(NULL, "QEMU", false, true, false); -+ mgr = virSecurityManagerNew(NULL, "QEMU", false, true, false, false); - if (mgr == NULL) { - fprintf(stderr, "Failed to start security driver"); - return EXIT_FAILURE; -diff --git a/tests/securityselinuxlabeltest.c b/tests/securityselinuxlabeltest.c -index 85fad37..4808eea 100644 ---- a/tests/securityselinuxlabeltest.c -+++ b/tests/securityselinuxlabeltest.c -@@ -351,7 +351,7 @@ mymain(void) - if (!rc) - return EXIT_AM_SKIP; - -- if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false))) { -+ if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false, true))) { - virErrorPtr err = virGetLastError(); - VIR_TEST_VERBOSE("Unable to initialize security driver: %s\n", - err->message); -diff --git a/tests/securityselinuxtest.c b/tests/securityselinuxtest.c -index 38ab70e..3a7862f 100644 ---- a/tests/securityselinuxtest.c -+++ b/tests/securityselinuxtest.c -@@ -272,7 +272,7 @@ mymain(void) - int ret = 0; - virSecurityManagerPtr mgr; - -- if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false))) { -+ if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false, true))) { - virErrorPtr err = virGetLastError(); - fprintf(stderr, "Unable to initialize security driver: %s\n", - err->message); --- -2.5.3 - diff --git a/SOURCES/libvirt-virSecuritySELinuxSetSecurityAllLabel-drop-useless-virFileIsSharedFSType.patch b/SOURCES/libvirt-virSecuritySELinuxSetSecurityAllLabel-drop-useless-virFileIsSharedFSType.patch deleted file mode 100644 index 4bbff51..0000000 --- a/SOURCES/libvirt-virSecuritySELinuxSetSecurityAllLabel-drop-useless-virFileIsSharedFSType.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 71c76c2375fc782a613f0e1154b76be084c8cea2 Mon Sep 17 00:00:00 2001 -Message-Id: <71c76c2375fc782a613f0e1154b76be084c8cea2@dist-git> -From: Michal Privoznik -Date: Tue, 15 Sep 2015 11:51:21 +0200 -Subject: [PATCH] virSecuritySELinuxSetSecurityAllLabel: drop useless - virFileIsSharedFSType - -https://bugzilla.redhat.com/show_bug.cgi?id=1124841 - -The check is done in virSecuritySELinuxSetFilecon itself. There's -no need to check it again. - -Signed-off-by: Michal Privoznik -(cherry picked from commit 370461d1dbcdcf63fbe6c34d188c28cf11488845) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/security/security_selinux.c | 10 ++++------ - 1 file changed, 4 insertions(+), 6 deletions(-) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index d2e5aa2..46080bf 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -2306,7 +2306,7 @@ virSecuritySELinuxSetSecurityAllLabel(virSecurityManagerPtr mgr, - continue; - } - if (virSecuritySELinuxSetSecurityDiskLabel(mgr, -- def, def->disks[i]) < 0) -+ def, def->disks[i]) < 0) - return -1; - } - /* XXX fixme process def->fss if relabel == true */ -@@ -2355,11 +2355,9 @@ virSecuritySELinuxSetSecurityAllLabel(virSecurityManagerPtr mgr, - virSecuritySELinuxSetFilecon(def->os.dtb, data->content_context) < 0) - return -1; - -- if (stdin_path) { -- if (virSecuritySELinuxSetFilecon(stdin_path, data->content_context) < 0 && -- virFileIsSharedFSType(stdin_path, VIR_FILE_SHFS_NFS) != 1) -- return -1; -- } -+ if (stdin_path && -+ virSecuritySELinuxSetFilecon(stdin_path, data->content_context) < 0) -+ return -1; - - return 0; - } --- -2.5.3 - diff --git a/SOURCES/libvirt-virStorageEncryptionSecretFree-Don-t-leak-secret-lookup-definition.patch b/SOURCES/libvirt-virStorageEncryptionSecretFree-Don-t-leak-secret-lookup-definition.patch new file mode 100644 index 0000000..fd26db2 --- /dev/null +++ b/SOURCES/libvirt-virStorageEncryptionSecretFree-Don-t-leak-secret-lookup-definition.patch @@ -0,0 +1,49 @@ +From 3b8e838edb8ca856d25dd2e0ce29d1082527d087 Mon Sep 17 00:00:00 2001 +Message-Id: <3b8e838edb8ca856d25dd2e0ce29d1082527d087@dist-git> +From: Michal Privoznik +Date: Mon, 25 Jul 2016 12:42:47 -0400 +Subject: [PATCH] virStorageEncryptionSecretFree: Don't leak secret lookup + definition + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +When storage secret is parsed in virStorageEncryptionSecretParse(), +virSecretLookupParseSecret() which allocates some memory. This is +however never freed. + +==21711== 134 bytes in 6 blocks are definitely lost in loss record 70 of 85 +==21711== at 0x4C29F80: malloc (vg_replace_malloc.c:296) +==21711== by 0xBCA0356: xmlStrndup (in /usr/lib64/libxml2.so.2.9.4) +==21711== by 0xA9F432E: virXMLPropString (virxml.c:479) +==21711== by 0xA9D25B0: virSecretLookupParseSecret (virsecret.c:70) +==21711== by 0xA9D616E: virStorageEncryptionSecretParse (virstorageencryption.c:172) +==21711== by 0xA9D66B2: virStorageEncryptionParseXML (virstorageencryption.c:281) +==21711== by 0xA9D68DF: virStorageEncryptionParseNode (virstorageencryption.c:338) +==21711== by 0xAA12575: virDomainDiskDefParseXML (domain_conf.c:7606) +==21711== by 0xAA2CAC6: virDomainDefParseXML (domain_conf.c:16658) +==21711== by 0xAA2FC75: virDomainDefParseNode (domain_conf.c:17472) +==21711== by 0xAA2FAE4: virDomainDefParse (domain_conf.c:17419) +==21711== by 0xAA2FB72: virDomainDefParseFile (domain_conf.c:17443) + +Signed-off-by: Michal Privoznik +(cherry picked from commit b04835258f3ea97c37f6a1aed370c6a2b29c58b2) +Signed-off-by: John Ferlan +--- + src/util/virstorageencryption.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c +index afb44da..cd17554 100644 +--- a/src/util/virstorageencryption.c ++++ b/src/util/virstorageencryption.c +@@ -50,6 +50,7 @@ virStorageEncryptionSecretFree(virStorageEncryptionSecretPtr secret) + { + if (!secret) + return; ++ virSecretLookupDefClear(&secret->seclookupdef); + VIR_FREE(secret); + } + +-- +2.9.2 + diff --git a/SOURCES/libvirt-virSystemdGetMachineNameByPID-Initialize-reply.patch b/SOURCES/libvirt-virSystemdGetMachineNameByPID-Initialize-reply.patch deleted file mode 100644 index 55da3e7..0000000 --- a/SOURCES/libvirt-virSystemdGetMachineNameByPID-Initialize-reply.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 704cb78bdb0b5bbb8409d2795b82d3936aae6f2b Mon Sep 17 00:00:00 2001 -Message-Id: <704cb78bdb0b5bbb8409d2795b82d3936aae6f2b@dist-git> -From: Michal Privoznik -Date: Tue, 16 Feb 2016 11:55:10 +0100 -Subject: [PATCH] virSystemdGetMachineNameByPID: Initialize @reply - -https://bugzilla.redhat.com/show_bug.cgi?id=1308494 - -I've noticed that variable @reply is not initialized and if -something at the beginning of the function fails, e.g. -virDBusGetSystemBus(), the control jump straight to cleanup label -where dbus_message_unref() is then called over this uninitialized -variable. - -Signed-off-by: Michal Privoznik -(cherry picked from commit a3b168d01a6254a5972d4eda87d7cbc3d9cdb3ef) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/util/virsystemd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c -index 0f4e1f0..7bc5d55 100644 ---- a/src/util/virsystemd.c -+++ b/src/util/virsystemd.c -@@ -181,7 +181,7 @@ char * - virSystemdGetMachineNameByPID(pid_t pid) - { - DBusConnection *conn; -- DBusMessage *reply; -+ DBusMessage *reply = NULL; - char *name = NULL, *object = NULL; - - if (virDBusIsServiceEnabled("org.freedesktop.machine1") < 0) --- -2.7.2 - diff --git a/SOURCES/libvirt-virconf-Fix-config-file-path-construction.patch b/SOURCES/libvirt-virconf-Fix-config-file-path-construction.patch new file mode 100644 index 0000000..8657c80 --- /dev/null +++ b/SOURCES/libvirt-virconf-Fix-config-file-path-construction.patch @@ -0,0 +1,71 @@ +From ed2b72afab3b9359cd3b6fab3ee38e56624e87f8 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Mon, 1 Aug 2016 15:10:11 +0200 +Subject: [PATCH] virconf: Fix config file path construction + +Since commit c4bdff19, the path to the configuration file has been constructed +in the following manner: + - if no config filename was passed to virConfLoadConfigPath, libvirt.conf was + used as default + - otherwise the filename was concatenated with + "/libvirt/libvirt%s%s.conf" which in admin case resulted in + "libvirt-libvirt-admin.conf.conf". Obviously, this non-existent config led to + ignoring all user settings in libvirt-admin.conf. This patch requires the + config filename to be always provided as an argument with the concatenation + being simplified. + + Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1357364 + +Signed-off-by: Erik Skultety +(cherry picked from commit c5d0a2a38525929515337ea21cb5c19903ccb05c) +--- + src/libvirt.c | 2 +- + src/util/virconf.c | 12 ++++-------- + 2 files changed, 5 insertions(+), 9 deletions(-) + +diff --git a/src/libvirt.c b/src/libvirt.c +index a5e0e41..f26eec4 100644 +--- a/src/libvirt.c ++++ b/src/libvirt.c +@@ -970,7 +970,7 @@ virConnectOpenInternal(const char *name, + if (ret == NULL) + return NULL; + +- if (virConfLoadConfig(&conf, NULL) < 0) ++ if (virConfLoadConfig(&conf, "libvirt.conf") < 0) + goto failed; + + if (name && name[0] == '\0') +diff --git a/src/util/virconf.c b/src/util/virconf.c +index 7c98588..8176296 100644 +--- a/src/util/virconf.c ++++ b/src/util/virconf.c +@@ -1069,20 +1069,16 @@ virConfLoadConfigPath(const char *name) + { + char *path; + if (geteuid() == 0) { +- if (virAsprintf(&path, "%s/libvirt/libvirt%s%s.conf", +- SYSCONFDIR, +- name ? "-" : "", +- name ? name : "") < 0) ++ if (virAsprintf(&path, "%s/libvirt/%s", ++ SYSCONFDIR, name) < 0) + return NULL; + } else { + char *userdir = virGetUserConfigDirectory(); + if (!userdir) + return NULL; + +- if (virAsprintf(&path, "%s/libvirt%s%s.conf", +- userdir, +- name ? "-" : "", +- name ? name : "") < 0) { ++ if (virAsprintf(&path, "%s/%s", ++ userdir, name) < 0) { + VIR_FREE(userdir); + return NULL; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-virfile-Add-error-for-root-squash-change-mode-failure.patch b/SOURCES/libvirt-virfile-Add-error-for-root-squash-change-mode-failure.patch deleted file mode 100644 index a168bc3..0000000 --- a/SOURCES/libvirt-virfile-Add-error-for-root-squash-change-mode-failure.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 642c0565683b08aa183c835e998e1b81398dfbd0 Mon Sep 17 00:00:00 2001 -Message-Id: <642c0565683b08aa183c835e998e1b81398dfbd0@dist-git> -From: John Ferlan -Date: Wed, 2 Sep 2015 09:55:12 -0400 -Subject: [PATCH] virfile: Add error for root squash change mode failure - -https://bugzilla.redhat.com/show_bug.cgi?id=1253609 - -This will only be seen when debugging, but in order to help determine -whether a virFileOpenForceOwnerMode failed during an NFS root-squash -volume/file creation, add an error message from the child. - -(cherry picked from commit 1fafc1bc1cd5c18f36089ec697da08f72270b35c) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/util/virfile.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/src/util/virfile.c b/src/util/virfile.c -index 61f6e4d..e657913 100644 ---- a/src/util/virfile.c -+++ b/src/util/virfile.c -@@ -2087,8 +2087,13 @@ virFileOpenForked(const char *path, int openflags, mode_t mode, - - /* File is successfully open. Set permissions if requested. */ - ret = virFileOpenForceOwnerMode(path, fd, mode, uid, gid, flags); -- if (ret < 0) -+ if (ret < 0) { -+ ret = -errno; -+ virReportSystemError(errno, -+ _("child process failed to force owner mode file '%s'"), -+ path); - goto childerror; -+ } - - do { - ret = sendfd(pair[1], fd); --- -2.5.1 - diff --git a/SOURCES/libvirt-virfile-Check-for-existence-of-dir-in-virFileDeleteTree.patch b/SOURCES/libvirt-virfile-Check-for-existence-of-dir-in-virFileDeleteTree.patch deleted file mode 100644 index 28eb815..0000000 --- a/SOURCES/libvirt-virfile-Check-for-existence-of-dir-in-virFileDeleteTree.patch +++ /dev/null @@ -1,101 +0,0 @@ -From c144a563ea6f31e82026009dc03ba8f1b5caba84 Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Thu, 17 Sep 2015 11:47:21 +0200 -Subject: [PATCH] virfile: Check for existence of dir in virFileDeleteTree - -https://bugzilla.redhat.com/show_bug.cgi?id=1146886 - -Commit id 'f1f68ca33' added code to remove the directory paths for -auto-generated sockets, but that code could be called before the -paths were created resulting in generating error messages from -virFileDeleteTree indicating that the file doesn't exist. - -Rather than "enforce" all callers to make the non-NULL and existence -checks, modify the virFileDeleteTree API to silently ignore NULL on -input and non-existent directory trees. - -(cherry picked from commit b421a70811b15a2d1853ee7e47069fdef83f7f22) -Signed-off-by: Martin Kletzander -Signed-off-by: Jiri Denemark ---- - src/qemu/qemu_process.c | 6 ++---- - src/util/virfile.c | 8 ++++++-- - tests/virhostdevtest.c | 2 +- - tests/virscsitest.c | 2 +- - 4 files changed, 10 insertions(+), 8 deletions(-) - -diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c -index ee1d6b2..301b9bf 100644 ---- a/src/qemu/qemu_process.c -+++ b/src/qemu/qemu_process.c -@@ -5272,14 +5272,12 @@ void qemuProcessStop(virQEMUDriverPtr driver, - - ignore_value(virAsprintf(&tmppath, "%s/domain-%s", - cfg->libDir, vm->def->name)); -- if (tmppath) -- virFileDeleteTree(tmppath); -+ virFileDeleteTree(tmppath); - VIR_FREE(tmppath); - - ignore_value(virAsprintf(&tmppath, "%s/domain-%s", - cfg->channelTargetDir, vm->def->name)); -- if (tmppath) -- virFileDeleteTree(tmppath); -+ virFileDeleteTree(tmppath); - VIR_FREE(tmppath); - - ignore_value(virDomainChrDefForeach(vm->def, -diff --git a/src/util/virfile.c b/src/util/virfile.c -index 7c6e72c..53d4639 100644 ---- a/src/util/virfile.c -+++ b/src/util/virfile.c -@@ -909,13 +909,17 @@ int virFileNBDDeviceAssociate(const char *file, - */ - int virFileDeleteTree(const char *dir) - { -- DIR *dh = opendir(dir); -+ DIR *dh; - struct dirent *de; - char *filepath = NULL; - int ret = -1; - int direrr; - -- if (!dh) { -+ /* Silently return 0 if passed NULL or directory doesn't exist */ -+ if (!dir || !virFileExists(dir)) -+ return 0; -+ -+ if (!(dh = opendir(dir))) { - virReportSystemError(errno, _("Cannot open dir '%s'"), - dir); - return -1; -diff --git a/tests/virhostdevtest.c b/tests/virhostdevtest.c -index 1e93819..065b825 100644 ---- a/tests/virhostdevtest.c -+++ b/tests/virhostdevtest.c -@@ -65,7 +65,7 @@ myCleanup(void) - } - - if (mgr) { -- if (mgr->stateDir && !getenv("LIBVIRT_SKIP_CLEANUP")) -+ if (!getenv("LIBVIRT_SKIP_CLEANUP")) - virFileDeleteTree(mgr->stateDir); - - virObjectUnref(mgr->activePCIHostdevs); -diff --git a/tests/virscsitest.c b/tests/virscsitest.c -index a86ca28..88286f1 100644 ---- a/tests/virscsitest.c -+++ b/tests/virscsitest.c -@@ -241,7 +241,7 @@ mymain(void) - ret = -1; - - cleanup: -- if (tmpdir && getenv("LIBVIRT_SKIP_CLEANUP") == NULL) -+ if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) - virFileDeleteTree(tmpdir); - VIR_FREE(virscsi_prefix); - return ret; --- -2.5.3 - diff --git a/SOURCES/libvirt-virfile-Introduce-virFileUnlink.patch b/SOURCES/libvirt-virfile-Introduce-virFileUnlink.patch deleted file mode 100644 index efc0fd3..0000000 --- a/SOURCES/libvirt-virfile-Introduce-virFileUnlink.patch +++ /dev/null @@ -1,184 +0,0 @@ -From b3ada4fb6e742813d3eca32bac7bf88e4db54d8e Mon Sep 17 00:00:00 2001 -Message-Id: -From: John Ferlan -Date: Wed, 2 Sep 2015 09:55:13 -0400 -Subject: [PATCH] virfile: Introduce virFileUnlink - -https://bugzilla.redhat.com/show_bug.cgi?id=1253609 - -In an NFS root-squashed environment the 'vol-delete' command will fail to -'unlink' the target volume since it was created under a different uid:gid. - -This code continues the concepts introduced in virFileOpenForked and -virDirCreate[NoFork] with respect to running the unlink command under -the uid/gid of the child. Unlike the other two, don't retry on EACCES -(that's why we're here doing this now). - -(cherry picked from commit 35847860f65f92e444db9730e00cdaef45198e0c) -Signed-off-by: John Ferlan -Signed-off-by: Jiri Denemark ---- - src/libvirt_private.syms | 1 + - src/storage/storage_backend_fs.c | 3 +- - src/util/virfile.c | 106 +++++++++++++++++++++++++++++++++++++++ - src/util/virfile.h | 1 + - 4 files changed, 110 insertions(+), 1 deletion(-) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index e5d8437..15fa785 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -1452,6 +1452,7 @@ virFileSanitizePath; - virFileSkipRoot; - virFileStripSuffix; - virFileTouch; -+virFileUnlink; - virFileUnlock; - virFileUpdatePerm; - virFileWaitForDevices; -diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c -index c0ea1df..f41a41e 100644 ---- a/src/storage/storage_backend_fs.c -+++ b/src/storage/storage_backend_fs.c -@@ -1203,7 +1203,8 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED, - - switch ((virStorageVolType) vol->type) { - case VIR_STORAGE_VOL_FILE: -- if (unlink(vol->target.path) < 0) { -+ if (virFileUnlink(vol->target.path, vol->target.perms->uid, -+ vol->target.perms->gid) < 0) { - /* Silently ignore failures where the vol has already gone away */ - if (errno != ENOENT) { - virReportSystemError(errno, -diff --git a/src/util/virfile.c b/src/util/virfile.c -index e657913..7c6e72c 100644 ---- a/src/util/virfile.c -+++ b/src/util/virfile.c -@@ -2285,6 +2285,112 @@ virFileOpenAs(const char *path, int openflags, mode_t mode, - return ret; - } - -+ -+/* virFileUnlink: -+ * @path: file to unlink -+ * @uid: uid that was used to create the file (not required) -+ * @gid: gid that was used to create the file (not required) -+ * -+ * If a file/volume was created in an NFS root-squash environment, -+ * then we must 'unlink' the file in the same environment. Unlike -+ * the virFileOpenAs[Forked] and virDirCreate[NoFork], this code -+ * takes no extra flags and does not bother with EACCES failures -+ * from the child. -+ */ -+int -+virFileUnlink(const char *path, -+ uid_t uid, -+ gid_t gid) -+{ -+ pid_t pid; -+ int waitret; -+ int status, ret = 0; -+ gid_t *groups; -+ int ngroups; -+ -+ /* If not running as root or if a non explicit uid/gid was being used for -+ * the file/volume, then use unlink directly -+ */ -+ if ((geteuid() != 0) || -+ ((uid == (uid_t) -1) && (gid == (gid_t) -1))) -+ return unlink(path); -+ -+ /* Otherwise, we have to deal with the NFS root-squash craziness -+ * to run under the uid/gid that created the volume in order to -+ * perform the unlink of the volume. -+ */ -+ if (uid == (uid_t) -1) -+ uid = geteuid(); -+ if (gid == (gid_t) -1) -+ gid = getegid(); -+ -+ ngroups = virGetGroupList(uid, gid, &groups); -+ if (ngroups < 0) -+ return -errno; -+ -+ pid = virFork(); -+ -+ if (pid < 0) { -+ ret = -errno; -+ VIR_FREE(groups); -+ return ret; -+ } -+ -+ if (pid) { /* parent */ -+ /* wait for child to complete, and retrieve its exit code */ -+ VIR_FREE(groups); -+ -+ while ((waitret = waitpid(pid, &status, 0)) == -1 && errno == EINTR); -+ if (waitret == -1) { -+ ret = -errno; -+ virReportSystemError(errno, -+ _("failed to wait for child unlinking '%s'"), -+ path); -+ goto parenterror; -+ } -+ -+ /* -+ * If waitpid succeeded, but if the child exited abnormally or -+ * reported non-zero status, report failure -+ */ -+ if (!WIFEXITED(status) || (WEXITSTATUS(status)) != 0) { -+ char *msg = virProcessTranslateStatus(status); -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("child failed to unlink '%s': %s"), -+ path, msg); -+ VIR_FREE(msg); -+ if (WIFEXITED(status)) -+ ret = -WEXITSTATUS(status); -+ else -+ ret = -EACCES; -+ } -+ -+ parenterror: -+ return ret; -+ } -+ -+ /* child */ -+ -+ /* set desired uid/gid, then attempt to unlink the file */ -+ if (virSetUIDGID(uid, gid, groups, ngroups) < 0) { -+ ret = errno; -+ goto childerror; -+ } -+ -+ if (unlink(path) < 0) { -+ ret = errno; -+ goto childerror; -+ } -+ -+ childerror: -+ if ((ret & 0xff) != ret) { -+ VIR_WARN("unable to pass desired return value %d", ret); -+ ret = 0xff; -+ } -+ _exit(ret); -+} -+ -+ - /* return -errno on failure, or 0 on success */ - static int - virDirCreateNoFork(const char *path, -diff --git a/src/util/virfile.h b/src/util/virfile.h -index 2d27e89..797ca65 100644 ---- a/src/util/virfile.h -+++ b/src/util/virfile.h -@@ -219,6 +219,7 @@ int virFileOpenAs(const char *path, int openflags, mode_t mode, - uid_t uid, gid_t gid, - unsigned int flags) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; -+int virFileUnlink(const char *path, uid_t uid, gid_t gid); - - enum { - VIR_DIR_CREATE_NONE = 0, --- -2.5.1 - diff --git a/SOURCES/libvirt-virsh-Fix-core-for-cmdSecretGetValue.patch b/SOURCES/libvirt-virsh-Fix-core-for-cmdSecretGetValue.patch new file mode 100644 index 0000000..2eb26d0 --- /dev/null +++ b/SOURCES/libvirt-virsh-Fix-core-for-cmdSecretGetValue.patch @@ -0,0 +1,36 @@ +From 9fccff47a561ba773a94dbf18e266771d674ca47 Mon Sep 17 00:00:00 2001 +Message-Id: <9fccff47a561ba773a94dbf18e266771d674ca47@dist-git> +From: John Ferlan +Date: Mon, 15 Aug 2016 10:12:15 -0400 +Subject: [PATCH] virsh: Fix core for cmdSecretGetValue + +https://bugzilla.redhat.com/show_bug.cgi?id=1366611 + +When commit id 'cb2e3e50' reworked the cmdSecretGetValue call to use +VIR_DISPOSE_STRING for base64, it neglected to initialize the base64 +value to NULL since the cleanup: label could be reached prior to the +base64 value being set or not. This resulted in a core dump, adding +the initialization will avoid the issue. + +(cherry picked from commit 18701e9d6213be5a622d7c797f3a899b689e26b2) +Signed-off-by: John Ferlan +--- + tools/virsh-secret.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/virsh-secret.c b/tools/virsh-secret.c +index 8588f4c..537bdd7 100644 +--- a/tools/virsh-secret.c ++++ b/tools/virsh-secret.c +@@ -253,7 +253,7 @@ static bool + cmdSecretGetValue(vshControl *ctl, const vshCmd *cmd) + { + virSecretPtr secret; +- char *base64; ++ char *base64 = NULL; + unsigned char *value; + size_t value_size; + bool ret = false; +-- +2.9.2 + diff --git a/SOURCES/libvirt-virsh-Kill-blockJobImpl-by-moving-the-final-impl-into-cmdBlockCommit.patch b/SOURCES/libvirt-virsh-Kill-blockJobImpl-by-moving-the-final-impl-into-cmdBlockCommit.patch deleted file mode 100644 index b1a4e82..0000000 --- a/SOURCES/libvirt-virsh-Kill-blockJobImpl-by-moving-the-final-impl-into-cmdBlockCommit.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 2fff3bf5d38ae5d1e954c5f5a9b8d3e840283ce2 Mon Sep 17 00:00:00 2001 -Message-Id: <2fff3bf5d38ae5d1e954c5f5a9b8d3e840283ce2@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:28 +0200 -Subject: [PATCH] virsh: Kill blockJobImpl by moving the final impl into - cmdBlockCommit - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Final cleanup to get rid of the hub function. - -(cherry picked from commit 5dceea2c95b341c192b9f4940308af3710c309f0) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 92 +++++++++++++++++++--------------------------------- - 1 file changed, 33 insertions(+), 59 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index aac9bb8..91b0b12 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -1664,60 +1664,6 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd) - goto cleanup; - } - --typedef enum { -- VSH_CMD_BLOCK_JOB_COMMIT, --} vshCmdBlockJobMode; -- --static bool --blockJobImpl(vshControl *ctl, const vshCmd *cmd, -- vshCmdBlockJobMode mode, virDomainPtr *pdom) --{ -- virDomainPtr dom = NULL; -- const char *path; -- unsigned long bandwidth = 0; -- bool ret = false; -- const char *base = NULL; -- const char *top = NULL; -- unsigned int flags = 0; -- -- if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -- goto cleanup; -- -- if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -- goto cleanup; -- -- if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) -- goto cleanup; -- -- switch (mode) { -- case VSH_CMD_BLOCK_JOB_COMMIT: -- if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0 || -- vshCommandOptStringReq(ctl, cmd, "top", &top) < 0) -- goto cleanup; -- if (vshCommandOptBool(cmd, "shallow")) -- flags |= VIR_DOMAIN_BLOCK_COMMIT_SHALLOW; -- if (vshCommandOptBool(cmd, "delete")) -- flags |= VIR_DOMAIN_BLOCK_COMMIT_DELETE; -- if (vshCommandOptBool(cmd, "active") || -- vshCommandOptBool(cmd, "pivot") || -- vshCommandOptBool(cmd, "keep-overlay")) -- flags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE; -- if (vshCommandOptBool(cmd, "keep-relative")) -- flags |= VIR_DOMAIN_BLOCK_COMMIT_RELATIVE; -- if (virDomainBlockCommit(dom, path, base, top, bandwidth, flags) < 0) -- goto cleanup; -- break; -- } -- -- ret = true; -- -- cleanup: -- if (pdom && ret) -- *pdom = dom; -- else if (dom) -- virDomainFree(dom); -- return ret; --} - - static void - vshPrintJobProgress(const char *label, unsigned long long remaining, -@@ -1864,10 +1810,38 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - struct timeval start; - struct timeval curr; - const char *path = NULL; -+ const char *base = NULL; -+ const char *top = NULL; - bool quit = false; - int abort_flags = 0; - int status = -1; - int cb_id = -1; -+ unsigned int flags = 0; -+ unsigned long bandwidth = 0; -+ -+ if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -+ return false; -+ -+ if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0) -+ return false; -+ -+ if (vshCommandOptStringReq(ctl, cmd, "top", &top) < 0) -+ return false; -+ -+ if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) -+ return false; -+ -+ if (vshCommandOptBool(cmd, "shallow")) -+ flags |= VIR_DOMAIN_BLOCK_COMMIT_SHALLOW; -+ -+ if (vshCommandOptBool(cmd, "delete")) -+ flags |= VIR_DOMAIN_BLOCK_COMMIT_DELETE; -+ -+ if (active) -+ flags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE; -+ -+ if (vshCommandOptBool(cmd, "keep-relative")) -+ flags |= VIR_DOMAIN_BLOCK_COMMIT_RELATIVE; - - blocking |= vshCommandOptBool(cmd, "timeout") || pivot || finish; - if (blocking) { -@@ -1877,8 +1851,6 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - } - if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) - return false; -- if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -- return false; - if (vshCommandOptBool(cmd, "async")) - abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; - -@@ -1897,6 +1869,9 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - return false; - } - -+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -+ return false; -+ - virConnectDomainEventGenericCallback cb = - VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); - -@@ -1908,7 +1883,7 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - NULL)) < 0) - vshResetLibvirtError(); - -- if (!blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_COMMIT, &dom)) -+ if (virDomainBlockCommit(dom, path, base, top, bandwidth, flags) < 0) - goto cleanup; - - if (!blocking) { -@@ -1990,8 +1965,7 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - - ret = true; - cleanup: -- if (dom) -- virDomainFree(dom); -+ virDomainFree(dom); - if (blocking) - sigaction(SIGINT, &old_sig_action, NULL); - if (cb_id >= 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Refactor-argument-checking-in-cmdBlockCommit.patch b/SOURCES/libvirt-virsh-Refactor-argument-checking-in-cmdBlockCommit.patch deleted file mode 100644 index c3ec1f3..0000000 --- a/SOURCES/libvirt-virsh-Refactor-argument-checking-in-cmdBlockCommit.patch +++ /dev/null @@ -1,97 +0,0 @@ -From b90683317950283d9d9aa9cbd00fb6b98ca9447a Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:29 +0200 -Subject: [PATCH] virsh: Refactor argument checking in cmdBlockCommit - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Use the VSH_EXCLUSIVE_OPTIONS to exclude combinations of --pivot and ---keep-overlay and refactor the enforcing of the --wait option and other -flags that imply --wait. - -(cherry picked from commit bd687cf9b9bb9f9de2482150bc2b12c3415e740a) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 41 +++++++++++++++++++++++++++-------------- - 1 file changed, 27 insertions(+), 14 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 91b0b12..4560d32 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -1802,7 +1802,8 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - bool pivot = vshCommandOptBool(cmd, "pivot"); - bool finish = vshCommandOptBool(cmd, "keep-overlay"); - bool active = vshCommandOptBool(cmd, "active") || pivot || finish; -- bool blocking = vshCommandOptBool(cmd, "wait"); -+ bool blocking = vshCommandOptBool(cmd, "wait") || pivot || finish; -+ bool async = vshCommandOptBool(cmd, "async"); - int timeout = 0; - struct sigaction sig_action; - struct sigaction old_sig_action; -@@ -1819,6 +1820,8 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - unsigned int flags = 0; - unsigned long bandwidth = 0; - -+ VSH_EXCLUSIVE_OPTIONS("pivot", "keep-overlay"); -+ - if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) - return false; - -@@ -1843,17 +1846,30 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - if (vshCommandOptBool(cmd, "keep-relative")) - flags |= VIR_DOMAIN_BLOCK_COMMIT_RELATIVE; - -- blocking |= vshCommandOptBool(cmd, "timeout") || pivot || finish; -+ if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) -+ return false; -+ -+ if (timeout) -+ blocking = true; -+ -+ if (!blocking) { -+ if (verbose) { -+ vshError(ctl, "%s", _("--verbose requires at least one of --timeout, " -+ "--wait, --pivot, or --keep-overlay")); -+ return false; -+ } -+ -+ if (async) { -+ vshError(ctl, "%s", _("--async requires at least one of --timeout, " -+ "--wait, --pivot, or --keep-overlay")); -+ return false; -+ } -+ } -+ -+ if (async) -+ abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -+ - if (blocking) { -- if (pivot && finish) { -- vshError(ctl, "%s", _("cannot mix --pivot and --keep-overlay")); -- return false; -- } -- if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) -- return false; -- if (vshCommandOptBool(cmd, "async")) -- abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -- - sigemptyset(&sigmask); - sigaddset(&sigmask, SIGINT); - -@@ -1864,9 +1880,6 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - sigaction(SIGINT, &sig_action, &old_sig_action); - - GETTIMEOFDAY(&start); -- } else if (verbose || vshCommandOptBool(cmd, "async")) { -- vshError(ctl, "%s", _("missing --wait option")); -- return false; - } - - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Refactor-argument-handling-in-cmdBlockCopy.patch b/SOURCES/libvirt-virsh-Refactor-argument-handling-in-cmdBlockCopy.patch deleted file mode 100644 index 35190b3..0000000 --- a/SOURCES/libvirt-virsh-Refactor-argument-handling-in-cmdBlockCopy.patch +++ /dev/null @@ -1,197 +0,0 @@ -From edf46d78c32b6cf6dc5a8d359603ac035b889610 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:30 +0200 -Subject: [PATCH] virsh: Refactor argument handling in cmdBlockCopy - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Put all argument parsing together and refactor the argument checking -code. - -(cherry picked from commit 8e85f62826a7df46f16c4c9e9abca5ede27b5603) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 133 ++++++++++++++++++++++++++++----------------------- - 1 file changed, 72 insertions(+), 61 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 4560d32..c233eb7 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -2088,11 +2088,12 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) - unsigned long long buf_size = 0; - unsigned int flags = 0; - bool ret = false; -- bool blocking = vshCommandOptBool(cmd, "wait"); - bool verbose = vshCommandOptBool(cmd, "verbose"); - bool pivot = vshCommandOptBool(cmd, "pivot"); - bool finish = vshCommandOptBool(cmd, "finish"); - bool blockdev = vshCommandOptBool(cmd, "blockdev"); -+ bool blocking = vshCommandOptBool(cmd, "wait") || finish || pivot; -+ bool async = vshCommandOptBool(cmd, "async"); - int timeout = 0; - struct sigaction sig_action; - struct sigaction old_sig_action; -@@ -2117,78 +2118,88 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) - return false; - if (vshCommandOptString(ctl, cmd, "format", &format) < 0) - return false; -- -- VSH_EXCLUSIVE_OPTIONS_VAR(dest, xml); -- VSH_EXCLUSIVE_OPTIONS_VAR(format, xml); -- VSH_EXCLUSIVE_OPTIONS_VAR(blockdev, xml); -- -- blocking |= vshCommandOptBool(cmd, "timeout") || pivot || finish; -- if (blocking) { -- if (pivot && finish) { -- vshError(ctl, "%s", _("cannot mix --pivot and --finish")); -- return false; -- } -- if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) -- return false; -- if (vshCommandOptBool(cmd, "async")) -- abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -- -- sigemptyset(&sigmask); -- sigaddset(&sigmask, SIGINT); -- -- intCaught = 0; -- sig_action.sa_sigaction = vshCatchInt; -- sig_action.sa_flags = SA_SIGINFO; -- sigemptyset(&sig_action.sa_mask); -- sigaction(SIGINT, &sig_action, &old_sig_action); -- -- GETTIMEOFDAY(&start); -- } else if (verbose || vshCommandOptBool(cmd, "async")) { -- vshError(ctl, "%s", _("missing --wait option")); -- return false; -- } -- -- virConnectDomainEventGenericCallback cb = -- VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); -- -- if ((cb_id = virConnectDomainEventRegisterAny(ctl->conn, -- dom, -- VIR_DOMAIN_EVENT_ID_BLOCK_JOB, -- cb, -- &status, -- NULL)) < 0) -- vshResetLibvirtError(); -- -- if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -- goto cleanup; -- - /* XXX: Parse bandwidth as scaled input, rather than forcing - * MiB/s, and either reject negative input or treat it as 0 rather - * than trying to guess which value will work well across both - * APIs with their different sizes and scales. */ - if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) -- goto cleanup; -+ return false; - if (vshCommandOptUInt(ctl, cmd, "granularity", &granularity) < 0) -- goto cleanup; -+ return false; - if (vshCommandOptULongLong(ctl, cmd, "buf-size", &buf_size) < 0) -- goto cleanup; -- -- if (xml) { -- if (virFileReadAll(xml, VSH_MAX_XML_FILE, &xmlstr) < 0) { -- vshReportError(ctl); -- goto cleanup; -- } -- } else if (!dest) { -- vshError(ctl, "%s", _("need either --dest or --xml")); -- goto cleanup; -- } -- -+ return false; - /* Exploit that some VIR_DOMAIN_BLOCK_REBASE_* and - * VIR_DOMAIN_BLOCK_COPY_* flags have the same values. */ - if (vshCommandOptBool(cmd, "shallow")) - flags |= VIR_DOMAIN_BLOCK_REBASE_SHALLOW; - if (vshCommandOptBool(cmd, "reuse-external")) - flags |= VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT; -+ if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) -+ return false; -+ -+ if (timeout) -+ blocking = true; -+ -+ if (async) -+ abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -+ -+ VSH_EXCLUSIVE_OPTIONS_VAR(dest, xml); -+ VSH_EXCLUSIVE_OPTIONS_VAR(format, xml); -+ VSH_EXCLUSIVE_OPTIONS_VAR(blockdev, xml); -+ VSH_EXCLUSIVE_OPTIONS_VAR(pivot, finish); -+ -+ if (!dest && !xml) { -+ vshError(ctl, "%s", _("need either --dest or --xml")); -+ return false; -+ } -+ -+ if (!blocking) { -+ if (verbose) { -+ vshError(ctl, "%s", _("--verbose requires at least one of --timeout, " -+ "--wait, --pivot, or --finish")); -+ return false; -+ } -+ -+ if (async) { -+ vshError(ctl, "%s", _("--async requires at least one of --timeout, " -+ "--wait, --pivot, or --finish")); -+ return false; -+ } -+ } -+ -+ if (blocking) { -+ sigemptyset(&sigmask); -+ sigaddset(&sigmask, SIGINT); -+ -+ intCaught = 0; -+ sig_action.sa_sigaction = vshCatchInt; -+ sig_action.sa_flags = SA_SIGINFO; -+ sigemptyset(&sig_action.sa_mask); -+ sigaction(SIGINT, &sig_action, &old_sig_action); -+ -+ GETTIMEOFDAY(&start); -+ } -+ -+ virConnectDomainEventGenericCallback cb = -+ VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); -+ -+ if ((cb_id = virConnectDomainEventRegisterAny(ctl->conn, -+ dom, -+ VIR_DOMAIN_EVENT_ID_BLOCK_JOB, -+ cb, -+ &status, -+ NULL)) < 0) -+ vshResetLibvirtError(); -+ -+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -+ goto cleanup; -+ -+ if (xml) { -+ if (virFileReadAll(xml, VSH_MAX_XML_FILE, &xmlstr) < 0) { -+ vshReportError(ctl); -+ goto cleanup; -+ } -+ } - - if (granularity || buf_size || (format && STRNEQ(format, "raw")) || xml) { - /* New API */ -@@ -2242,7 +2253,7 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) - } else { - /* Old API */ - flags |= VIR_DOMAIN_BLOCK_REBASE_COPY; -- if (vshCommandOptBool(cmd, "blockdev")) -+ if (blockdev) - flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_DEV; - if (STREQ_NULLABLE(format, "raw")) - flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_RAW; --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Refactor-argument-handling-in-cmdBlockPull.patch b/SOURCES/libvirt-virsh-Refactor-argument-handling-in-cmdBlockPull.patch deleted file mode 100644 index 381397b..0000000 --- a/SOURCES/libvirt-virsh-Refactor-argument-handling-in-cmdBlockPull.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 9941fd1b6bb14fc9f241905c53c8c1ebc9dab5ac Mon Sep 17 00:00:00 2001 -Message-Id: <9941fd1b6bb14fc9f241905c53c8c1ebc9dab5ac@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:31 +0200 -Subject: [PATCH] virsh: Refactor argument handling in cmdBlockPull - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Put all argument parsing together and refactor the argument checking -code. - -(cherry picked from commit 44b18323e5e29206b51fc2488f3c00ec20a6a107) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 19 ++++++++++--------- - 1 file changed, 10 insertions(+), 9 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index c233eb7..2f6ad46 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -2654,6 +2654,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - bool ret = false; - bool blocking = vshCommandOptBool(cmd, "wait"); - bool verbose = vshCommandOptBool(cmd, "verbose"); -+ bool async = vshCommandOptBool(cmd, "async"); - int timeout = 0; - struct sigaction sig_action; - struct sigaction old_sig_action; -@@ -2669,6 +2670,9 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - int cb_id = -1; - unsigned int flags = 0; - -+ VSH_REQUIRE_OPTION("verbose", "wait"); -+ VSH_REQUIRE_OPTION("async", "wait"); -+ - if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) - return false; - -@@ -2678,15 +2682,16 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) - return false; - -+ if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) -+ return false; -+ - if (vshCommandOptBool(cmd, "keep-relative")) - flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE; - -+ if (async) -+ abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -+ - if (blocking) { -- if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) -- return false; -- if (vshCommandOptBool(cmd, "async")) -- abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -- - sigemptyset(&sigmask); - sigaddset(&sigmask, SIGINT); - -@@ -2697,10 +2702,6 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - sigaction(SIGINT, &sig_action, &old_sig_action); - - GETTIMEOFDAY(&start); -- } else if (verbose || vshCommandOptBool(cmd, "timeout") || -- vshCommandOptBool(cmd, "async")) { -- vshError(ctl, "%s", _("missing --wait option")); -- return false; - } - - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCommit.patch b/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCommit.patch deleted file mode 100644 index d924e17..0000000 --- a/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCommit.patch +++ /dev/null @@ -1,211 +0,0 @@ -From 8dff17fed328807c986ee100045ff6464e0b70cf Mon Sep 17 00:00:00 2001 -Message-Id: <8dff17fed328807c986ee100045ff6464e0b70cf@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:34 +0200 -Subject: [PATCH] virsh: Refactor block job waiting in cmdBlockCommit - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Reuse the vshBlockJobWait infrastructure to refactor cmdBlockCommit to -use the common code. This additionally fixes a bug when working with -new qemus, where when doing an active commit with --pivot the pivoting -would fail, since qemu reaches 100% completion but the job doesn't -switch to synchronized phase right away. - -(cherry picked from commit 7408403560f7d054da75acaab855a95c51a92e2b) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 133 ++++++++++++++++----------------------------------- - 1 file changed, 40 insertions(+), 93 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 385eba2..8c5ef34 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -2026,20 +2026,13 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - bool blocking = vshCommandOptBool(cmd, "wait") || pivot || finish; - bool async = vshCommandOptBool(cmd, "async"); - int timeout = 0; -- struct sigaction sig_action; -- struct sigaction old_sig_action; -- sigset_t sigmask, oldsigmask; -- struct timeval start; -- struct timeval curr; - const char *path = NULL; - const char *base = NULL; - const char *top = NULL; -- bool quit = false; - int abort_flags = 0; -- int status = -1; -- int cb_id = -1; - unsigned int flags = 0; - unsigned long bandwidth = 0; -+ vshBlockJobWaitDataPtr bjWait = NULL; - - VSH_EXCLUSIVE_OPTIONS("pivot", "keep-overlay"); - -@@ -2090,120 +2083,74 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd) - if (async) - abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; - -- if (blocking) { -- sigemptyset(&sigmask); -- sigaddset(&sigmask, SIGINT); -- -- intCaught = 0; -- sig_action.sa_sigaction = vshCatchInt; -- sig_action.sa_flags = SA_SIGINFO; -- sigemptyset(&sig_action.sa_mask); -- sigaction(SIGINT, &sig_action, &old_sig_action); -- -- GETTIMEOFDAY(&start); -- } -- - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) - return false; - -- virConnectDomainEventGenericCallback cb = -- VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); -- -- if ((cb_id = virConnectDomainEventRegisterAny(ctl->conn, -- dom, -- VIR_DOMAIN_EVENT_ID_BLOCK_JOB, -- cb, -- &status, -- NULL)) < 0) -- vshResetLibvirtError(); -+ if (blocking && -+ !(bjWait = vshBlockJobWaitInit(ctl, dom, path, _("Block commit"), -+ verbose, timeout, async))) -+ goto cleanup; - - if (virDomainBlockCommit(dom, path, base, top, bandwidth, flags) < 0) - goto cleanup; - - if (!blocking) { -- vshPrint(ctl, "%s", active ? -- _("Active Block Commit started") : -- _("Block Commit started")); -+ if (active) -+ vshPrint(ctl, "%s", _("Active Block Commit started")); -+ else -+ vshPrint(ctl, "%s", _("Block Commit started")); -+ - ret = true; - goto cleanup; - } - -- while (blocking) { -- virDomainBlockJobInfo info; -- int result; -+ /* Execution continues here only if --wait or friends were specified */ -+ switch (vshBlockJobWait(bjWait)) { -+ case -1: -+ goto cleanup; - -- pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask); -- result = virDomainGetBlockJobInfo(dom, path, &info, 0); -- pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); -+ case VIR_DOMAIN_BLOCK_JOB_CANCELED: -+ vshPrint(ctl, "\n%s", _("Commit aborted")); -+ goto cleanup; -+ break; - -- if (result < 0) { -- vshError(ctl, _("failed to query job for disk %s"), path); -+ case VIR_DOMAIN_BLOCK_JOB_FAILED: -+ vshPrint(ctl, "\n%s", _("Commit failed")); - goto cleanup; -- } -- if (result == 0) - break; - -- if (verbose) -- vshPrintJobProgress(_("Block Commit"), -- info.end - info.cur, info.end); -- if (active && info.cur == info.end) -+ case VIR_DOMAIN_BLOCK_JOB_READY: -+ case VIR_DOMAIN_BLOCK_JOB_COMPLETED: - break; -+ } -+ -+ if (active) { -+ if (pivot) { -+ abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT; -+ if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -+ vshError(ctl, _("failed to pivot job for disk %s"), path); -+ goto cleanup; -+ } - -- GETTIMEOFDAY(&curr); -- if (intCaught || (timeout && -- (((int)(curr.tv_sec - start.tv_sec) * 1000 + -- (int)(curr.tv_usec - start.tv_usec) / 1000) > -- timeout))) { -- vshDebug(ctl, VSH_ERR_DEBUG, -- intCaught ? "interrupted" : "timeout"); -- intCaught = 0; -- timeout = 0; -- status = VIR_DOMAIN_BLOCK_JOB_CANCELED; -+ vshPrint(ctl, "\n%s", _("Successfully pivoted")); -+ } else if (finish) { - if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -- vshError(ctl, _("failed to abort job for disk %s"), path); -+ vshError(ctl, _("failed to finish job for disk %s"), path); - goto cleanup; - } -- if (abort_flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC) -- break; -+ -+ vshPrint(ctl, "\n%s", _("Commit complete, overlay image kept")); - } else { -- usleep(500 * 1000); -+ vshPrint(ctl, "\n%s", _("Now in synchronized phase")); - } -- } -- -- if (status == VIR_DOMAIN_BLOCK_JOB_CANCELED) -- quit = true; -- -- if (verbose && !quit) { -- /* printf [100 %] */ -- vshPrintJobProgress(_("Block Commit"), 0, 1); -- } -- if (!quit && pivot) { -- abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT; -- if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -- vshError(ctl, _("failed to pivot job for disk %s"), path); -- goto cleanup; -- } -- } else if (finish && !quit && -- virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -- vshError(ctl, _("failed to finish job for disk %s"), path); -- goto cleanup; -- } -- if (quit) -- vshPrint(ctl, "\n%s", _("Commit aborted")); -- else if (pivot) -- vshPrint(ctl, "\n%s", _("Successfully pivoted")); -- else if (!finish && active) -- vshPrint(ctl, "\n%s", _("Now in synchronized phase")); -- else -+ } else { - vshPrint(ctl, "\n%s", _("Commit complete")); -+ } - - ret = true; - cleanup: - virDomainFree(dom); -- if (blocking) -- sigaction(SIGINT, &old_sig_action, NULL); -- if (cb_id >= 0) -- virConnectDomainEventDeregisterAny(ctl->conn, cb_id); -+ vshBlockJobWaitFree(bjWait); - return ret; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCopy.patch b/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCopy.patch deleted file mode 100644 index 34653d5..0000000 --- a/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCopy.patch +++ /dev/null @@ -1,196 +0,0 @@ -From 399e5a89b2445523cd0628d07f5ada156725569e Mon Sep 17 00:00:00 2001 -Message-Id: <399e5a89b2445523cd0628d07f5ada156725569e@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:35 +0200 -Subject: [PATCH] virsh: Refactor block job waiting in cmdBlockCopy - -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 - -Similarly to the refactor of cmdBlockCommit in a previous commit this -does the same change for cmdBlockCopy. - -(cherry picked from commit faa143912381aa48e33839b194b32cc14d574589) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 119 ++++++++++++++------------------------------------- - 1 file changed, 31 insertions(+), 88 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 8c5ef34..a61656f 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -2263,20 +2263,13 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) - bool blocking = vshCommandOptBool(cmd, "wait") || finish || pivot; - bool async = vshCommandOptBool(cmd, "async"); - int timeout = 0; -- struct sigaction sig_action; -- struct sigaction old_sig_action; -- sigset_t sigmask, oldsigmask; -- struct timeval start; -- struct timeval curr; - const char *path = NULL; -- bool quit = false; - int abort_flags = 0; - const char *xml = NULL; - char *xmlstr = NULL; - virTypedParameterPtr params = NULL; -+ vshBlockJobWaitDataPtr bjWait = NULL; - int nparams = 0; -- int status = -1; -- int cb_id = -1; - - if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) - return false; -@@ -2335,33 +2328,14 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) - } - } - -- if (blocking) { -- sigemptyset(&sigmask); -- sigaddset(&sigmask, SIGINT); -- -- intCaught = 0; -- sig_action.sa_sigaction = vshCatchInt; -- sig_action.sa_flags = SA_SIGINFO; -- sigemptyset(&sig_action.sa_mask); -- sigaction(SIGINT, &sig_action, &old_sig_action); -- -- GETTIMEOFDAY(&start); -- } -- -- virConnectDomainEventGenericCallback cb = -- VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); -- -- if ((cb_id = virConnectDomainEventRegisterAny(ctl->conn, -- dom, -- VIR_DOMAIN_EVENT_ID_BLOCK_JOB, -- cb, -- &status, -- NULL)) < 0) -- vshResetLibvirtError(); -- - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) - goto cleanup; - -+ if (blocking && -+ !(bjWait = vshBlockJobWaitInit(ctl, dom, path, _("Block Copy"), verbose, -+ timeout, async))) -+ goto cleanup; -+ - if (xml) { - if (virFileReadAll(xml, VSH_MAX_XML_FILE, &xmlstr) < 0) { - vshReportError(ctl); -@@ -2436,83 +2410,52 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) - goto cleanup; - } - -- while (blocking) { -- virDomainBlockJobInfo info; -- int result; -- -- pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask); -- result = virDomainGetBlockJobInfo(dom, path, &info, 0); -- pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); -- -- if (result < 0) { -- vshError(ctl, _("failed to query job for disk %s"), path); -+ /* Execution continues here only if --wait or friends were specified */ -+ switch (vshBlockJobWait(bjWait)) { -+ case -1: - goto cleanup; -- } - -- if (result == 0) { -- vshError(ctl, _("Block Copy unexpectedly failed")); -+ case VIR_DOMAIN_BLOCK_JOB_CANCELED: -+ vshPrint(ctl, "\n%s", _("Copy aborted")); - goto cleanup; -- } -+ break; - -- if (verbose) -- vshPrintJobProgress(_("Block Copy"), info.end - info.cur, info.end); -- if (info.cur == info.end) -+ case VIR_DOMAIN_BLOCK_JOB_FAILED: -+ vshPrint(ctl, "\n%s", _("Copy failed")); -+ goto cleanup; - break; - -- GETTIMEOFDAY(&curr); -- if (intCaught || (timeout && -- (((int)(curr.tv_sec - start.tv_sec) * 1000 + -- (int)(curr.tv_usec - start.tv_usec) / 1000) > -- timeout))) { -- vshDebug(ctl, VSH_ERR_DEBUG, -- intCaught ? "interrupted" : "timeout"); -- intCaught = 0; -- timeout = 0; -- status = VIR_DOMAIN_BLOCK_JOB_CANCELED; -- if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -- vshError(ctl, _("failed to abort job for disk %s"), path); -- goto cleanup; -- } -- if (abort_flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC) -- break; -- } else { -- usleep(500 * 1000); -- } -+ case VIR_DOMAIN_BLOCK_JOB_READY: -+ case VIR_DOMAIN_BLOCK_JOB_COMPLETED: -+ break; - } - -- if (status == VIR_DOMAIN_BLOCK_JOB_CANCELED) -- quit = true; -- -- if (!quit && pivot) { -+ if (pivot) { - abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT; - if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { - vshError(ctl, _("failed to pivot job for disk %s"), path); - goto cleanup; - } -- } else if (finish && !quit && -- virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -- vshError(ctl, _("failed to finish job for disk %s"), path); -- goto cleanup; -- } -- if (quit) -- vshPrint(ctl, "\n%s", _("Copy aborted")); -- else if (pivot) -+ - vshPrint(ctl, "\n%s", _("Successfully pivoted")); -- else if (finish) -+ } else if (finish) { -+ if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -+ vshError(ctl, _("failed to finish job for disk %s"), path); -+ goto cleanup; -+ } -+ - vshPrint(ctl, "\n%s", _("Successfully copied")); -- else -+ } else { - vshPrint(ctl, "\n%s", _("Now in mirroring phase")); -+ } - - ret = true; -+ - cleanup: - VIR_FREE(xmlstr); - virTypedParamsFree(params, nparams); -- if (dom) -- virDomainFree(dom); -- if (blocking) -- sigaction(SIGINT, &old_sig_action, NULL); -- if (cb_id >= 0) -- virConnectDomainEventDeregisterAny(ctl->conn, cb_id); -+ virDomainFree(dom); -+ vshBlockJobWaitFree(bjWait); - return ret; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockPull.patch b/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockPull.patch deleted file mode 100644 index b8e50f9..0000000 --- a/SOURCES/libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockPull.patch +++ /dev/null @@ -1,421 +0,0 @@ -From 043fdb6ee0ef322f8cf925d8515d0dd5adfe2ca7 Mon Sep 17 00:00:00 2001 -Message-Id: <043fdb6ee0ef322f8cf925d8515d0dd5adfe2ca7@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:33 +0200 -Subject: [PATCH] virsh: Refactor block job waiting in cmdBlockPull - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Introduce helper function that will provide logic for waiting for block -job completion so the 3 open coded places can be unified and improved. - -This patch introduces the whole logic and uses it to fix -cmdBlockJobPull. The vshBlockJobWait function provides common logic for -block job waiting that should be robust enough to work across all -previous versions of libvirt. Since virsh allows passing user-provided -strings as paths of block devices we can't reliably use block job events -for detection of block job states so the function contains a great deal -of fallback logic. - -(cherry picked from commit 2e7827636476fdf976f17cd234b636973dedffc0) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 326 ++++++++++++++++++++++++++++++++++++++------------- - 1 file changed, 244 insertions(+), 82 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 2f6ad46..385eba2 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -53,6 +53,7 @@ - #include "virsh-console.h" - #include "virsh-domain-monitor.h" - #include "virerror.h" -+#include "virtime.h" - #include "virtypedparam.h" - #include "virxml.h" - -@@ -1702,17 +1703,237 @@ static void vshCatchInt(int sig ATTRIBUTE_UNUSED, - intCaught = 1; - } - -+ -+typedef struct _vshBlockJobWaitData vshBlockJobWaitData; -+typedef vshBlockJobWaitData *vshBlockJobWaitDataPtr; -+struct _vshBlockJobWaitData { -+ vshControl *ctl; -+ virDomainPtr dom; -+ const char *dev; -+ const char *job_name; -+ -+ bool verbose; -+ unsigned int timeout; -+ bool async_abort; -+ -+ int cb_id; -+ int cb_id2; -+ int status; -+}; -+ -+ - static void - vshBlockJobStatusHandler(virConnectPtr conn ATTRIBUTE_UNUSED, - virDomainPtr dom ATTRIBUTE_UNUSED, -- const char *disk ATTRIBUTE_UNUSED, -+ const char *disk, - int type ATTRIBUTE_UNUSED, - int status, - void *opaque) - { -- *(int *) opaque = status; -+ vshBlockJobWaitDataPtr data = opaque; -+ -+ if (STREQ_NULLABLE(disk, data->dev)) -+ data->status = status; - } - -+ -+/** -+ * vshBlockJobWaitInit: -+ * @ctl: vsh control structure -+ * @dom: domain object -+ * @dev: block device name to wait for -+ * @job_name: block job name to display in user-facing messages -+ * @verbose: enable progress reporting -+ * @timeout: number of milliseconds to wait before aborting the job -+ * @async_abort: abort the job asynchronously -+ * -+ * Prepares virsh for waiting for completion of a block job. This function -+ * registers event handlers for block job events and prepares the data structures -+ * for them. A call to vshBlockJobWait then waits for completion of the given -+ * block job. This function should be tolerant to different versions of daemon -+ * and the reporting capabilities of those. -+ * -+ * Returns the data structure that holds data needed for block job waiting or -+ * NULL in case of error. -+ */ -+static vshBlockJobWaitDataPtr -+vshBlockJobWaitInit(vshControl *ctl, -+ virDomainPtr dom, -+ const char *dev, -+ const char *job_name, -+ bool verbose, -+ unsigned int timeout, -+ bool async_abort) -+{ -+ vshBlockJobWaitDataPtr ret; -+ -+ if (VIR_ALLOC(ret) < 0) -+ return NULL; -+ -+ ret->ctl = ctl; -+ ret->dom = dom; -+ ret->dev = dev; -+ ret->job_name = job_name; -+ -+ ret->async_abort = async_abort; -+ ret->timeout = timeout; -+ ret->verbose = verbose; -+ -+ ret->status = -1; -+ -+ virConnectDomainEventGenericCallback cb = -+ VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); -+ -+ if ((ret->cb_id = virConnectDomainEventRegisterAny(ctl->conn, dom, -+ VIR_DOMAIN_EVENT_ID_BLOCK_JOB, -+ cb, ret, NULL)) < 0) -+ vshResetLibvirtError(); -+ -+ if ((ret->cb_id2 = virConnectDomainEventRegisterAny(ctl->conn, dom, -+ VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2, -+ cb, ret, NULL)) < 0) -+ vshResetLibvirtError(); -+ -+ return ret; -+} -+ -+ -+static void -+vshBlockJobWaitFree(vshBlockJobWaitDataPtr data) -+{ -+ if (!data) -+ return; -+ -+ if (data->cb_id >= 0) -+ virConnectDomainEventDeregisterAny(data->ctl->conn, data->cb_id); -+ if (data->cb_id2 >= 0) -+ virConnectDomainEventDeregisterAny(data->ctl->conn, data->cb_id2); -+ -+ VIR_FREE(data); -+} -+ -+ -+/** -+ * vshBlockJobWait: -+ * @data: private data initialized by vshBlockJobWaitInit -+ * -+ * Waits for the block job to complete. This function prefers to get an event -+ * from libvirt but still has fallback means if the device name can't be matched -+ * -+ * This function returns values from the virConnectDomainEventBlockJobStatus enum -+ * or -1 in case of a internal error. Fallback states if a block job vanishes -+ * without triggering the event is VIR_DOMAIN_BLOCK_JOB_COMPLETED. For two phase -+ * jobs after the retry count for waiting for the event expires is -+ * VIR_DOMAIN_BLOCK_JOB_READY. -+ */ -+static int -+vshBlockJobWait(vshBlockJobWaitDataPtr data) -+{ -+ /* For two phase jobs like active commit or block copy, the marker reaches -+ * 100% and an event fires. In case where virsh would not be able to match -+ * the event to the given block job we will wait for the number of retries -+ * before claiming that we entered synchronised phase */ -+ unsigned int retries = 5; -+ -+ struct sigaction sig_action; -+ struct sigaction old_sig_action; -+ sigset_t sigmask, oldsigmask; -+ -+ unsigned long long start = 0; -+ unsigned long long curr = 0; -+ -+ unsigned int abort_flags = 0; -+ int ret = -1; -+ virDomainBlockJobInfo info; -+ int result; -+ -+ if (!data) -+ return 0; -+ -+ if (data->async_abort) -+ abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -+ -+ sigemptyset(&sigmask); -+ sigaddset(&sigmask, SIGINT); -+ -+ intCaught = 0; -+ sig_action.sa_sigaction = vshCatchInt; -+ sig_action.sa_flags = SA_SIGINFO; -+ sigemptyset(&sig_action.sa_mask); -+ sigaction(SIGINT, &sig_action, &old_sig_action); -+ -+ if (data->timeout && virTimeMillisNow(&start) < 0) { -+ vshSaveLibvirtError(); -+ return -1; -+ } -+ -+ while (true) { -+ pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask); -+ result = virDomainGetBlockJobInfo(data->dom, data->dev, &info, 0); -+ pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); -+ -+ if (result < 0) { -+ vshError(data->ctl, _("failed to query job for disk %s"), data->dev); -+ goto cleanup; -+ } -+ -+ /* if we've got an event for the device we are waiting for we can end -+ * the waiting loop */ -+ if ((data->cb_id >= 0 || data->cb_id2 >= 0) && data->status != -1) { -+ ret = data->status; -+ goto cleanup; -+ } -+ -+ /* since virsh can't guarantee that the path provided by the user will -+ * later be matched in the event we will need to keep the fallback -+ * approach and claim success if the block job finishes or vanishes. */ -+ if (result == 0) -+ break; -+ -+ /* for two-phase jobs we will try to wait in the synchronized phase -+ * for event arrival since 100% completion doesn't necessarily mean that -+ * the block job has finished and can be terminated with success */ -+ if (info.end == info.cur && --retries == 0) { -+ ret = VIR_DOMAIN_BLOCK_JOB_READY; -+ goto cleanup; -+ } -+ -+ if (data->verbose) -+ vshPrintJobProgress(data->job_name, info.end - info.cur, info.end); -+ -+ if (data->timeout && virTimeMillisNow(&curr) < 0) { -+ vshSaveLibvirtError(); -+ goto cleanup; -+ } -+ -+ if (intCaught || (data->timeout && (curr - start > data->timeout))) { -+ if (virDomainBlockJobAbort(data->dom, data->dev, abort_flags) < 0) { -+ vshError(data->ctl, _("failed to abort job for disk '%s'"), -+ data->dev); -+ goto cleanup; -+ } -+ -+ ret = VIR_DOMAIN_BLOCK_JOB_CANCELED; -+ goto cleanup; -+ } -+ -+ usleep(500 * 1000); -+ } -+ -+ ret = VIR_DOMAIN_BLOCK_JOB_COMPLETED; -+ -+ cleanup: -+ /* print 100% completed */ -+ if (data->verbose && -+ (ret == VIR_DOMAIN_BLOCK_JOB_COMPLETED || -+ ret == VIR_DOMAIN_BLOCK_JOB_READY)) -+ vshPrintJobProgress(data->job_name, 0, 1); -+ -+ sigaction(SIGINT, &old_sig_action, NULL); -+ return ret; -+} -+ -+ - /* - * "blockcommit" command - */ -@@ -2656,19 +2877,11 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - bool verbose = vshCommandOptBool(cmd, "verbose"); - bool async = vshCommandOptBool(cmd, "async"); - int timeout = 0; -- struct sigaction sig_action; -- struct sigaction old_sig_action; -- sigset_t sigmask, oldsigmask; -- struct timeval start; -- struct timeval curr; - const char *path = NULL; - const char *base = NULL; - unsigned long bandwidth = 0; -- bool quit = false; -- int abort_flags = 0; -- int status = -1; -- int cb_id = -1; - unsigned int flags = 0; -+ vshBlockJobWaitDataPtr bjWait = NULL; - - VSH_REQUIRE_OPTION("verbose", "wait"); - VSH_REQUIRE_OPTION("async", "wait"); -@@ -2688,35 +2901,13 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - if (vshCommandOptBool(cmd, "keep-relative")) - flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE; - -- if (async) -- abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -- -- if (blocking) { -- sigemptyset(&sigmask); -- sigaddset(&sigmask, SIGINT); -- -- intCaught = 0; -- sig_action.sa_sigaction = vshCatchInt; -- sig_action.sa_flags = SA_SIGINFO; -- sigemptyset(&sig_action.sa_mask); -- sigaction(SIGINT, &sig_action, &old_sig_action); -- -- GETTIMEOFDAY(&start); -- } -- - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) - return false; - -- virConnectDomainEventGenericCallback cb = -- VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); -- -- if ((cb_id = virConnectDomainEventRegisterAny(ctl->conn, -- dom, -- VIR_DOMAIN_EVENT_ID_BLOCK_JOB, -- cb, -- &status, -- NULL)) < 0) -- vshResetLibvirtError(); -+ if (blocking && -+ !(bjWait = vshBlockJobWaitInit(ctl, dom, path, _("Block Pull"), verbose, -+ timeout, async))) -+ goto cleanup; - - if (base || flags) { - if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0) -@@ -2732,61 +2923,32 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - goto cleanup; - } - -- while (blocking) { -- virDomainBlockJobInfo info; -- int result; -- -- pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask); -- result = virDomainGetBlockJobInfo(dom, path, &info, 0); -- pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); -+ /* Execution continues here only if --wait or friends were specified */ -+ switch (vshBlockJobWait(bjWait)) { -+ case -1: -+ goto cleanup; - -- if (result < 0) { -- vshError(ctl, _("failed to query job for disk %s"), path); -+ case VIR_DOMAIN_BLOCK_JOB_CANCELED: -+ vshPrint(ctl, "\n%s", _("Pull aborted")); - goto cleanup; -- } -- if (result == 0) - break; - -- if (verbose) -- vshPrintJobProgress(_("Block Pull"), info.end - info.cur, info.end); -- -- GETTIMEOFDAY(&curr); -- if (intCaught || (timeout && -- (((int)(curr.tv_sec - start.tv_sec) * 1000 + -- (int)(curr.tv_usec - start.tv_usec) / 1000) > -- timeout))) { -- vshDebug(ctl, VSH_ERR_DEBUG, -- intCaught ? "interrupted" : "timeout"); -- intCaught = 0; -- timeout = 0; -- status = VIR_DOMAIN_BLOCK_JOB_CANCELED; -- if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) { -- vshError(ctl, _("failed to abort job for disk %s"), path); -- goto cleanup; -- } -- if (abort_flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC) -- break; -- } else { -- usleep(500 * 1000); -- } -- } -- -- if (status == VIR_DOMAIN_BLOCK_JOB_CANCELED) -- quit = true; -+ case VIR_DOMAIN_BLOCK_JOB_FAILED: -+ vshPrint(ctl, "\n%s", _("Pull failed")); -+ goto cleanup; -+ break; - -- if (verbose && !quit) { -- /* printf [100 %] */ -- vshPrintJobProgress(_("Block Pull"), 0, 1); -+ case VIR_DOMAIN_BLOCK_JOB_READY: -+ case VIR_DOMAIN_BLOCK_JOB_COMPLETED: -+ vshPrint(ctl, "\n%s", _("Pull complete")); -+ break; - } -- vshPrint(ctl, "\n%s", quit ? _("Pull aborted") : _("Pull complete")); - - ret = true; -+ - cleanup: - virDomainFree(dom); -- if (blocking) -- sigaction(SIGINT, &old_sig_action, NULL); -- if (cb_id >= 0) -- virConnectDomainEventDeregisterAny(ctl->conn, cb_id); -+ vshBlockJobWaitFree(bjWait); - return ret; - } - --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-Report-error-when-explicit-connection-fails.patch b/SOURCES/libvirt-virsh-Report-error-when-explicit-connection-fails.patch new file mode 100644 index 0000000..376a72e --- /dev/null +++ b/SOURCES/libvirt-virsh-Report-error-when-explicit-connection-fails.patch @@ -0,0 +1,107 @@ +From 666a718d25a45051137ef6dfd353607492c58801 Mon Sep 17 00:00:00 2001 +Message-Id: <666a718d25a45051137ef6dfd353607492c58801@dist-git> +From: Martin Kletzander +Date: Tue, 2 Aug 2016 13:37:38 +0200 +Subject: [PATCH] virsh: Report error when explicit connection fails + +Commit 0c56d9431839 forgot to return false in the cmdConnect command +after the clean up made there. + +Before (assuming you don't have uri alias for 'asdf'): + $ virsh connect asdf + error: failed to connect to the hypervisor + + $ echo $? + 0 + +After (with the same assumption): + $ virsh connect asdf + error: failed to connect to the hypervisor + error: no connection driver available for asdf + + $ echo $? + 1 + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1356461 + +Signed-off-by: Martin Kletzander +(cherry picked from commit ff498a9ac70a550bed08233a86e00a4faf12aecf) +Signed-off-by: Martin Kletzander +--- + tools/virsh.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/tools/virsh.c b/tools/virsh.c +index f74698f..d3fe06f 100644 +--- a/tools/virsh.c ++++ b/tools/virsh.c +@@ -210,7 +210,7 @@ virshConnect(vshControl *ctl, const char *uri, bool readonly) + * Reconnect after a disconnect from libvirtd + * + */ +-static void ++static int + virshReconnect(vshControl *ctl, const char *name, bool readonly, bool force) + { + bool connected = false; +@@ -237,6 +237,7 @@ virshReconnect(vshControl *ctl, const char *name, bool readonly, bool force) + vshError(ctl, "%s", _("Failed to reconnect to the hypervisor")); + else + vshError(ctl, "%s", _("failed to connect to the hypervisor")); ++ return -1; + } else { + if (name) { + VIR_FREE(ctl->connname); +@@ -253,6 +254,7 @@ virshReconnect(vshControl *ctl, const char *name, bool readonly, bool force) + priv->useGetInfo = false; + priv->useSnapshotOld = false; + priv->blockJobNoBytes = false; ++ return 0; + } + + int virshStreamSink(virStreamPtr st ATTRIBUTE_UNUSED, +@@ -301,7 +303,8 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd) + if (vshCommandOptStringReq(ctl, cmd, "name", &name) < 0) + return false; + +- virshReconnect(ctl, name, ro, true); ++ if (virshReconnect(ctl, name, ro, true) < 0) ++ return false; + + return true; + } +@@ -333,11 +336,13 @@ virshConnectionHandler(vshControl *ctl) + { + virshControlPtr priv = ctl->privData; + +- if (!priv->conn || disconnected) +- virshReconnect(ctl, NULL, false, false); ++ if ((!priv->conn || disconnected) && ++ virshReconnect(ctl, NULL, false, false) < 0) ++ return NULL; + + if (virshConnectionUsability(ctl, priv->conn)) + return priv->conn; ++ + return NULL; + } + +@@ -444,14 +449,13 @@ virshInit(vshControl *ctl) + return false; + + if (ctl->connname) { +- virshReconnect(ctl, NULL, false, false); + /* Connecting to a named connection must succeed, but we delay + * connecting to the default connection until we need it + * (since the first command might be 'connect' which allows a + * non-default connection, or might be 'help' which needs no + * connection). + */ +- if (!priv->conn) { ++ if (virshReconnect(ctl, NULL, false, false) < 0) { + vshReportError(ctl); + return false; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-virsh-Split-out-block-pull-implementation-from-blockJobImpl.patch b/SOURCES/libvirt-virsh-Split-out-block-pull-implementation-from-blockJobImpl.patch deleted file mode 100644 index 4e0a989..0000000 --- a/SOURCES/libvirt-virsh-Split-out-block-pull-implementation-from-blockJobImpl.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 81156beeff250cc707d09cbdc769d066d24b0671 Mon Sep 17 00:00:00 2001 -Message-Id: <81156beeff250cc707d09cbdc769d066d24b0671@dist-git> -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:27 +0200 -Subject: [PATCH] virsh: Split out block pull implementation from blockJobImpl - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -(cherry picked from commit bb5a145d2d6c8f9d621e0829bf58b8466e9a462f) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 48 ++++++++++++++++++++++++++---------------------- - 1 file changed, 26 insertions(+), 22 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index bd3cb16..aac9bb8 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -1665,7 +1665,6 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd) - } - - typedef enum { -- VSH_CMD_BLOCK_JOB_PULL, - VSH_CMD_BLOCK_JOB_COMMIT, - } vshCmdBlockJobMode; - -@@ -1691,21 +1690,6 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd, - goto cleanup; - - switch (mode) { -- case VSH_CMD_BLOCK_JOB_PULL: -- if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0) -- goto cleanup; -- if (vshCommandOptBool(cmd, "keep-relative")) -- flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE; -- -- if (base || flags) { -- if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0) -- goto cleanup; -- } else { -- if (virDomainBlockPull(dom, path, bandwidth, 0) < 0) -- goto cleanup; -- } -- -- break; - case VSH_CMD_BLOCK_JOB_COMMIT: - if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0 || - vshCommandOptStringReq(ctl, cmd, "top", &top) < 0) -@@ -2679,16 +2663,29 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - struct timeval start; - struct timeval curr; - const char *path = NULL; -+ const char *base = NULL; -+ unsigned long bandwidth = 0; - bool quit = false; - int abort_flags = 0; - int status = -1; - int cb_id = -1; -+ unsigned int flags = 0; -+ -+ if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -+ return false; -+ -+ if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0) -+ return false; -+ -+ if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) -+ return false; -+ -+ if (vshCommandOptBool(cmd, "keep-relative")) -+ flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE; - - if (blocking) { - if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) - return false; -- if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -- return false; - if (vshCommandOptBool(cmd, "async")) - abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; - -@@ -2708,6 +2705,9 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - return false; - } - -+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -+ return false; -+ - virConnectDomainEventGenericCallback cb = - VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler); - -@@ -2719,8 +2719,13 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - NULL)) < 0) - vshResetLibvirtError(); - -- if (!blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_PULL, &dom)) -- goto cleanup; -+ if (base || flags) { -+ if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0) -+ goto cleanup; -+ } else { -+ if (virDomainBlockPull(dom, path, bandwidth, 0) < 0) -+ goto cleanup; -+ } - - if (!blocking) { - vshPrint(ctl, "%s", _("Block Pull started")); -@@ -2778,8 +2783,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) - - ret = true; - cleanup: -- if (dom) -- virDomainFree(dom); -+ virDomainFree(dom); - if (blocking) - sigaction(SIGINT, &old_sig_action, NULL); - if (cb_id >= 0) --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-block-job-separate-abort-from-blockJobImpl.patch b/SOURCES/libvirt-virsh-block-job-separate-abort-from-blockJobImpl.patch deleted file mode 100644 index 3b20d9d..0000000 --- a/SOURCES/libvirt-virsh-block-job-separate-abort-from-blockJobImpl.patch +++ /dev/null @@ -1,92 +0,0 @@ -From b4be4a6368e073c203600bfb538c393c21e0c269 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:26 +0200 -Subject: [PATCH] virsh: block job: separate abort from blockJobImpl - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -(cherry picked from commit a538ff8d9c8fc8ffd301a8f1e3c58e3b2dce8e94) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 34 ++++++++++++++++++++++------------ - 1 file changed, 22 insertions(+), 12 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index fcb3121..bd3cb16 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -1665,7 +1665,6 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd) - } - - typedef enum { -- VSH_CMD_BLOCK_JOB_ABORT, - VSH_CMD_BLOCK_JOB_PULL, - VSH_CMD_BLOCK_JOB_COMMIT, - } vshCmdBlockJobMode; -@@ -1692,14 +1691,6 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd, - goto cleanup; - - switch (mode) { -- case VSH_CMD_BLOCK_JOB_ABORT: -- if (vshCommandOptBool(cmd, "async")) -- flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -- if (vshCommandOptBool(cmd, "pivot")) -- flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT; -- if (virDomainBlockJobAbort(dom, path, flags) < 0) -- goto cleanup; -- break; - case VSH_CMD_BLOCK_JOB_PULL: - if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0) - goto cleanup; -@@ -2550,6 +2541,26 @@ vshBlockJobSetSpeed(vshControl *ctl, - - - static bool -+vshBlockJobAbort(virDomainPtr dom, -+ const char *path, -+ bool pivot, -+ bool async) -+{ -+ unsigned int flags = 0; -+ -+ if (async) -+ flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; -+ if (pivot) -+ flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT; -+ -+ if (virDomainBlockJobAbort(dom, path, flags) < 0) -+ return false; -+ -+ return true; -+} -+ -+ -+static bool - cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - { - bool ret = false; -@@ -2579,9 +2590,6 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - /* XXX also support --bytes with bandwidth mode */ - VSH_EXCLUSIVE_OPTIONS_VAR(bytes, bandwidth); - -- if (abortMode || pivot || async) -- return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL); -- - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) - goto cleanup; - -@@ -2591,6 +2599,8 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - - if (bandwidth) - ret = vshBlockJobSetSpeed(ctl, cmd, dom, path); -+ else if (abortMode || pivot || async) -+ ret = vshBlockJobAbort(dom, path, pivot, async); - else - ret = vshBlockJobInfo(ctl, dom, path, raw, bytes); - --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-blockjob-Extract-block-job-info-code-into-a-separate-function.patch b/SOURCES/libvirt-virsh-blockjob-Extract-block-job-info-code-into-a-separate-function.patch deleted file mode 100644 index a8aa00c..0000000 --- a/SOURCES/libvirt-virsh-blockjob-Extract-block-job-info-code-into-a-separate-function.patch +++ /dev/null @@ -1,139 +0,0 @@ -From a03fb4691c3df18caff2b2f4d8296dd9cec16c0c Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:23 +0200 -Subject: [PATCH] virsh: blockjob: Extract block job info code into a separate - function - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -cmdBlockJob will be converted to a hub that will call into the -individual executor functions. - -(cherry picked from commit dda95b531f1d2e9abd4df03c0461eaa7e3840b02) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 93 +++++++++++++++++++++++++++++++--------------------- - 1 file changed, 56 insertions(+), 37 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index f7edeeb..7a18204 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -2451,47 +2451,19 @@ vshDomainBlockJobToString(int type) - return str ? _(str) : _("Unknown job"); - } - -+ - static bool --cmdBlockJob(vshControl *ctl, const vshCmd *cmd) -+vshBlockJobInfo(vshControl *ctl, -+ virDomainPtr dom, -+ const char *path, -+ bool raw, -+ bool bytes) - { - virDomainBlockJobInfo info; -- bool ret = false; -- int rc = -1; -- bool raw = vshCommandOptBool(cmd, "raw"); -- bool bytes = vshCommandOptBool(cmd, "bytes"); -- bool abortMode = (vshCommandOptBool(cmd, "abort") || -- vshCommandOptBool(cmd, "async") || -- vshCommandOptBool(cmd, "pivot")); -- bool infoMode = vshCommandOptBool(cmd, "info") || raw; -- bool bandwidth = vshCommandOptBool(cmd, "bandwidth"); -- virDomainPtr dom = NULL; -- const char *path; -- unsigned int flags = 0; - unsigned long long speed; -- -- if (abortMode + infoMode + bandwidth > 1) { -- vshError(ctl, "%s", -- _("conflict between abort, info, and bandwidth modes")); -- return false; -- } -- /* XXX also support --bytes with bandwidth mode */ -- if (bytes && (abortMode || bandwidth)) { -- vshError(ctl, "%s", _("--bytes requires info mode")); -- return false; -- } -- -- if (abortMode) -- return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL); -- if (bandwidth) -- return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL); -- -- /* Everything below here is for --info mode */ -- if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -- goto cleanup; -- -- /* XXX Allow path to be optional to list info on all devices at once */ -- if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -- goto cleanup; -+ unsigned int flags = 0; -+ bool ret = false; -+ int rc = -1; - - /* If bytes were requested, or if raw mode is not forcing a MiB/s - * query and cache can't prove failure, then query bytes/sec. */ -@@ -2556,7 +2528,54 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - } - vshPrint(ctl, "\n"); - } -+ - ret = true; -+ -+ cleanup: -+ return ret; -+} -+ -+ -+static bool -+cmdBlockJob(vshControl *ctl, const vshCmd *cmd) -+{ -+ bool ret = false; -+ bool raw = vshCommandOptBool(cmd, "raw"); -+ bool bytes = vshCommandOptBool(cmd, "bytes"); -+ bool abortMode = (vshCommandOptBool(cmd, "abort") || -+ vshCommandOptBool(cmd, "async") || -+ vshCommandOptBool(cmd, "pivot")); -+ bool infoMode = vshCommandOptBool(cmd, "info") || raw; -+ bool bandwidth = vshCommandOptBool(cmd, "bandwidth"); -+ virDomainPtr dom = NULL; -+ const char *path; -+ -+ if (abortMode + infoMode + bandwidth > 1) { -+ vshError(ctl, "%s", -+ _("conflict between abort, info, and bandwidth modes")); -+ return false; -+ } -+ /* XXX also support --bytes with bandwidth mode */ -+ if (bytes && (abortMode || bandwidth)) { -+ vshError(ctl, "%s", _("--bytes requires info mode")); -+ return false; -+ } -+ -+ if (abortMode) -+ return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL); -+ if (bandwidth) -+ return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL); -+ -+ /* Everything below here is for --info mode */ -+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) -+ goto cleanup; -+ -+ /* XXX Allow path to be optional to list info on all devices at once */ -+ if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) -+ goto cleanup; -+ -+ ret = vshBlockJobInfo(ctl, dom, path, raw, bytes); -+ - cleanup: - if (dom) - virDomainFree(dom); --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-blockjob-Split-out-vshBlockJobSetSpeed-from-blockJobImpl.patch b/SOURCES/libvirt-virsh-blockjob-Split-out-vshBlockJobSetSpeed-from-blockJobImpl.patch deleted file mode 100644 index afeadf1..0000000 --- a/SOURCES/libvirt-virsh-blockjob-Split-out-vshBlockJobSetSpeed-from-blockJobImpl.patch +++ /dev/null @@ -1,91 +0,0 @@ -From d810a5a1890c7e0593fe914a4e5252963c758b69 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:25 +0200 -Subject: [PATCH] virsh: blockjob: Split out vshBlockJobSetSpeed from - blockJobImpl - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -(cherry picked from commit 42c9c6fcfcff88b6a8cc1261db46fb90e0fe7264) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 31 ++++++++++++++++++++++--------- - 1 file changed, 22 insertions(+), 9 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 9a7cb84..fcb3121 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -1666,7 +1666,6 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd) - - typedef enum { - VSH_CMD_BLOCK_JOB_ABORT, -- VSH_CMD_BLOCK_JOB_SPEED, - VSH_CMD_BLOCK_JOB_PULL, - VSH_CMD_BLOCK_JOB_COMMIT, - } vshCmdBlockJobMode; -@@ -1701,10 +1700,6 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd, - if (virDomainBlockJobAbort(dom, path, flags) < 0) - goto cleanup; - break; -- case VSH_CMD_BLOCK_JOB_SPEED: -- if (virDomainBlockJobSetSpeed(dom, path, bandwidth, 0) < 0) -- goto cleanup; -- break; - case VSH_CMD_BLOCK_JOB_PULL: - if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0) - goto cleanup; -@@ -2537,6 +2532,24 @@ vshBlockJobInfo(vshControl *ctl, - - - static bool -+vshBlockJobSetSpeed(vshControl *ctl, -+ const vshCmd *cmd, -+ virDomainPtr dom, -+ const char *path) -+{ -+ unsigned long bandwidth; -+ -+ if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) -+ return false; -+ -+ if (virDomainBlockJobSetSpeed(dom, path, bandwidth, 0) < 0) -+ return false; -+ -+ return true; -+} -+ -+ -+static bool - cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - { - bool ret = false; -@@ -2568,10 +2581,7 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - - if (abortMode || pivot || async) - return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL); -- if (bandwidth) -- return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL); - -- /* Everything below here is for --info mode */ - if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) - goto cleanup; - -@@ -2579,7 +2589,10 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) - goto cleanup; - -- ret = vshBlockJobInfo(ctl, dom, path, raw, bytes); -+ if (bandwidth) -+ ret = vshBlockJobSetSpeed(ctl, cmd, dom, path); -+ else -+ ret = vshBlockJobInfo(ctl, dom, path, raw, bytes); - - cleanup: - if (dom) --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-cmdBlockJob-Switch-to-declarative-flag-interlocking.patch b/SOURCES/libvirt-virsh-cmdBlockJob-Switch-to-declarative-flag-interlocking.patch deleted file mode 100644 index 661e44f..0000000 --- a/SOURCES/libvirt-virsh-cmdBlockJob-Switch-to-declarative-flag-interlocking.patch +++ /dev/null @@ -1,73 +0,0 @@ -From ebf10bb20ed32487ff69411967084050fe825322 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Peter Krempa -Date: Tue, 21 Jul 2015 16:18:24 +0200 -Subject: [PATCH] virsh: cmdBlockJob: Switch to declarative flag interlocking - -https://bugzilla.redhat.com/show_bug.cgi?id=1227551 -https://bugzilla.redhat.com/show_bug.cgi?id=1197592 - -Use the VSH_EXCLUSIVE_OPTIONS_VAR to interlock incompatible options. -Since a variable named 'abort' would conflict with older compilers use -VSH_EXCLUSIVE_OPTIONS for the --abort option. - -(cherry picked from commit 2f12cb93557744e3d0fad9b40cffaaba7ce22ba7) - -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 33 +++++++++++++++++++-------------- - 1 file changed, 19 insertions(+), 14 deletions(-) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 7a18204..9a7cb84 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -2542,26 +2542,31 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd) - bool ret = false; - bool raw = vshCommandOptBool(cmd, "raw"); - bool bytes = vshCommandOptBool(cmd, "bytes"); -- bool abortMode = (vshCommandOptBool(cmd, "abort") || -- vshCommandOptBool(cmd, "async") || -- vshCommandOptBool(cmd, "pivot")); -- bool infoMode = vshCommandOptBool(cmd, "info") || raw; -+ bool abortMode = vshCommandOptBool(cmd, "abort"); -+ bool pivot = vshCommandOptBool(cmd, "pivot"); -+ bool async = vshCommandOptBool(cmd, "async"); -+ bool info = vshCommandOptBool(cmd, "info"); - bool bandwidth = vshCommandOptBool(cmd, "bandwidth"); - virDomainPtr dom = NULL; - const char *path; - -- if (abortMode + infoMode + bandwidth > 1) { -- vshError(ctl, "%s", -- _("conflict between abort, info, and bandwidth modes")); -- return false; -- } -+ VSH_EXCLUSIVE_OPTIONS("raw", "abort"); -+ VSH_EXCLUSIVE_OPTIONS_VAR(raw, pivot); -+ VSH_EXCLUSIVE_OPTIONS_VAR(raw, async); -+ VSH_EXCLUSIVE_OPTIONS_VAR(raw, bandwidth); -+ -+ VSH_EXCLUSIVE_OPTIONS("info", "abort"); -+ VSH_EXCLUSIVE_OPTIONS_VAR(info, pivot); -+ VSH_EXCLUSIVE_OPTIONS_VAR(info, async); -+ VSH_EXCLUSIVE_OPTIONS_VAR(info, bandwidth); -+ -+ VSH_EXCLUSIVE_OPTIONS("bytes", "abort"); -+ VSH_EXCLUSIVE_OPTIONS_VAR(bytes, pivot); -+ VSH_EXCLUSIVE_OPTIONS_VAR(bytes, async); - /* XXX also support --bytes with bandwidth mode */ -- if (bytes && (abortMode || bandwidth)) { -- vshError(ctl, "%s", _("--bytes requires info mode")); -- return false; -- } -+ VSH_EXCLUSIVE_OPTIONS_VAR(bytes, bandwidth); - -- if (abortMode) -+ if (abortMode || pivot || async) - return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL); - if (bandwidth) - return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL); --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-report-error-if-vcpu-number-exceed-the-guest-maxvcpu-number.patch b/SOURCES/libvirt-virsh-report-error-if-vcpu-number-exceed-the-guest-maxvcpu-number.patch deleted file mode 100644 index 166fe79..0000000 --- a/SOURCES/libvirt-virsh-report-error-if-vcpu-number-exceed-the-guest-maxvcpu-number.patch +++ /dev/null @@ -1,67 +0,0 @@ -From ad9d07ce91c6c9aa2a40f744f5b0064da69e0871 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Luyao Huang -Date: Thu, 16 Jul 2015 13:45:51 +0200 -Subject: [PATCH] virsh: report error if vcpu number exceed the guest maxvcpu - number - -Commit id '81dd81e' caused a regression when attempting to print a -specific vcpuid that is out of the range of the maximum vcpus for -the guest, such as: - - $ virsh vcpupin $dom 1000 - VCPU: CPU Affinity - ---------------------------------- - - $ - -Rather than just recover the old message, let's adjust the message based -on what would be displayed for a similar failure in the set path, such as: - - $ virsh vcpupin $dom 1000 - error: vcpu 1000 is out of range of persistent cpu count 2 - - $ virsh vcpupin $dom 1000 --live - error: vcpu 1000 is out of range of live cpu count 2 - - $ - -Signed-off-by: Luyao Huang -(cherry picked from commit 848ab685f74afae102e265108518095942ecb293) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1160559 - -Signed-off-by: Pavel Hrdina -Signed-off-by: Jiri Denemark ---- - tools/virsh-domain.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c -index 27d62e9..ac04ded 100644 ---- a/tools/virsh-domain.c -+++ b/tools/virsh-domain.c -@@ -6497,6 +6497,20 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd) - goto cleanup; - } - -+ if (got_vcpu && vcpu >= ncpus) { -+ if (flags & VIR_DOMAIN_AFFECT_LIVE || -+ (flags & VIR_DOMAIN_AFFECT_CURRENT && -+ virDomainIsActive(dom) == 1)) -+ vshError(ctl, -+ _("vcpu %d is out of range of live cpu count %d"), -+ vcpu, ncpus); -+ else -+ vshError(ctl, -+ _("vcpu %d is out of range of persistent cpu count %d"), -+ vcpu, ncpus); -+ goto cleanup; -+ } -+ - cpumaplen = VIR_CPU_MAPLEN(maxcpu); - cpumap = vshMalloc(ctl, ncpus * cpumaplen); - if ((ncpus = virDomainGetVcpuPinInfo(dom, ncpus, cpumap, --- -2.5.0 - diff --git a/SOURCES/libvirt-virsh-vcpuinfo-Report-vcpu-number-from-the-structure-rather-than-it-s-position.patch b/SOURCES/libvirt-virsh-vcpuinfo-Report-vcpu-number-from-the-structure-rather-than-it-s-position.patch new file mode 100644 index 0000000..dbc601e --- /dev/null +++ b/SOURCES/libvirt-virsh-vcpuinfo-Report-vcpu-number-from-the-structure-rather-than-it-s-position.patch @@ -0,0 +1,44 @@ +From 883b1800bf6c648abc0287c31421ce75342bb51c Mon Sep 17 00:00:00 2001 +Message-Id: <883b1800bf6c648abc0287c31421ce75342bb51c@dist-git> +From: Peter Krempa +Date: Fri, 26 Aug 2016 15:45:23 -0400 +Subject: [PATCH] virsh: vcpuinfo: Report vcpu number from the structure rather + than it's position + +https://bugzilla.redhat.com/show_bug.cgi?id=1097930 +https://bugzilla.redhat.com/show_bug.cgi?id=1224341 + +virVcpuInfo contains the vcpu number that the data refers to. Report +what's returned by the daemon rather than the sequence number as with +sparse vcpu topologies they won't match. + +(cherry picked from commit 64f26276bfb2c4c01a3fc007e5449c9ca3d93de2) +--- + tools/virsh-domain.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c +index dbdee5b..c820f60 100644 +--- a/tools/virsh-domain.c ++++ b/tools/virsh-domain.c +@@ -6315,8 +6315,8 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd) + } + + for (n = 0; n < ncpus; n++) { +- vshPrint(ctl, "%-15s %d\n", _("VCPU:"), n); + if (cpuinfo) { ++ vshPrint(ctl, "%-15s %d\n", _("VCPU:"), cpuinfo[n].number); + vshPrint(ctl, "%-15s %d\n", _("CPU:"), cpuinfo[n].cpu); + vshPrint(ctl, "%-15s %s\n", _("State:"), + virshDomainVcpuStateToString(cpuinfo[n].state)); +@@ -6328,6 +6328,7 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd) + vshPrint(ctl, "%-15s %.1lfs\n", _("CPU time:"), cpuUsed); + } + } else { ++ vshPrint(ctl, "%-15s %d\n", _("VCPU:"), n); + vshPrint(ctl, "%-15s %s\n", _("CPU:"), _("N/A")); + vshPrint(ctl, "%-15s %s\n", _("State:"), _("N/A")); + vshPrint(ctl, "%-15s %s\n", _("CPU time"), _("N/A")); +-- +2.10.0 + diff --git a/SOURCES/libvirt-virstoragefile-refactor-virStorageFileMatchesNNN-methods.patch b/SOURCES/libvirt-virstoragefile-refactor-virStorageFileMatchesNNN-methods.patch new file mode 100644 index 0000000..b4878c3 --- /dev/null +++ b/SOURCES/libvirt-virstoragefile-refactor-virStorageFileMatchesNNN-methods.patch @@ -0,0 +1,160 @@ +From 2551cd750a1c135dba6a00e55694b4995f62af65 Mon Sep 17 00:00:00 2001 +Message-Id: <2551cd750a1c135dba6a00e55694b4995f62af65@dist-git> +From: "Daniel P. Berrange" +Date: Thu, 28 Jul 2016 15:25:57 -0400 +Subject: [PATCH] virstoragefile: refactor virStorageFileMatchesNNN methods + +https://bugzilla.redhat.com/show_bug.cgi?id=1301021 + +Refactor the virStorageFileMatchesNNN methods so that +they don't take a struct FileFormatInfo parameter, but +instead get the actual raw dat items they needs. This +will facilitate reuse in other contexts. + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit 970f42ab42b6dee68917f3492f9378035c5505c0) +Signed-off-by: John Ferlan +--- + src/util/virstoragefile.c | 61 +++++++++++++++++++++++++++-------------------- + 1 file changed, 35 insertions(+), 26 deletions(-) + +diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c +index 16de603..7dace8a 100644 +--- a/src/util/virstoragefile.c ++++ b/src/util/virstoragefile.c +@@ -598,13 +598,12 @@ qedGetBackingStore(char **res, + + + static bool +-virStorageFileMatchesMagic(int format, ++virStorageFileMatchesMagic(int magicOffset, ++ const char *magic, + char *buf, + size_t buflen) + { + int mlen; +- int magicOffset = fileTypeInfo[format].magicOffset; +- const char *magic = fileTypeInfo[format].magic; + + if (magic == NULL) + return false; +@@ -622,13 +621,13 @@ virStorageFileMatchesMagic(int format, + + + static bool +-virStorageFileMatchesExtension(int format, ++virStorageFileMatchesExtension(const char *extension, + const char *path) + { +- if (fileTypeInfo[format].extension == NULL) ++ if (extension == NULL) + return false; + +- if (virFileHasSuffix(path, fileTypeInfo[format].extension)) ++ if (virFileHasSuffix(path, extension)) + return true; + + return false; +@@ -636,7 +635,10 @@ virStorageFileMatchesExtension(int format, + + + static bool +-virStorageFileMatchesVersion(int format, ++virStorageFileMatchesVersion(int versionOffset, ++ int versionSize, ++ const int *versionNumbers, ++ int endian, + char *buf, + size_t buflen) + { +@@ -644,44 +646,42 @@ virStorageFileMatchesVersion(int format, + size_t i; + + /* Validate version number info */ +- if (fileTypeInfo[format].versionOffset == -1) ++ if (versionOffset == -1) + return false; + + /* -2 == non-versioned file format, so trivially match */ +- if (fileTypeInfo[format].versionOffset == -2) ++ if (versionOffset == -2) + return true; + + /* A positive versionOffset, requires using a valid versionSize */ +- if (fileTypeInfo[format].versionSize != 2 && +- fileTypeInfo[format].versionSize != 4) ++ if (versionSize != 2 && versionSize != 4) + return false; + +- if ((fileTypeInfo[format].versionOffset + +- fileTypeInfo[format].versionSize) > buflen) ++ if ((versionOffset + versionSize) > buflen) + return false; + +- if (fileTypeInfo[format].endian == LV_LITTLE_ENDIAN) { +- if (fileTypeInfo[format].versionSize == 4) ++ if (endian == LV_LITTLE_ENDIAN) { ++ if (versionSize == 4) + version = virReadBufInt32LE(buf + +- fileTypeInfo[format].versionOffset); ++ versionOffset); + else + version = virReadBufInt16LE(buf + +- fileTypeInfo[format].versionOffset); ++ versionOffset); + } else { +- if (fileTypeInfo[format].versionSize == 4) ++ if (versionSize == 4) + version = virReadBufInt32BE(buf + +- fileTypeInfo[format].versionOffset); ++ versionOffset); + else + version = virReadBufInt16BE(buf + +- fileTypeInfo[format].versionOffset); ++ versionOffset); + } + + for (i = 0; +- i < FILE_TYPE_VERSIONS_LAST && fileTypeInfo[format].versionNumbers[i]; ++ i < FILE_TYPE_VERSIONS_LAST && versionNumbers[i]; + i++) { + VIR_DEBUG("Compare detected version %d vs one of the expected versions %d", +- version, fileTypeInfo[format].versionNumbers[i]); +- if (version == fileTypeInfo[format].versionNumbers[i]) ++ version, versionNumbers[i]); ++ if (version == versionNumbers[i]) + return true; + } + +@@ -734,8 +734,16 @@ virStorageFileProbeFormatFromBuf(const char *path, + + /* First check file magic */ + for (i = 0; i < VIR_STORAGE_FILE_LAST; i++) { +- if (virStorageFileMatchesMagic(i, buf, buflen)) { +- if (!virStorageFileMatchesVersion(i, buf, buflen)) { ++ if (virStorageFileMatchesMagic( ++ fileTypeInfo[i].magicOffset, ++ fileTypeInfo[i].magic, ++ buf, buflen)) { ++ if (!virStorageFileMatchesVersion( ++ fileTypeInfo[i].versionOffset, ++ fileTypeInfo[i].versionSize, ++ fileTypeInfo[i].versionNumbers, ++ fileTypeInfo[i].endian, ++ buf, buflen)) { + possibleFormat = i; + continue; + } +@@ -751,7 +759,8 @@ virStorageFileProbeFormatFromBuf(const char *path, + + /* No magic, so check file extension */ + for (i = 0; i < VIR_STORAGE_FILE_LAST; i++) { +- if (virStorageFileMatchesExtension(i, path)) { ++ if (virStorageFileMatchesExtension( ++ fileTypeInfo[i].extension, path)) { + format = i; + goto cleanup; + } +-- +2.9.2 + diff --git a/SOURCES/libvirt-virt-admin-Fix-the-error-when-an-invalid-URI-has-been-provided.patch b/SOURCES/libvirt-virt-admin-Fix-the-error-when-an-invalid-URI-has-been-provided.patch new file mode 100644 index 0000000..375be0b --- /dev/null +++ b/SOURCES/libvirt-virt-admin-Fix-the-error-when-an-invalid-URI-has-been-provided.patch @@ -0,0 +1,43 @@ +From 86fe847f4d6e06c926e98b108063685bdbf332ee Mon Sep 17 00:00:00 2001 +Message-Id: <86fe847f4d6e06c926e98b108063685bdbf332ee@dist-git> +From: Erik Skultety +Date: Wed, 10 Aug 2016 15:33:12 +0200 +Subject: [PATCH] virt-admin: Fix the error when an invalid URI has been + provided + +After commit 9d479dd1 fiddled with the cmdConnect's output which used to be a +bit more verbose prior to the mentioned commit, the program flow would result +in a quite confusing error if an invalid URI has been provided: + + error: Failed to connect to the admin server + Connected to the admin server + error: + +The problem is that the commit mentioned above relied on the fact that +connect routine always succeeds which is not true. + +Signed-off-by: Erik Skultety +(cherry picked from commit 4914494eb8e25ff7938a12fd089c746ec6042bbb) + +https://bugzilla.redhat.com/show_bug.cgi?id=1365903 +Signed-off-by: Erik Skultety +--- + tools/virt-admin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/virt-admin.c b/tools/virt-admin.c +index 2ae05da..513054b 100644 +--- a/tools/virt-admin.c ++++ b/tools/virt-admin.c +@@ -351,7 +351,7 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd) + } + + vshAdmReconnect(ctl); +- if (!connected) ++ if (!connected && priv->conn) + vshPrint(ctl, "%s\n", _("Connected to the admin server")); + + return !!priv->conn; +-- +2.9.2 + diff --git a/SOURCES/libvirt-virt-admin-Output-srv-threadpool-info-data-as-unsigned-int-rather-than-signed.patch b/SOURCES/libvirt-virt-admin-Output-srv-threadpool-info-data-as-unsigned-int-rather-than-signed.patch new file mode 100644 index 0000000..66a35c4 --- /dev/null +++ b/SOURCES/libvirt-virt-admin-Output-srv-threadpool-info-data-as-unsigned-int-rather-than-signed.patch @@ -0,0 +1,39 @@ +From 6aa6dc215b2f7edbd77a302ead90b85ae481d253 Mon Sep 17 00:00:00 2001 +Message-Id: <6aa6dc215b2f7edbd77a302ead90b85ae481d253@dist-git> +From: Erik Skultety +Date: Mon, 1 Aug 2016 16:40:53 +0200 +Subject: [PATCH] virt-admin: Output srv-threadpool-info data as unsigned int + rather than signed + +Internally, all the data are represented as unsigned int, it is also documented +in the header file that users should use our exported constants that also +indicate that the data should be unsigned int. However, when polling for the +current server threadpool's configuration, virt-admin uses an incorrect +formatting parameter '%d' for printf. Instead, virt-admin should use formatting +parameter '%u'. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1356769 + +Signed-off-by: Erik Skultety +(cherry picked from commit a8962f705d5b7973e322b81c38e46eb542cb1ad4) +Signed-off-by: Erik Skultety +--- + tools/virt-admin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/virt-admin.c b/tools/virt-admin.c +index c4ee8f5..a59c4c7 100644 +--- a/tools/virt-admin.c ++++ b/tools/virt-admin.c +@@ -458,7 +458,7 @@ cmdSrvThreadpoolInfo(vshControl *ctl, const vshCmd *cmd) + } + + for (i = 0; i < nparams; i++) +- vshPrint(ctl, "%-15s: %d\n", params[i].field, params[i].value.ui); ++ vshPrint(ctl, "%-15s: %u\n", params[i].field, params[i].value.ui); + + ret = true; + +-- +2.9.2 + diff --git a/SOURCES/libvirt-virt-admin-Properly-fix-the-default-session-daemon-URI-to-admin-server.patch b/SOURCES/libvirt-virt-admin-Properly-fix-the-default-session-daemon-URI-to-admin-server.patch new file mode 100644 index 0000000..959f6d6 --- /dev/null +++ b/SOURCES/libvirt-virt-admin-Properly-fix-the-default-session-daemon-URI-to-admin-server.patch @@ -0,0 +1,65 @@ +From d1cca162368a3ff8600568405acb3326a372330f Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Tue, 16 Aug 2016 13:06:04 +0200 +Subject: [PATCH] virt-admin: Properly fix the default session daemon URI to + admin server + +Commit 30ce2f0e tried to fix the issue with an incorrect session URI to admin +server but it messed up the checks: + + if (geteuid == 0 && VIR_STRDUP(*uristr, "libvirtd:///system") < 0) + return -1; + else if (VIR_STRDUP(*uristr, "libvirtd:///session") < 0) + return -1; + +So if a client executed with root privileges tries to connect, its euid is +checked (true) and the correct URI is successfully copied to @uristr (false), +therefore the 'else' branch is taken and @uristr is replaced by the session URI +which for root results in: + Failed to connect socket to '/root/.cache/libvirt/libvirt-admin-sock': + No such file or directory + +Signed-off-by: Erik Skultety +(cherry picked from commit 9e5e7f3a5b7a9a7325ad4ac719abd469cd7f8a45) + +https://bugzilla.redhat.com/show_bug.cgi?id=1367269 +https://bugzilla.redhat.com/show_bug.cgi?id=1356858 +Signed-off-by: Erik Skultety + + Conflicts: + src/libvirt-admin.c - these were caused by not backporting 30ce2f0e, + since that one was obviously an incorrect fix that needed an additional + fix, so why not just backport the additional fix and resolve a tiny + conflict... +--- + src/libvirt-admin.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c +index f3bbe8c..b3de337 100644 +--- a/src/libvirt-admin.c ++++ b/src/libvirt-admin.c +@@ -188,10 +188,16 @@ virAdmGetDefaultURI(virConfPtr conf, char **uristr) + /* Since we can't probe connecting via any hypervisor driver as libvirt + * does, if no explicit URI was given and neither the environment + * variable, nor the configuration parameter had previously been set, +- * we set the default admin server URI to 'libvirtd://system'. ++ * we set the default admin server URI to 'libvirtd://system' or ++ * 'libvirtd:///session' depending on the process's EUID. + */ +- if (VIR_STRDUP(*uristr, "libvirtd:///system") < 0) +- return -1; ++ if (geteuid() == 0) { ++ if (VIR_STRDUP(*uristr, "libvirtd:///system") < 0) ++ return -1; ++ } else { ++ if (VIR_STRDUP(*uristr, "libvirtd:///session") < 0) ++ return -1; ++ } + } + } + +-- +2.9.2 + diff --git a/SOURCES/libvirt-virtlogd-Don-t-stop-or-restart-along-with-libvirtd.patch b/SOURCES/libvirt-virtlogd-Don-t-stop-or-restart-along-with-libvirtd.patch new file mode 100644 index 0000000..803a519 --- /dev/null +++ b/SOURCES/libvirt-virtlogd-Don-t-stop-or-restart-along-with-libvirtd.patch @@ -0,0 +1,52 @@ +From 373101d52e752c469d2472e860fd45d826a5e333 Mon Sep 17 00:00:00 2001 +Message-Id: <373101d52e752c469d2472e860fd45d826a5e333@dist-git> +From: Andrea Bolognani +Date: Tue, 20 Sep 2016 16:23:07 +0200 +Subject: [PATCH] virtlogd: Don't stop or restart along with libvirtd + +Commit 839a060 tied the lifecycle of virtlogd more +closely to that of libvirtd. Unfortunately, while starting +virtlogd when libvirtd is started is definitely a good idea, +restarting virtlogd or shutting it down at any time outside +of system poweroff is not. + +Revert part of that commit by removing the PartOf= lines, +meaning that only startup requests will be propagated from +libvirtd to virtlogd. + +Resolves: https://bugzilla.redhat.com/1372576 + +(cherry picked from commit f496ce1df35df7498bd3d9d7e113bb2eb3e51ba9) +Signed-off-by: Andrea Bolognani +--- + src/logging/virtlogd.service.in | 1 - + src/logging/virtlogd.socket.in | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in +index 8287994..09e0740 100644 +--- a/src/logging/virtlogd.service.in ++++ b/src/logging/virtlogd.service.in +@@ -2,7 +2,6 @@ + Description=Virtual machine log manager + Requires=virtlogd.socket + Before=libvirtd.service +-PartOf=libvirtd.service + Documentation=man:virtlogd(8) + Documentation=http://libvirt.org + +diff --git a/src/logging/virtlogd.socket.in b/src/logging/virtlogd.socket.in +index efb6504..22b9360 100644 +--- a/src/logging/virtlogd.socket.in ++++ b/src/logging/virtlogd.socket.in +@@ -1,7 +1,6 @@ + [Unit] + Description=Virtual machine log manager socket + Before=libvirtd.service +-PartOf=libvirtd.service + + [Socket] + ListenStream=@localstatedir@/run/libvirt/virtlogd-sock +-- +2.10.0 + diff --git a/SOURCES/libvirt-virtlogd-increase-max-file-size-to-2-MB.patch b/SOURCES/libvirt-virtlogd-increase-max-file-size-to-2-MB.patch new file mode 100644 index 0000000..4dcb79e --- /dev/null +++ b/SOURCES/libvirt-virtlogd-increase-max-file-size-to-2-MB.patch @@ -0,0 +1,52 @@ +From 73594ea04ef629c599eaddaeedbce3afded60e01 Mon Sep 17 00:00:00 2001 +Message-Id: <73594ea04ef629c599eaddaeedbce3afded60e01@dist-git> +From: "Daniel P. Berrange" +Date: Fri, 8 Jul 2016 09:57:58 +0200 +Subject: [PATCH] virtlogd: increase max file size to 2 MB + +https://bugzilla.redhat.com/show_bug.cgi?id=1351209 + +People debugging guest OS boot processes and reported that +the default 128 KB size is too small to capture an entire +boot up sequence. Increase the default size to 2 MB which +should allow capturing a full boot up even with verbose +debugging. + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit 8f390596beeba94b691687a4fe3697ebf08858c7) +--- + src/logging/log_daemon_config.c | 2 +- + src/logging/virtlogd.conf | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/logging/log_daemon_config.c b/src/logging/log_daemon_config.c +index b584970..7bf10c6 100644 +--- a/src/logging/log_daemon_config.c ++++ b/src/logging/log_daemon_config.c +@@ -128,7 +128,7 @@ virLogDaemonConfigNew(bool privileged ATTRIBUTE_UNUSED) + return NULL; + + data->max_clients = 1024; +- data->max_size = 128 * 1024; ++ data->max_size = 1024 * 1024 * 2; + data->max_backups = 3; + + return data; +diff --git a/src/logging/virtlogd.conf b/src/logging/virtlogd.conf +index fbd92ff..7ef1ac3 100644 +--- a/src/logging/virtlogd.conf ++++ b/src/logging/virtlogd.conf +@@ -59,8 +59,8 @@ + #max_clients = 1024 + + +-# Maximum file size before rolling over. Defaults to 128 KB +-#max_size = 131072 ++# Maximum file size before rolling over. Defaults to 2 MB ++#max_size = 2097152 + + # Maximum number of backup files to keep. Defaults to 3, + # not including the primary active file +-- +2.9.0 + diff --git a/SOURCES/libvirt-virtlogd-make-max-file-size-number-of-backups-configurable.patch b/SOURCES/libvirt-virtlogd-make-max-file-size-number-of-backups-configurable.patch new file mode 100644 index 0000000..360fcbb --- /dev/null +++ b/SOURCES/libvirt-virtlogd-make-max-file-size-number-of-backups-configurable.patch @@ -0,0 +1,295 @@ +From db5c1e0903be02bdd84caf9e964516236bcd1b9e Mon Sep 17 00:00:00 2001 +Message-Id: +From: "Daniel P. Berrange" +Date: Fri, 8 Jul 2016 09:57:57 +0200 +Subject: [PATCH] virtlogd: make max file size & number of backups configurable + +https://bugzilla.redhat.com/show_bug.cgi?id=1351209 + +Currently virtlogd has a hardcoded max file size of 128kb +and max of 3 backups. This adds two new config parameters +to /etc/libvirt/virtlogd.conf to let these be customized. + +Signed-off-by: Daniel P. Berrange +(cherry picked from commit 24aacfa8e84af95cae78e23ee51a7b23e8a0d03a) +--- + src/logging/log_daemon.c | 17 +++++++++++++---- + src/logging/log_daemon_config.c | 5 +++++ + src/logging/log_daemon_config.h | 3 +++ + src/logging/log_handler.c | 27 ++++++++++++++++++--------- + src/logging/log_handler.h | 4 ++++ + src/logging/test_virtlogd.aug.in | 4 ++++ + src/logging/virtlogd.aug | 2 ++ + src/logging/virtlogd.conf | 8 ++++++++ + 8 files changed, 57 insertions(+), 13 deletions(-) + +diff --git a/src/logging/log_daemon.c b/src/logging/log_daemon.c +index 9f71ca9..80e75bf 100644 +--- a/src/logging/log_daemon.c ++++ b/src/logging/log_daemon.c +@@ -165,6 +165,8 @@ virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged) + goto error; + + if (!(logd->handler = virLogHandlerNew(privileged, ++ config->max_size, ++ config->max_backups, + virLogDaemonInhibitor, + logd))) + goto error; +@@ -185,7 +187,8 @@ virLogDaemonGetHandler(virLogDaemonPtr dmn) + + + static virLogDaemonPtr +-virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged) ++virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged, ++ virLogDaemonConfigPtr config) + { + virLogDaemonPtr logd; + virJSONValuePtr child; +@@ -226,6 +229,8 @@ virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged) + + if (!(logd->handler = virLogHandlerNewPostExecRestart(child, + privileged, ++ config->max_size, ++ config->max_backups, + virLogDaemonInhibitor, + logd))) + goto error; +@@ -717,7 +722,8 @@ static int + virLogDaemonPostExecRestart(const char *state_file, + const char *pid_file, + int *pid_file_fd, +- bool privileged) ++ bool privileged, ++ virLogDaemonConfigPtr config) + { + const char *gotmagic; + char *wantmagic = NULL; +@@ -766,7 +772,9 @@ virLogDaemonPostExecRestart(const char *state_file, + (*pid_file_fd = virPidFileAcquirePath(pid_file, false, getpid())) < 0) + goto cleanup; + +- if (!(logDaemon = virLogDaemonNewPostExecRestart(object, privileged))) ++ if (!(logDaemon = virLogDaemonNewPostExecRestart(object, ++ privileged, ++ config))) + goto cleanup; + + ret = 1; +@@ -1086,7 +1094,8 @@ int main(int argc, char **argv) { + if ((rv = virLogDaemonPostExecRestart(state_file, + pid_file, + &pid_file_fd, +- privileged)) < 0) { ++ privileged, ++ config)) < 0) { + ret = VIR_LOG_DAEMON_ERR_INIT; + goto cleanup; + } +diff --git a/src/logging/log_daemon_config.c b/src/logging/log_daemon_config.c +index 9e729fa..b584970 100644 +--- a/src/logging/log_daemon_config.c ++++ b/src/logging/log_daemon_config.c +@@ -128,6 +128,8 @@ virLogDaemonConfigNew(bool privileged ATTRIBUTE_UNUSED) + return NULL; + + data->max_clients = 1024; ++ data->max_size = 128 * 1024; ++ data->max_backups = 3; + + return data; + } +@@ -154,6 +156,9 @@ virLogDaemonConfigLoadOptions(virLogDaemonConfigPtr data, + GET_CONF_STR(conf, filename, log_outputs); + GET_CONF_UINT(conf, filename, max_clients); + ++ GET_CONF_UINT(conf, filename, max_size); ++ GET_CONF_UINT(conf, filename, max_backups); ++ + return 0; + + error: +diff --git a/src/logging/log_daemon_config.h b/src/logging/log_daemon_config.h +index 24cc631..0da7b0b 100644 +--- a/src/logging/log_daemon_config.h ++++ b/src/logging/log_daemon_config.h +@@ -34,6 +34,9 @@ struct _virLogDaemonConfig { + char *log_filters; + char *log_outputs; + int max_clients; ++ ++ size_t max_backups; ++ size_t max_size; + }; + + +diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c +index a8cb6cf..cd0ba6e 100644 +--- a/src/logging/log_handler.c ++++ b/src/logging/log_handler.c +@@ -41,8 +41,6 @@ VIR_LOG_INIT("logging.log_handler"); + + #define VIR_FROM_THIS VIR_FROM_LOGGING + +-#define DEFAULT_FILE_SIZE (128 * 1024) +-#define DEFAULT_MAX_BACKUP 3 + #define DEFAULT_MODE 0600 + + typedef struct _virLogHandlerLogFile virLogHandlerLogFile; +@@ -62,6 +60,9 @@ struct _virLogHandler { + virObjectLockable parent; + + bool privileged; ++ size_t max_size; ++ size_t max_backups; ++ + virLogHandlerLogFilePtr *files; + size_t nfiles; + +@@ -184,6 +185,8 @@ virLogHandlerDomainLogFileEvent(int watch, + + virLogHandlerPtr + virLogHandlerNew(bool privileged, ++ size_t max_size, ++ size_t max_backups, + virLogHandlerShutdownInhibitor inhibitor, + void *opaque) + { +@@ -196,6 +199,8 @@ virLogHandlerNew(bool privileged, + goto error; + + handler->privileged = privileged; ++ handler->max_size = max_size; ++ handler->max_backups = max_backups; + handler->inhibitor = inhibitor; + handler->opaque = opaque; + +@@ -254,8 +259,8 @@ virLogHandlerLogFilePostExecRestart(virLogHandlerPtr handler, + } + + if ((file->file = virRotatingFileWriterNew(path, +- DEFAULT_FILE_SIZE, +- DEFAULT_MAX_BACKUP, ++ handler->max_size, ++ handler->max_backups, + false, + DEFAULT_MODE)) == NULL) + goto error; +@@ -283,6 +288,8 @@ virLogHandlerLogFilePostExecRestart(virLogHandlerPtr handler, + virLogHandlerPtr + virLogHandlerNewPostExecRestart(virJSONValuePtr object, + bool privileged, ++ size_t max_size, ++ size_t max_backups, + virLogHandlerShutdownInhibitor inhibitor, + void *opaque) + { +@@ -292,6 +299,8 @@ virLogHandlerNewPostExecRestart(virJSONValuePtr object, + size_t i; + + if (!(handler = virLogHandlerNew(privileged, ++ max_size, ++ max_backups, + inhibitor, + opaque))) + return NULL; +@@ -396,8 +405,8 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler, + goto error; + + if ((file->file = virRotatingFileWriterNew(path, +- DEFAULT_FILE_SIZE, +- DEFAULT_MAX_BACKUP, ++ handler->max_size, ++ handler->max_backups, + trunc, + DEFAULT_MODE)) == NULL) + goto error; +@@ -487,7 +496,7 @@ virLogHandlerDomainReadLogFile(virLogHandlerPtr handler, + + virObjectLock(handler); + +- if (!(file = virRotatingFileReaderNew(path, DEFAULT_MAX_BACKUP))) ++ if (!(file = virRotatingFileReaderNew(path, handler->max_backups))) + goto error; + + if (virRotatingFileReaderSeek(file, inode, offset) < 0) +@@ -542,8 +551,8 @@ virLogHandlerDomainAppendLogFile(virLogHandlerPtr handler, + + if (!writer) { + if (!(newwriter = virRotatingFileWriterNew(path, +- DEFAULT_FILE_SIZE, +- DEFAULT_MAX_BACKUP, ++ handler->max_size, ++ handler->max_backups, + false, + DEFAULT_MODE))) + goto cleanup; +diff --git a/src/logging/log_handler.h b/src/logging/log_handler.h +index 4607e45..70be567 100644 +--- a/src/logging/log_handler.h ++++ b/src/logging/log_handler.h +@@ -34,10 +34,14 @@ typedef void (*virLogHandlerShutdownInhibitor)(bool inhibit, + void *opaque); + + virLogHandlerPtr virLogHandlerNew(bool privileged, ++ size_t max_size, ++ size_t max_backups, + virLogHandlerShutdownInhibitor inhibitor, + void *opaque); + virLogHandlerPtr virLogHandlerNewPostExecRestart(virJSONValuePtr child, + bool privileged, ++ size_t max_size, ++ size_t max_backups, + virLogHandlerShutdownInhibitor inhibitor, + void *opaque); + +diff --git a/src/logging/test_virtlogd.aug.in b/src/logging/test_virtlogd.aug.in +index b12f676..3e6888f 100644 +--- a/src/logging/test_virtlogd.aug.in ++++ b/src/logging/test_virtlogd.aug.in +@@ -2,9 +2,13 @@ module Test_virtlogd = + let conf = "log_level = 3 + log_filters=\"3:remote 4:event\" + log_outputs=\"3:syslog:virtlogd\" ++max_size = 131072 ++max_backups = 3 + " + + test Virtlogd.lns get conf = + { "log_level" = "3" } + { "log_filters" = "3:remote 4:event" } + { "log_outputs" = "3:syslog:virtlogd" } ++ { "max_size" = "131072" } ++ { "max_backups" = "3" } +diff --git a/src/logging/virtlogd.aug b/src/logging/virtlogd.aug +index eefba5b..5ed1742 100644 +--- a/src/logging/virtlogd.aug ++++ b/src/logging/virtlogd.aug +@@ -29,6 +29,8 @@ module Virtlogd = + | str_entry "log_outputs" + | int_entry "log_buffer_size" + | int_entry "max_clients" ++ | int_entry "max_size" ++ | int_entry "max_backups" + + (* Each enty in the config is one of the following three ... *) + let entry = logging_entry +diff --git a/src/logging/virtlogd.conf b/src/logging/virtlogd.conf +index abb3633..fbd92ff 100644 +--- a/src/logging/virtlogd.conf ++++ b/src/logging/virtlogd.conf +@@ -57,3 +57,11 @@ + # The maximum number of concurrent client connections to allow + # over all sockets combined. + #max_clients = 1024 ++ ++ ++# Maximum file size before rolling over. Defaults to 128 KB ++#max_size = 131072 ++ ++# Maximum number of backup files to keep. Defaults to 3, ++# not including the primary active file ++#max_backups = 3 +-- +2.9.0 + diff --git a/SOURCES/libvirt-virtlogd.socket-Tie-lifecycle-to-libvirtd.service.patch b/SOURCES/libvirt-virtlogd.socket-Tie-lifecycle-to-libvirtd.service.patch new file mode 100644 index 0000000..cebd450 --- /dev/null +++ b/SOURCES/libvirt-virtlogd.socket-Tie-lifecycle-to-libvirtd.service.patch @@ -0,0 +1,71 @@ +From 19c4be54e82a58129448cbc56fbf2cc579b5ab29 Mon Sep 17 00:00:00 2001 +Message-Id: <19c4be54e82a58129448cbc56fbf2cc579b5ab29@dist-git> +From: Andrea Bolognani +Date: Tue, 6 Sep 2016 16:42:23 +0200 +Subject: [PATCH] virtlogd.socket: Tie lifecycle to libvirtd.service + +We already guarantee that virtlogd.socket is enabled/disabled +along with libvirtd.service, but if libvirtd.service has just +been installed and is started before rebooting, then +virtlogd.socket will not be running and guest startup will +fail. + +Add Requires=virtlogd.socket to libvirtd.service to make sure +virtlogd.socket is always started along with libvirtd.service, +and add Before=libvirtd.service to both virtlogd.socket and +virtlogd.service so that virtlogd never disappears before +libvirtd has exited. + +Also add PartOf=libvirtd.service to both virtlogd.socket and +virtlogd.service, so that virtlogd can be shut down when not +needed. + +Resolves: https://bugzilla.redhat.com/1372576 +(cherry picked from commit 839a060890d8b2408c0ea20e3c5997c7b2a4a079) +Signed-off-by: Andrea Bolognani +--- + daemon/libvirtd.service.in | 1 + + src/logging/virtlogd.service.in | 2 ++ + src/logging/virtlogd.socket.in | 2 ++ + 3 files changed, 5 insertions(+) + +diff --git a/daemon/libvirtd.service.in b/daemon/libvirtd.service.in +index 1616e7a..bbf27da 100644 +--- a/daemon/libvirtd.service.in ++++ b/daemon/libvirtd.service.in +@@ -5,6 +5,7 @@ + + [Unit] + Description=Virtualization daemon ++Requires=virtlogd.socket + Before=libvirt-guests.service + After=network.target + After=dbus.service +diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in +index a264d3a..8287994 100644 +--- a/src/logging/virtlogd.service.in ++++ b/src/logging/virtlogd.service.in +@@ -1,6 +1,8 @@ + [Unit] + Description=Virtual machine log manager + Requires=virtlogd.socket ++Before=libvirtd.service ++PartOf=libvirtd.service + Documentation=man:virtlogd(8) + Documentation=http://libvirt.org + +diff --git a/src/logging/virtlogd.socket.in b/src/logging/virtlogd.socket.in +index 724976d..efb6504 100644 +--- a/src/logging/virtlogd.socket.in ++++ b/src/logging/virtlogd.socket.in +@@ -1,5 +1,7 @@ + [Unit] + Description=Virtual machine log manager socket ++Before=libvirtd.service ++PartOf=libvirtd.service + + [Socket] + ListenStream=@localstatedir@/run/libvirt/virtlogd-sock +-- +2.10.0 + diff --git a/SOURCES/libvirt-vmx-Adapt-to-emptyBackingString-for-cdrom-image.patch b/SOURCES/libvirt-vmx-Adapt-to-emptyBackingString-for-cdrom-image.patch deleted file mode 100644 index 8d49d4f..0000000 --- a/SOURCES/libvirt-vmx-Adapt-to-emptyBackingString-for-cdrom-image.patch +++ /dev/null @@ -1,299 +0,0 @@ -From e30f529dc3ddb474ed78cf771b71d79616c3b8ce Mon Sep 17 00:00:00 2001 -Message-Id: -From: Michal Privoznik -Date: Tue, 26 Jan 2016 11:23:46 +0100 -Subject: [PATCH] vmx: Adapt to emptyBackingString for cdrom-image - -RHEL-7.3: https://bugzilla.redhat.com/show_bug.cgi?id=1275039 -RHEL-7.2.z: https://bugzilla.redhat.com/show_bug.cgi?id=1301892 -vdsm ovirt-3.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1266088 - -We are missing this value for cdrom-image device. It seems like -there's no added value to extend this to other types of disk -devices [1]. - -1: https://www.redhat.com/archives/libvir-list/2016-January/msg01038.html - -Signed-off-by: Michal Privoznik -(cherry picked from commit 35c3aab44d20daa2623fcf2191fc2e3afc12b9f0) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/vmx/vmx.c | 29 +++++++++++++++++++------- - tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx | 5 +++++ - tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml | 23 ++++++++++++++++++++ - tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx | 6 ++++++ - tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml | 23 ++++++++++++++++++++ - tests/vmx2xmltest.c | 3 +++ - tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx | 13 ++++++++++++ - tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml | 13 ++++++++++++ - tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx | 14 +++++++++++++ - tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml | 13 ++++++++++++ - tests/xml2vmxtest.c | 2 ++ - 11 files changed, 137 insertions(+), 7 deletions(-) - create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx - create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml - create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx - create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml - create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx - create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml - create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx - create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml - -diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c -index 84f71f7..805ad60 100644 ---- a/src/vmx/vmx.c -+++ b/src/vmx/vmx.c -@@ -2176,6 +2176,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - (*def)->transient = STRCASEEQ(mode, - "independent-nonpersistent"); - } else if (virFileHasSuffix(fileName, ".iso") || -+ STREQ(fileName, "emptyBackingString") || - (deviceType && - (STRCASEEQ(deviceType, "atapi-cdrom") || - STRCASEEQ(deviceType, "cdrom-raw") || -@@ -2261,6 +2262,16 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - */ - goto ignore; - } -+ } else if (STREQ(fileName, "emptyBackingString")) { -+ if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Expecting VMX entry '%s' to be 'cdrom-image' " -+ "but found '%s'"), deviceType_name, deviceType); -+ goto cleanup; -+ } -+ -+ virDomainDiskSetType(*def, VIR_STORAGE_TYPE_FILE); -+ ignore_value(virDomainDiskSetSource(*def, NULL)); - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid or not yet handled value '%s' " -@@ -3465,15 +3476,19 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, - if (type == VIR_STORAGE_TYPE_FILE) { - const char *src = virDomainDiskGetSource(def); - -- if (src && ! virFileHasSuffix(src, fileExt)) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Image file for %s %s '%s' has " -- "unsupported suffix, expecting '%s'"), -- busType, deviceType, def->dst, fileExt); -+ if (src) { -+ if (!virFileHasSuffix(src, fileExt)) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Image file for %s %s '%s' has " -+ "unsupported suffix, expecting '%s'"), -+ busType, deviceType, def->dst, fileExt); - return -1; -- } -+ } - -- fileName = ctx->formatFileName(src, ctx->opaque); -+ fileName = ctx->formatFileName(src, ctx->opaque); -+ } else if (def->device == VIR_DOMAIN_DISK_DEVICE_CDROM) { -+ ignore_value(VIR_STRDUP(fileName, "emptyBackingString")); -+ } - - if (fileName == NULL) - return -1; -diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx -new file mode 100644 -index 0000000..62fdb3d ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx -@@ -0,0 +1,5 @@ -+config.version = "8" -+virtualHW.version = "4" -+ide0:0.present = "true" -+ide0:0.deviceType = "cdrom-image" -+ide0:0.fileName = "emptyBackingString" -diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml -new file mode 100644 -index 0000000..e086379 ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml -@@ -0,0 +1,23 @@ -+ -+ 00000000-0000-0000-0000-000000000000 -+ 32768 -+ 32768 -+ 1 -+ -+ hvm -+ -+ -+ destroy -+ restart -+ destroy -+ -+ -+ -+
-+ -+ -+ -+ -+ -diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx -new file mode 100644 -index 0000000..3c6036a ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx -@@ -0,0 +1,6 @@ -+config.version = "8" -+virtualHW.version = "4" -+scsi0.present = "true" -+scsi0:0.present = "true" -+scsi0:0.deviceType = "cdrom-image" -+scsi0:0.fileName = "emptyBackingString" -diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml -new file mode 100644 -index 0000000..56ad678 ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml -@@ -0,0 +1,23 @@ -+ -+ 00000000-0000-0000-0000-000000000000 -+ 32768 -+ 32768 -+ 1 -+ -+ hvm -+ -+ -+ destroy -+ restart -+ destroy -+ -+ -+ -+
-+ -+ -+ -+ -+ -diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c -index 1d1fe83..b8dbd31 100644 ---- a/tests/vmx2xmltest.c -+++ b/tests/vmx2xmltest.c -@@ -218,14 +218,17 @@ mymain(void) - DO_TEST("harddisk-transient", "harddisk-transient"); - - DO_TEST("cdrom-scsi-file", "cdrom-scsi-file"); -+ DO_TEST("cdrom-scsi-empty", "cdrom-scsi-empty"); - DO_TEST("cdrom-scsi-device", "cdrom-scsi-device"); - DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device"); - DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect"); - DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru"); - DO_TEST("cdrom-ide-file", "cdrom-ide-file"); -+ DO_TEST("cdrom-ide-empty", "cdrom-ide-empty"); - DO_TEST("cdrom-ide-device", "cdrom-ide-device"); - DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device"); - DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect"); -+ DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect"); - - DO_TEST("floppy-file", "floppy-file"); - DO_TEST("floppy-device", "floppy-device"); -diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx -new file mode 100644 -index 0000000..45c7950 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx -@@ -0,0 +1,13 @@ -+.encoding = "UTF-8" -+config.version = "8" -+virtualHW.version = "4" -+guestOS = "other" -+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" -+displayName = "cdrom-ide-file" -+memsize = "4" -+numvcpus = "1" -+ide0:0.present = "true" -+ide0:0.deviceType = "cdrom-image" -+ide0:0.fileName = "emptyBackingString" -+floppy0.present = "false" -+floppy1.present = "false" -diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml -new file mode 100644 -index 0000000..219603e ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml -@@ -0,0 +1,13 @@ -+ -+ cdrom-ide-file -+ 564d9bef-acd9-b4e0-c8f0-aea8b9103515 -+ 4096 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx -new file mode 100644 -index 0000000..1097cb1 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx -@@ -0,0 +1,14 @@ -+.encoding = "UTF-8" -+config.version = "8" -+virtualHW.version = "4" -+guestOS = "other" -+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" -+displayName = "cdrom-scsi-empty" -+memsize = "4" -+numvcpus = "1" -+scsi0.present = "true" -+scsi0:0.present = "true" -+scsi0:0.deviceType = "cdrom-image" -+scsi0:0.fileName = "emptyBackingString" -+floppy0.present = "false" -+floppy1.present = "false" -diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml -new file mode 100644 -index 0000000..a5a6d80 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml -@@ -0,0 +1,13 @@ -+ -+ cdrom-scsi-empty -+ 564d9bef-acd9-b4e0-c8f0-aea8b9103515 -+ 4096 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c -index 53efe31..0efd278 100644 ---- a/tests/xml2vmxtest.c -+++ b/tests/xml2vmxtest.c -@@ -234,11 +234,13 @@ mymain(void) - DO_TEST("harddisk-ide-file", "harddisk-ide-file", 4); - - DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", 4); -+ DO_TEST("cdrom-scsi-empty", "cdrom-scsi-empty", 4); - DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", 4); - DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device", 4); - DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect", 4); - DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru", 4); - DO_TEST("cdrom-ide-file", "cdrom-ide-file", 4); -+ DO_TEST("cdrom-ide-empty", "cdrom-ide-empty", 4); - DO_TEST("cdrom-ide-device", "cdrom-ide-device", 4); - DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device", 4); - DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect", 4); --- -2.7.0 - diff --git a/SOURCES/libvirt-vmx-Add-handling-for-CDROM-devices-with-SCSI-passthru.patch b/SOURCES/libvirt-vmx-Add-handling-for-CDROM-devices-with-SCSI-passthru.patch deleted file mode 100644 index c818981..0000000 --- a/SOURCES/libvirt-vmx-Add-handling-for-CDROM-devices-with-SCSI-passthru.patch +++ /dev/null @@ -1,425 +0,0 @@ -From 9b72a34973d7e3fa0f4072b22d6ea10ee1241ece Mon Sep 17 00:00:00 2001 -Message-Id: <9b72a34973d7e3fa0f4072b22d6ea10ee1241ece@dist-git> -From: Matthias Bolte -Date: Tue, 8 Sep 2015 09:52:59 +0200 -Subject: [PATCH] vmx: Add handling for CDROM devices with SCSI passthru - -https://bugzilla.redhat.com/show_bug.cgi?id=1172544 - -(cherry picked from commit 98d8c811ce09cfec707aa3729cf0c01c67471356) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/vmx/vmx.c | 36 ++++++++-- - tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.vmx | 6 ++ - tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.xml | 24 +++++++ - tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.vmx | 85 +++++++++++++++++++++++ - tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.xml | 35 ++++++++++ - tests/vmx2xmltest.c | 2 + - tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.vmx | 14 ++++ - tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.xml | 14 ++++ - tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.vmx | 25 +++++++ - tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.xml | 35 ++++++++++ - tests/xml2vmxtest.c | 2 + - 11 files changed, 273 insertions(+), 5 deletions(-) - create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.vmx - create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.xml - create mode 100644 tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.vmx - create mode 100644 tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.xml - create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.vmx - create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.xml - create mode 100644 tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.vmx - create mode 100644 tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.xml - -diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c -index 799668c..9ba5848 100644 ---- a/src/vmx/vmx.c -+++ b/src/vmx/vmx.c -@@ -2178,12 +2178,14 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - } else if (virFileHasSuffix(fileName, ".iso") || - (deviceType && - (STRCASEEQ(deviceType, "atapi-cdrom") || -- STRCASEEQ(deviceType, "cdrom-raw")))) { -+ STRCASEEQ(deviceType, "cdrom-raw") || -+ (STRCASEEQ(deviceType, "scsi-passthru") && -+ STRPREFIX(fileName, "/vmfs/devices/cdrom/"))))) { - /* - * This function was called in order to parse a harddisk device, -- * but .iso files, 'atapi-cdrom', and 'cdrom-raw' devices are for -- * CDROM devices only. Just ignore it, another call to this -- * function to parse a CDROM device may handle it. -+ * but .iso files, 'atapi-cdrom', 'cdrom-raw', and 'scsi-passthru' -+ * CDROM devices are for CDROM devices only. Just ignore it, another -+ * call to this function to parse a CDROM device may handle it. - */ - goto ignore; - } else { -@@ -2241,6 +2243,24 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - } else if (virDomainDiskSetSource(*def, fileName) < 0) { - goto cleanup; - } -+ } else if (busType == VIR_DOMAIN_DISK_BUS_SCSI && -+ deviceType && STRCASEEQ(deviceType, "scsi-passthru")) { -+ if (STRPREFIX(fileName, "/vmfs/devices/cdrom/")) { -+ /* SCSI-passthru CD-ROMs actually are device='lun' */ -+ (*def)->device = VIR_DOMAIN_DISK_DEVICE_LUN; -+ virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK); -+ -+ if (virDomainDiskSetSource(*def, fileName) < 0) -+ goto cleanup; -+ } else { -+ /* -+ * This function was called in order to parse a CDROM device, -+ * but the filename does not indicate a CDROM device. Just ignore -+ * it, another call to this function to parse a harddisk device -+ * may handle it. -+ */ -+ goto ignore; -+ } - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid or not yet handled value '%s' " -@@ -3423,7 +3443,13 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, - else - vmxDeviceType = "atapi-cdrom"; - } else if (def->device == VIR_DOMAIN_DISK_DEVICE_LUN) { -- vmxDeviceType = "cdrom-raw"; -+ const char *src = virDomainDiskGetSource(def); -+ -+ if (def->bus == VIR_DOMAIN_DISK_BUS_SCSI && -+ src && STRPREFIX(src, "/vmfs/devices/cdrom/")) -+ vmxDeviceType = "scsi-passthru"; -+ else -+ vmxDeviceType = "cdrom-raw"; - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("%s %s '%s' has an unsupported type '%s'"), -diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.vmx -new file mode 100644 -index 0000000..fb7ea72 ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.vmx -@@ -0,0 +1,6 @@ -+config.version = "8" -+virtualHW.version = "4" -+scsi0.present = "true" -+scsi0:0.present = "true" -+scsi0:0.deviceType = "scsi-passthru" -+scsi0:0.fileName = "/vmfs/devices/cdrom/mpx.vmhba32:C0:T0:L0" -diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.xml b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.xml -new file mode 100644 -index 0000000..d3b382a ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-passthru.xml -@@ -0,0 +1,24 @@ -+ -+ 00000000-0000-0000-0000-000000000000 -+ 32768 -+ 32768 -+ 1 -+ -+ hvm -+ -+ -+ destroy -+ restart -+ destroy -+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.vmx b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.vmx -new file mode 100644 -index 0000000..f9da706 ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.vmx -@@ -0,0 +1,85 @@ -+.encoding = "UTF-8" -+config.version = "8" -+virtualHW.version = "8" -+pciBridge0.present = "TRUE" -+pciBridge4.present = "TRUE" -+pciBridge4.virtualDev = "pcieRootPort" -+pciBridge4.functions = "8" -+pciBridge5.present = "TRUE" -+pciBridge5.virtualDev = "pcieRootPort" -+pciBridge5.functions = "8" -+pciBridge6.present = "TRUE" -+pciBridge6.virtualDev = "pcieRootPort" -+pciBridge6.functions = "8" -+pciBridge7.present = "TRUE" -+pciBridge7.virtualDev = "pcieRootPort" -+pciBridge7.functions = "8" -+vmci0.present = "TRUE" -+hpet0.present = "TRUE" -+nvram = "esx-rhel6-mini.nvram" -+virtualHW.productCompatibility = "hosted" -+powerType.powerOff = "soft" -+powerType.powerOn = "hard" -+powerType.suspend = "hard" -+powerType.reset = "soft" -+displayName = "esx-rhel6-mini-with-scsi-device" -+extendedConfigFile = "esx-rhel6-mini.vmxf" -+floppy0.present = "TRUE" -+scsi0.present = "TRUE" -+scsi0.sharedBus = "none" -+scsi0.virtualDev = "pvscsi" -+memsize = "2048" -+scsi0:0.present = "TRUE" -+scsi0:0.fileName = "esx-rhel6-mini.vmdk" -+scsi0:0.deviceType = "scsi-hardDisk" -+ide1:0.present = "TRUE" -+ide1:0.clientDevice = "TRUE" -+ide1:0.deviceType = "cdrom-raw" -+ide1:0.startConnected = "FALSE" -+floppy0.startConnected = "FALSE" -+floppy0.fileName = "" -+floppy0.clientDevice = "TRUE" -+ethernet0.present = "TRUE" -+ethernet0.virtualDev = "vmxnet3" -+ethernet0.networkName = "VM Network" -+ethernet0.addressType = "vpx" -+guestOS = "rhel6-64" -+uuid.location = "56 4d 91 76 62 1f 02 39-f5 ad 3a 00 23 71 95 3b" -+uuid.bios = "56 4d 91 76 62 1f 02 39-f5 ad 3a 00 23 71 95 3b" -+vc.uuid = "52 40 95 33 33 a2 56 c5-36 ce 80 d6 05 f8 ec f4" -+scsi0.pciSlotNumber = "160" -+ethernet0.generatedAddress = "00:50:56:9f:08:51" -+ethernet0.pciSlotNumber = "192" -+svga.vramSize = "8388608" -+vmci0.id = "594646331" -+vmci0.pciSlotNumber = "32" -+tools.syncTime = "FALSE" -+cleanShutdown = "TRUE" -+replay.supported = "FALSE" -+sched.swap.derivedName = "/vmfs/volumes/4f59a359-4cc3fa06-cac0-4437e66df86c/esx-rhel6-mini/esx-rhel6-mini-f62c1180.vswp" -+replay.filename = "" -+scsi0:0.redo = "" -+pciBridge0.pciSlotNumber = "17" -+pciBridge4.pciSlotNumber = "21" -+pciBridge5.pciSlotNumber = "22" -+pciBridge6.pciSlotNumber = "23" -+pciBridge7.pciSlotNumber = "24" -+scsi0.sasWWID = "50 05 05 66 62 1f 02 30" -+ethernet0.generatedAddressOffset = "0" -+hostCPUID.0 = "0000000d756e65476c65746e49656e69" -+hostCPUID.1 = "000206a70010080017bae3f7bfebfbff" -+hostCPUID.80000001 = "00000000000000000000000128100800" -+guestCPUID.0 = "0000000d756e65476c65746e49656e69" -+guestCPUID.1 = "000206a700010800969822030fabfbff" -+guestCPUID.80000001 = "00000000000000000000000128100800" -+userCPUID.0 = "0000000d756e65476c65746e49656e69" -+userCPUID.1 = "000206a700100800169822030fabfbff" -+userCPUID.80000001 = "00000000000000000000000128100800" -+evcCompatibilityMode = "FALSE" -+vmotion.checkpointFBSize = "8388608" -+softPowerOff = "TRUE" -+scsi0:1.present = "TRUE" -+scsi0:1.deviceType = "scsi-passthru" -+scsi0:1.fileName = "/vmfs/devices/cdrom/mpx.vmhba32:C0:T0:L0" -+scsi0:1.allowGuestConnectionControl = "FALSE" -+scsi0:3.present = "FALSE" -diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.xml b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.xml -new file mode 100644 -index 0000000..5180a99 ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-7.xml -@@ -0,0 +1,35 @@ -+ -+ esx-rhel6-mini-with-scsi-device -+ 564d9176-621f-0239-f5ad-3a002371953b -+ 2097152 -+ 2097152 -+ 1 -+ -+ hvm -+ -+ -+ destroy -+ restart -+ destroy -+ -+ -+ -+ -+
-+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c -index d3e33e6..1d1fe83 100644 ---- a/tests/vmx2xmltest.c -+++ b/tests/vmx2xmltest.c -@@ -221,6 +221,7 @@ mymain(void) - DO_TEST("cdrom-scsi-device", "cdrom-scsi-device"); - DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device"); - DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect"); -+ DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru"); - DO_TEST("cdrom-ide-file", "cdrom-ide-file"); - DO_TEST("cdrom-ide-device", "cdrom-ide-device"); - DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device"); -@@ -261,6 +262,7 @@ mymain(void) - DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4"); - DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5"); - DO_TEST("esx-in-the-wild-6", "esx-in-the-wild-6"); -+ DO_TEST("esx-in-the-wild-7", "esx-in-the-wild-7"); - - DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1"); - DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2"); -diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.vmx -new file mode 100644 -index 0000000..be2f089 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.vmx -@@ -0,0 +1,14 @@ -+.encoding = "UTF-8" -+config.version = "8" -+virtualHW.version = "4" -+guestOS = "other" -+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" -+displayName = "cdrom-scsi-passthru" -+memsize = "4" -+numvcpus = "1" -+scsi0.present = "true" -+scsi0:0.present = "true" -+scsi0:0.deviceType = "scsi-passthru" -+scsi0:0.fileName = "/vmfs/devices/cdrom/mpx.vmhba32:C0:T0:L0" -+floppy0.present = "false" -+floppy1.present = "false" -diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.xml b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.xml -new file mode 100644 -index 0000000..0bf3696 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-passthru.xml -@@ -0,0 +1,14 @@ -+ -+ cdrom-scsi-passthru -+ 564d9bef-acd9-b4e0-c8f0-aea8b9103515 -+ 4096 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.vmx b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.vmx -new file mode 100644 -index 0000000..2eedd35 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.vmx -@@ -0,0 +1,25 @@ -+.encoding = "UTF-8" -+config.version = "8" -+virtualHW.version = "4" -+guestOS = "other-64" -+uuid.bios = "56 4d 91 76 62 1f 02 39-f5 ad 3a 00 23 71 95 3b" -+displayName = "esx-rhel6-mini-with-scsi-device" -+memsize = "2048" -+numvcpus = "1" -+scsi0.present = "true" -+scsi0.virtualDev = "pvscsi" -+scsi0:0.present = "true" -+scsi0:0.deviceType = "scsi-hardDisk" -+scsi0:0.fileName = "/vmfs/volumes/datastore/directory/esx-rhel6-mini.vmdk" -+scsi0:1.present = "true" -+scsi0:1.deviceType = "scsi-passthru" -+scsi0:1.fileName = "/vmfs/devices/cdrom/mpx.vmhba32:C0:T0:L0" -+floppy0.present = "false" -+floppy1.present = "false" -+ethernet0.present = "true" -+ethernet0.virtualDev = "vmxnet3" -+ethernet0.networkName = "VM Network" -+ethernet0.connectionType = "bridged" -+ethernet0.addressType = "vpx" -+ethernet0.generatedAddress = "00:50:56:9f:08:51" -+svga.vramSize = "8388608" -diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.xml b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.xml -new file mode 100644 -index 0000000..5180a99 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-7.xml -@@ -0,0 +1,35 @@ -+ -+ esx-rhel6-mini-with-scsi-device -+ 564d9176-621f-0239-f5ad-3a002371953b -+ 2097152 -+ 2097152 -+ 1 -+ -+ hvm -+ -+ -+ destroy -+ restart -+ destroy -+ -+ -+ -+ -+
-+ -+ -+ -+ -+
-+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c -index 357f1e6..53efe31 100644 ---- a/tests/xml2vmxtest.c -+++ b/tests/xml2vmxtest.c -@@ -237,6 +237,7 @@ mymain(void) - DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", 4); - DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device", 4); - DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect", 4); -+ DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru", 4); - DO_TEST("cdrom-ide-file", "cdrom-ide-file", 4); - DO_TEST("cdrom-ide-device", "cdrom-ide-device", 4); - DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device", 4); -@@ -274,6 +275,7 @@ mymain(void) - DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4", 4); - DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5", 4); - DO_TEST("esx-in-the-wild-6", "esx-in-the-wild-6", 4); -+ DO_TEST("esx-in-the-wild-7", "esx-in-the-wild-7", 4); - - DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", 4); - DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", 4); --- -2.5.2 - diff --git a/SOURCES/libvirt-vmx-Expose-datacenter-path-in-domain-XML.patch b/SOURCES/libvirt-vmx-Expose-datacenter-path-in-domain-XML.patch deleted file mode 100644 index 757741d..0000000 --- a/SOURCES/libvirt-vmx-Expose-datacenter-path-in-domain-XML.patch +++ /dev/null @@ -1,384 +0,0 @@ -From 70e32568957d60bbea5f50fc2d9210e2faaca5cd Mon Sep 17 00:00:00 2001 -Message-Id: <70e32568957d60bbea5f50fc2d9210e2faaca5cd@dist-git> -From: Matthias Bolte -Date: Mon, 8 Feb 2016 13:47:35 +0100 -Subject: [PATCH] vmx: Expose datacenter path in domain XML - -RHEL-7.3: https://bugzilla.redhat.com/show_bug.cgi?id=1263574 -RHEL-7.2.z: https://bugzilla.redhat.com/show_bug.cgi?id=1305489 - -Tool such as libguestfs need the datacenter path to get access to disk -images. The ESX driver knows the correct datacenter path, but this -information cannot be accessed using libvirt API yet. Also, it cannot -be deduced from the connection URI in a robust way. - -Expose the datacenter path in the domain XML as -node similar to the way the node works. The new node -is ignored while parsing the domain XML. In contrast to -it is output only. - -(cherry picked from commit 636a99058758a0447482f3baad94de8de3ab1151) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/esx/esx_driver.c | 4 ++ - src/vmware/vmware_conf.c | 3 ++ - src/vmware/vmware_driver.c | 9 ++++ - src/vmx/vmx.c | 68 +++++++++++++++++++++++----- - src/vmx/vmx.h | 10 ++-- - tests/vmx2xmldata/vmx2xml-datacenterpath.vmx | 2 + - tests/vmx2xmldata/vmx2xml-datacenterpath.xml | 19 ++++++++ - tests/vmx2xmltest.c | 5 ++ - tests/xml2vmxdata/xml2vmx-datacenterpath.vmx | 10 ++++ - tests/xml2vmxdata/xml2vmx-datacenterpath.xml | 9 ++++ - tests/xml2vmxtest.c | 3 ++ - 11 files changed, 126 insertions(+), 16 deletions(-) - create mode 100644 tests/vmx2xmldata/vmx2xml-datacenterpath.vmx - create mode 100644 tests/vmx2xmldata/vmx2xml-datacenterpath.xml - create mode 100644 tests/xml2vmxdata/xml2vmx-datacenterpath.vmx - create mode 100644 tests/xml2vmxdata/xml2vmx-datacenterpath.xml - -diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c -index c304ff3..5944947 100644 ---- a/src/esx/esx_driver.c -+++ b/src/esx/esx_driver.c -@@ -2741,6 +2741,7 @@ esxDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) - ctx.parseFileName = esxParseVMXFileName; - ctx.formatFileName = NULL; - ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = priv->primary->datacenterPath; - - def = virVMXParseConfig(&ctx, priv->xmlopt, vmx); - -@@ -2799,6 +2800,7 @@ esxConnectDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, - ctx.parseFileName = esxParseVMXFileName; - ctx.formatFileName = NULL; - ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = NULL; - - def = virVMXParseConfig(&ctx, priv->xmlopt, nativeConfig); - -@@ -2853,6 +2855,7 @@ esxConnectDomainXMLToNative(virConnectPtr conn, const char *nativeFormat, - ctx.parseFileName = NULL; - ctx.formatFileName = esxFormatVMXFileName; - ctx.autodetectSCSIControllerModel = esxAutodetectSCSIControllerModel; -+ ctx.datacenterPath = NULL; - - vmx = virVMXFormatConfig(&ctx, priv->xmlopt, def, virtualHW_version); - -@@ -3096,6 +3099,7 @@ esxDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags) - ctx.parseFileName = NULL; - ctx.formatFileName = esxFormatVMXFileName; - ctx.autodetectSCSIControllerModel = esxAutodetectSCSIControllerModel; -+ ctx.datacenterPath = NULL; - - vmx = virVMXFormatConfig(&ctx, priv->xmlopt, def, virtualHW_version); - -diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c -index 21cf333..f3cbbf5 100644 ---- a/src/vmware/vmware_conf.c -+++ b/src/vmware/vmware_conf.c -@@ -145,6 +145,9 @@ vmwareLoadDomains(struct vmware_driver *driver) - virCommandPtr cmd; - - ctx.parseFileName = vmwareCopyVMXFileName; -+ ctx.formatFileName = NULL; -+ ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = NULL; - - cmd = virCommandNewArgList(driver->vmrun, "-T", - vmwareDriverTypeToString(driver->type), -diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c -index ec74fe3..e228aaa 100644 ---- a/src/vmware/vmware_driver.c -+++ b/src/vmware/vmware_driver.c -@@ -381,7 +381,10 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla - if (flags & VIR_DOMAIN_DEFINE_VALIDATE) - parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE; - -+ ctx.parseFileName = NULL; - ctx.formatFileName = vmwareCopyVMXFileName; -+ ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = NULL; - - vmwareDriverLock(driver); - if ((vmdef = virDomainDefParseString(xml, driver->caps, driver->xmlopt, -@@ -671,7 +674,10 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml, - if (flags & VIR_DOMAIN_START_VALIDATE) - parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE; - -+ ctx.parseFileName = NULL; - ctx.formatFileName = vmwareCopyVMXFileName; -+ ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = NULL; - - vmwareDriverLock(driver); - -@@ -1022,6 +1028,9 @@ vmwareConnectDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, - } - - ctx.parseFileName = vmwareCopyVMXFileName; -+ ctx.formatFileName = NULL; -+ ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = NULL; - - def = virVMXParseConfig(&ctx, driver->xmlopt, nativeConfig); - -diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c -index 805ad60..2befdb2 100644 ---- a/src/vmx/vmx.c -+++ b/src/vmx/vmx.c -@@ -523,10 +523,11 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST, - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Helpers - */ -+ - static int --vmxDomainDefPostParse(virDomainDefPtr def, -- virCapsPtr caps ATTRIBUTE_UNUSED, -- void *opaque ATTRIBUTE_UNUSED) -+virVMXDomainDefPostParse(virDomainDefPtr def, -+ virCapsPtr caps ATTRIBUTE_UNUSED, -+ void *opaque ATTRIBUTE_UNUSED) - { - /* memory hotplug tunables are not supported by this driver */ - if (virDomainDefCheckUnsupportedMemoryHotplug(def) < 0) -@@ -536,27 +537,60 @@ vmxDomainDefPostParse(virDomainDefPtr def, - } - - static int --vmxDomainDeviceDefPostParse(virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED, -- const virDomainDef *def ATTRIBUTE_UNUSED, -- virCapsPtr caps ATTRIBUTE_UNUSED, -- void *opaque ATTRIBUTE_UNUSED) -+virVMXDomainDevicesDefPostParse(virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED, -+ const virDomainDef *def ATTRIBUTE_UNUSED, -+ virCapsPtr caps ATTRIBUTE_UNUSED, -+ void *opaque ATTRIBUTE_UNUSED) - { - return 0; - } - --virDomainDefParserConfig virVMXDomainDefParserConfig = { -+static virDomainDefParserConfig virVMXDomainDefParserConfig = { - .hasWideSCSIBus = true, - .macPrefix = {0x00, 0x0c, 0x29}, -- .devicesPostParseCallback = vmxDomainDeviceDefPostParse, -- .domainPostParseCallback = vmxDomainDefPostParse, -+ .devicesPostParseCallback = virVMXDomainDevicesDefPostParse, -+ .domainPostParseCallback = virVMXDomainDefPostParse, - }; - -+static void -+virVMXDomainDefNamespaceFree(void *nsdata) -+{ -+ VIR_FREE(nsdata); -+} -+ -+static int -+virVMXDomainDefNamespaceFormatXML(virBufferPtr buf, void *nsdata) -+{ -+ const char *datacenterPath = nsdata; -+ -+ if (!datacenterPath) -+ return 0; -+ -+ virBufferAddLit(buf, ""); -+ virBufferEscapeString(buf, "%s", datacenterPath); -+ virBufferAddLit(buf, "\n"); -+ -+ return 0; -+} -+ -+static const char * -+virVMXDomainDefNamespaceHref(void) -+{ -+ return "xmlns:vmware='http://libvirt.org/schemas/domain/vmware/1.0'"; -+} -+ -+static virDomainXMLNamespace virVMXDomainXMLNamespace = { -+ .parse = NULL, -+ .free = virVMXDomainDefNamespaceFree, -+ .format = virVMXDomainDefNamespaceFormatXML, -+ .href = virVMXDomainDefNamespaceHref, -+}; - - virDomainXMLOptionPtr - virVMXDomainXMLConfInit(void) - { -- return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, -- NULL, NULL); -+ return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL, -+ &virVMXDomainXMLNamespace); - } - - char * -@@ -1266,6 +1300,7 @@ virVMXParseConfig(virVMXContext *ctx, - bool hgfs_disabled = true; - long long sharedFolder_maxNum = 0; - int cpumasklen; -+ char *namespaceData; - - if (ctx->parseFileName == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -@@ -1765,6 +1800,15 @@ virVMXParseConfig(virVMXContext *ctx, - ++def->nparallels; - } - -+ /* ctx:datacenterPath -> def:namespaceData */ -+ if (ctx->datacenterPath) { -+ if (VIR_STRDUP(namespaceData, ctx->datacenterPath) < 0) -+ goto cleanup; -+ -+ def->ns = *virDomainXMLOptionGetNamespace(xmlopt); -+ def->namespaceData = namespaceData; -+ } -+ - success = true; - - cleanup: -diff --git a/src/vmx/vmx.h b/src/vmx/vmx.h -index 6a68c8b..0f012fd 100644 ---- a/src/vmx/vmx.h -+++ b/src/vmx/vmx.h -@@ -1,7 +1,7 @@ - /* - * vmx.h: VMware VMX parsing/formatting functions - * -- * Copyright (C) 2009-2010 Matthias Bolte -+ * Copyright (C) 2009-2011, 2015 Matthias Bolte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -41,15 +41,17 @@ typedef int (*virVMXAutodetectSCSIControllerModel)(virDomainDiskDefPtr def, - int *model, void *opaque); - - /* -- * virVMXParseFileName is only used by virVMXParseConfig. -- * virVMXFormatFileName is only used by virVMXFormatConfig. -- * virVMXAutodetectSCSIControllerModel is optionally used by virVMXFormatConfig. -+ * parseFileName is only used by virVMXParseConfig. -+ * formatFileName is only used by virVMXFormatConfig. -+ * autodetectSCSIControllerModel is optionally used by virVMXFormatConfig. -+ * datacenterPath is only used by virVMXFormatConfig. - */ - struct _virVMXContext { - void *opaque; - virVMXParseFileName parseFileName; - virVMXFormatFileName formatFileName; - virVMXAutodetectSCSIControllerModel autodetectSCSIControllerModel; -+ const char *datacenterPath; /* including folders */ - }; - - -diff --git a/tests/vmx2xmldata/vmx2xml-datacenterpath.vmx b/tests/vmx2xmldata/vmx2xml-datacenterpath.vmx -new file mode 100644 -index 0000000..a8e5db3 ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-datacenterpath.vmx -@@ -0,0 +1,2 @@ -+config.version = "8" -+virtualHW.version = "4" -diff --git a/tests/vmx2xmldata/vmx2xml-datacenterpath.xml b/tests/vmx2xmldata/vmx2xml-datacenterpath.xml -new file mode 100644 -index 0000000..a690c0f ---- /dev/null -+++ b/tests/vmx2xmldata/vmx2xml-datacenterpath.xml -@@ -0,0 +1,19 @@ -+ -+ 00000000-0000-0000-0000-000000000000 -+ 32768 -+ 32768 -+ 1 -+ -+ hvm -+ -+ -+ destroy -+ restart -+ destroy -+ -+ -+ -+ folder1/folder2/datacenter1 -+ -diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c -index b8dbd31..258cba3 100644 ---- a/tests/vmx2xmltest.c -+++ b/tests/vmx2xmltest.c -@@ -201,6 +201,7 @@ mymain(void) - ctx.parseFileName = testParseVMXFileName; - ctx.formatFileName = NULL; - ctx.autodetectSCSIControllerModel = NULL; -+ ctx.datacenterPath = NULL; - - DO_TEST("case-insensitive-1", "case-insensitive-1"); - DO_TEST("case-insensitive-2", "case-insensitive-2"); -@@ -283,6 +284,10 @@ mymain(void) - - DO_TEST("svga", "svga"); - -+ ctx.datacenterPath = "folder1/folder2/datacenter1"; -+ -+ DO_TEST("datacenterpath", "datacenterpath"); -+ - virObjectUnref(caps); - virObjectUnref(xmlopt); - -diff --git a/tests/xml2vmxdata/xml2vmx-datacenterpath.vmx b/tests/xml2vmxdata/xml2vmx-datacenterpath.vmx -new file mode 100644 -index 0000000..59bde03 ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-datacenterpath.vmx -@@ -0,0 +1,10 @@ -+.encoding = "UTF-8" -+config.version = "8" -+virtualHW.version = "4" -+guestOS = "other" -+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" -+displayName = "datacenterpath" -+memsize = "4" -+numvcpus = "1" -+floppy0.present = "false" -+floppy1.present = "false" -diff --git a/tests/xml2vmxdata/xml2vmx-datacenterpath.xml b/tests/xml2vmxdata/xml2vmx-datacenterpath.xml -new file mode 100644 -index 0000000..048e13d ---- /dev/null -+++ b/tests/xml2vmxdata/xml2vmx-datacenterpath.xml -@@ -0,0 +1,9 @@ -+ -+ datacenterpath -+ 564d9bef-acd9-b4e0-c8f0-aea8b9103515 -+ 4096 -+ -+ hvm -+ -+ folder1/folder2/datacenter1 -+ -diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c -index 0efd278..d970240 100644 ---- a/tests/xml2vmxtest.c -+++ b/tests/xml2vmxtest.c -@@ -221,6 +221,7 @@ mymain(void) - ctx.parseFileName = NULL; - ctx.formatFileName = testFormatVMXFileName; - ctx.autodetectSCSIControllerModel = testAutodetectSCSIControllerModel; -+ ctx.datacenterPath = NULL; - - DO_TEST("minimal", "minimal", 4); - DO_TEST("minimal-64bit", "minimal-64bit", 4); -@@ -295,6 +296,8 @@ mymain(void) - - DO_TEST("svga", "svga", 4); - -+ DO_TEST("datacenterpath", "datacenterpath", 4); -+ - virObjectUnref(caps); - virObjectUnref(xmlopt); - --- -2.7.2 - diff --git a/SOURCES/libvirt-vmx-Some-whitespace-cleanup.patch b/SOURCES/libvirt-vmx-Some-whitespace-cleanup.patch deleted file mode 100644 index b422fb0..0000000 --- a/SOURCES/libvirt-vmx-Some-whitespace-cleanup.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 2fdb0fe7911b41f3578072431da1b65e9d499c49 Mon Sep 17 00:00:00 2001 -Message-Id: <2fdb0fe7911b41f3578072431da1b65e9d499c49@dist-git> -From: Matthias Bolte -Date: Tue, 8 Sep 2015 09:52:57 +0200 -Subject: [PATCH] vmx: Some whitespace cleanup - -https://bugzilla.redhat.com/show_bug.cgi?id=1172544 - -(cherry picked from commit 1d204cf19617b87f0bddfb0d9855ee99d7f5d2ae) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/vmx/vmx.c | 25 +++++++++++++------------ - 1 file changed, 13 insertions(+), 12 deletions(-) - -diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c -index e77de62..3b23c0d 100644 ---- a/src/vmx/vmx.c -+++ b/src/vmx/vmx.c -@@ -2,7 +2,7 @@ - * vmx.c: VMware VMX parsing/formatting functions - * - * Copyright (C) 2010-2014 Red Hat, Inc. -- * Copyright (C) 2009-2010 Matthias Bolte -+ * Copyright (C) 2009-2011, 2014-2015 Matthias Bolte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -2189,8 +2189,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid or not yet handled value '%s' " - "for VMX entry '%s' for device type '%s'"), -- fileName, fileName_name, -- deviceType ? deviceType : "unknown"); -+ fileName, fileName_name, -+ deviceType ? deviceType : "unknown"); - goto cleanup; - } - } else if (device == VIR_DOMAIN_DISK_DEVICE_CDROM) { -@@ -2246,8 +2246,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid or not yet handled value '%s' " - "for VMX entry '%s' for device type '%s'"), -- fileName, fileName_name, -- deviceType ? deviceType : "unknown"); -+ fileName, fileName_name, -+ deviceType ? deviceType : "unknown"); - goto cleanup; - } - } else if (device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) { -@@ -2270,8 +2270,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid or not yet handled value '%s' " - "for VMX entry '%s' for device type '%s'"), -- fileName, fileName_name, -- deviceType ? deviceType : "unknown"); -+ fileName, fileName_name, -+ deviceType ? deviceType : "unknown"); - goto cleanup; - } - } else { -@@ -2543,8 +2543,8 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def) - STRCASENEQ(virtualDev, "e1000e")) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Expecting VMX entry '%s' to be 'vlance' or 'vmxnet' or " -- "'vmxnet3' or 'e1000e' or 'e1000e' but found '%s'"), virtualDev_name, -- virtualDev); -+ "'vmxnet3' or 'e1000e' or 'e1000e' but found '%s'"), -+ virtualDev_name, virtualDev); - goto cleanup; - } - -@@ -3358,7 +3358,7 @@ virVMXFormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer) - - int - virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, -- virBufferPtr buffer) -+ virBufferPtr buffer) - { - int controllerOrBus, unit; - const char *vmxDeviceType = NULL; -@@ -3374,7 +3374,7 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, - * an ISO. - */ - const char *fileExt = (def->device == VIR_DOMAIN_DISK_DEVICE_DISK) ? -- ".vmdk" : ".iso"; -+ ".vmdk" : ".iso"; - - /* Check that we got a valid device type */ - if (def->device != VIR_DOMAIN_DISK_DEVICE_DISK && -@@ -3417,7 +3417,7 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, - if (def->device == VIR_DOMAIN_DISK_DEVICE_DISK && - type == VIR_STORAGE_TYPE_FILE) { - vmxDeviceType = (def->bus == VIR_DOMAIN_DISK_BUS_SCSI) ? -- "scsi-hardDisk" : "ata-hardDisk"; -+ "scsi-hardDisk" : "ata-hardDisk"; - } else if (def->device == VIR_DOMAIN_DISK_DEVICE_CDROM) { - if (type == VIR_STORAGE_TYPE_FILE) - vmxDeviceType = "cdrom-image"; -@@ -3489,6 +3489,7 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, - virBufferAsprintf(buffer, - "%s%d:%d.mode = \"independent-nonpersistent\"\n", - busType, controllerOrBus, unit); -+ - return 0; - } - --- -2.5.2 - diff --git a/SOURCES/libvirt-vmx-The-virVMXParseDisk-deviceType-can-be-NULL-add-some-missing-checks.patch b/SOURCES/libvirt-vmx-The-virVMXParseDisk-deviceType-can-be-NULL-add-some-missing-checks.patch deleted file mode 100644 index 60c49e0..0000000 --- a/SOURCES/libvirt-vmx-The-virVMXParseDisk-deviceType-can-be-NULL-add-some-missing-checks.patch +++ /dev/null @@ -1,72 +0,0 @@ -From cc4d319a6eb8213079f32119714b7f686e4bf7ba Mon Sep 17 00:00:00 2001 -Message-Id: -From: Matthias Bolte -Date: Tue, 8 Sep 2015 09:52:58 +0200 -Subject: [PATCH] vmx: The virVMXParseDisk deviceType can be NULL, add some - missing checks - -https://bugzilla.redhat.com/show_bug.cgi?id=1172544 - -(cherry picked from commit 7c959e0dc036c0e9d4429ec5528c693b5e5e9929) -Signed-off-by: Michal Privoznik -Signed-off-by: Jiri Denemark ---- - src/vmx/vmx.c | 21 ++++++++++----------- - 1 file changed, 10 insertions(+), 11 deletions(-) - -diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c -index 3b23c0d..799668c 100644 ---- a/src/vmx/vmx.c -+++ b/src/vmx/vmx.c -@@ -2176,8 +2176,9 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - (*def)->transient = STRCASEEQ(mode, - "independent-nonpersistent"); - } else if (virFileHasSuffix(fileName, ".iso") || -- STRCASEEQ(deviceType, "atapi-cdrom") || -- STRCASEEQ(deviceType, "cdrom-raw")) { -+ (deviceType && -+ (STRCASEEQ(deviceType, "atapi-cdrom") || -+ STRCASEEQ(deviceType, "cdrom-raw")))) { - /* - * This function was called in order to parse a harddisk device, - * but .iso files, 'atapi-cdrom', and 'cdrom-raw' devices are for -@@ -2197,13 +2198,11 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - if (virFileHasSuffix(fileName, ".iso")) { - char *tmp; - -- if (deviceType != NULL) { -- if (STRCASENEQ(deviceType, "cdrom-image")) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Expecting VMX entry '%s' to be 'cdrom-image' " -- "but found '%s'"), deviceType_name, deviceType); -- goto cleanup; -- } -+ if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, -+ _("Expecting VMX entry '%s' to be 'cdrom-image' " -+ "but found '%s'"), deviceType_name, deviceType); -+ goto cleanup; - } - - virDomainDiskSetType(*def, VIR_STORAGE_TYPE_FILE); -@@ -2222,7 +2221,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - * handle it. - */ - goto ignore; -- } else if (STRCASEEQ(deviceType, "atapi-cdrom")) { -+ } else if (deviceType && STRCASEEQ(deviceType, "atapi-cdrom")) { - virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK); - - if (STRCASEEQ(fileName, "auto detect")) { -@@ -2231,7 +2230,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con - } else if (virDomainDiskSetSource(*def, fileName) < 0) { - goto cleanup; - } -- } else if (STRCASEEQ(deviceType, "cdrom-raw")) { -+ } else if (deviceType && STRCASEEQ(deviceType, "cdrom-raw")) { - /* Raw access CD-ROMs actually are device='lun' */ - (*def)->device = VIR_DOMAIN_DISK_DEVICE_LUN; - virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK); --- -2.5.2 - diff --git a/SOURCES/libvirt-vsh-Make-vshInitDebug-return-int-instead-of-void.patch b/SOURCES/libvirt-vsh-Make-vshInitDebug-return-int-instead-of-void.patch new file mode 100644 index 0000000..4845e15 --- /dev/null +++ b/SOURCES/libvirt-vsh-Make-vshInitDebug-return-int-instead-of-void.patch @@ -0,0 +1,73 @@ +From 47f7783276438e5c073004cba6351c0e880ed6c5 Mon Sep 17 00:00:00 2001 +Message-Id: <47f7783276438e5c073004cba6351c0e880ed6c5@dist-git> +From: Erik Skultety +Date: Tue, 2 Aug 2016 09:55:52 +0200 +Subject: [PATCH] vsh: Make vshInitDebug return int instead of void + +Well, the reason behind this change is that if the function is extended in some +way that e.g. would involve allocation we do not have a way of telling it to +the caller. More specifically, vshInitDebug only relies on some hardcoded +environment variables (by a mistake) that aren't documented anywhere so neither +virsh's nor virt-admin's documented environment variables take effect. One +possible solution would be duplicate the code for each CLI client or leave the +method be generic and provide means that it could figure out, which client +called it, thus initializing the proper environment variables but that could +involve operations that might as well fail in certain circumstances and the +caller should know that an error occurred. + +Signed-off-by: Erik Skultety +(cherry picked from commit 0ef07e19c7c29f1c03e95bf574fb98eee2243203) + +https://bugzilla.redhat.com/show_bug.cgi?id=1357363 +Signed-off-by: Erik Skultety +--- + tools/vsh.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/tools/vsh.c b/tools/vsh.c +index 2b78919..2f564e6 100644 +--- a/tools/vsh.c ++++ b/tools/vsh.c +@@ -2742,7 +2742,7 @@ vshReadline(vshControl *ctl, const char *prompt) + /* + * Initialize debug settings. + */ +-static void ++static int + vshInitDebug(vshControl *ctl) + { + const char *debugEnv; +@@ -2770,6 +2770,8 @@ vshInitDebug(vshControl *ctl) + vshOpenLogFile(ctl); + } + } ++ ++ return 0; + } + + +@@ -2792,9 +2794,9 @@ vshInit(vshControl *ctl, const vshCmdGrp *groups, const vshCmdDef *set) + + cmdGroups = groups; + cmdSet = set; +- vshInitDebug(ctl); + +- if (ctl->imode && vshReadlineInit(ctl) < 0) ++ if (vshInitDebug(ctl) < 0 || ++ (ctl->imode && vshReadlineInit(ctl) < 0)) + return false; + + return true; +@@ -2809,7 +2811,8 @@ vshInitReload(vshControl *ctl) + return false; + } + +- vshInitDebug(ctl); ++ if (vshInitDebug(ctl) < 0) ++ return false; + + if (ctl->imode) + vshReadlineDeinit(ctl); +-- +2.9.2 + diff --git a/SOURCES/symlinks b/SOURCES/symlinks new file mode 100644 index 0000000..a1816be --- /dev/null +++ b/SOURCES/symlinks @@ -0,0 +1,824 @@ +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-default.args qemuxml2argv-aarch64-gic-v2.args +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-both.args qemuxml2argv-aarch64-gic-v3.args +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-both.xml qemuxml2argv-aarch64-gic-none.xml +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-v2.args qemuxml2argv-aarch64-gic-v2.args +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-v2.xml qemuxml2argv-aarch64-gic-none.xml +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-v3.args qemuxml2argv-aarch64-gic-v3.args +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-v3.xml qemuxml2argv-aarch64-gic-none-v2.xml +tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none.args qemuxml2argv-aarch64-gic-v2.args +tests/qemuxml2argvdata/qemuxml2argv-ppc64-usb-controller-legacy.xml qemuxml2argv-ppc64-usb-controller.xml +tests/qemuxml2argvdata/qemuxml2argv-usb-controller-default-unavailable-q35.xml qemuxml2argv-usb-controller-default-q35.xml +tests/qemuxml2argvdata/qemuxml2argv-usb-controller-explicit-unavailable-q35.xml qemuxml2argv-usb-controller-explicit-q35.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-default.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-host.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-host.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-both.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-v2.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-v3.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-v2.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v2.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-v3.xml ../qemuxml2argvdata/qemuxml2argv-aarch64-gic-v3.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-detect-zeroes.xml ../qemuxml2argvdata/qemuxml2argv-disk-drive-detect-zeroes.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-encrypted-disk-usage.xml ../qemuxml2argvdata/qemuxml2argv-encrypted-disk-usage.xml +tests/qemuxml2xmloutdata/qemuxml2xmlout-luks-disks.xml ../qemuxml2argvdata/qemuxml2argv-luks-disks.xml +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu100 ../../cpu/cpu100 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu101 ../../cpu/cpu101 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu102 ../../cpu/cpu102 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu103 ../../cpu/cpu103 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu144 ../../cpu/cpu144 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu145 ../../cpu/cpu145 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu146 ../../cpu/cpu146 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu147 ../../cpu/cpu147 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu148 ../../cpu/cpu148 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu149 ../../cpu/cpu149 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu150 ../../cpu/cpu150 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu151 ../../cpu/cpu151 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu152 ../../cpu/cpu152 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu153 ../../cpu/cpu153 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu154 ../../cpu/cpu154 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu155 ../../cpu/cpu155 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu156 ../../cpu/cpu156 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu157 ../../cpu/cpu157 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu158 ../../cpu/cpu158 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu159 ../../cpu/cpu159 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu24 ../../cpu/cpu24 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu25 ../../cpu/cpu25 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu26 ../../cpu/cpu26 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu27 ../../cpu/cpu27 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu28 ../../cpu/cpu28 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu29 ../../cpu/cpu29 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu30 ../../cpu/cpu30 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu31 ../../cpu/cpu31 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu32 ../../cpu/cpu32 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu33 ../../cpu/cpu33 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu34 ../../cpu/cpu34 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu35 ../../cpu/cpu35 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu36 ../../cpu/cpu36 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu37 ../../cpu/cpu37 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu38 ../../cpu/cpu38 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu39 ../../cpu/cpu39 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu56 ../../cpu/cpu56 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu57 ../../cpu/cpu57 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu58 ../../cpu/cpu58 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu59 ../../cpu/cpu59 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu60 ../../cpu/cpu60 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu61 ../../cpu/cpu61 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu62 ../../cpu/cpu62 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu63 ../../cpu/cpu63 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu64 ../../cpu/cpu64 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu65 ../../cpu/cpu65 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu66 ../../cpu/cpu66 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu67 ../../cpu/cpu67 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu68 ../../cpu/cpu68 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu69 ../../cpu/cpu69 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu70 ../../cpu/cpu70 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu71 ../../cpu/cpu71 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu80 ../../cpu/cpu80 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu81 ../../cpu/cpu81 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu82 ../../cpu/cpu82 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu83 ../../cpu/cpu83 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu84 ../../cpu/cpu84 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu85 ../../cpu/cpu85 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu86 ../../cpu/cpu86 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu87 ../../cpu/cpu87 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu88 ../../cpu/cpu88 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu89 ../../cpu/cpu89 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu90 ../../cpu/cpu90 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu91 ../../cpu/cpu91 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu92 ../../cpu/cpu92 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu93 ../../cpu/cpu93 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu94 ../../cpu/cpu94 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu95 ../../cpu/cpu95 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu96 ../../cpu/cpu96 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu97 ../../cpu/cpu97 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu98 ../../cpu/cpu98 +tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu99 ../../cpu/cpu99 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu40 ../../cpu/cpu40 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu41 ../../cpu/cpu41 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu42 ../../cpu/cpu42 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu43 ../../cpu/cpu43 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu44 ../../cpu/cpu44 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu45 ../../cpu/cpu45 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu46 ../../cpu/cpu46 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu47 ../../cpu/cpu47 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu48 ../../cpu/cpu48 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu49 ../../cpu/cpu49 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu50 ../../cpu/cpu50 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu51 ../../cpu/cpu51 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu52 ../../cpu/cpu52 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu53 ../../cpu/cpu53 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu54 ../../cpu/cpu54 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu55 ../../cpu/cpu55 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu72 ../../cpu/cpu72 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu73 ../../cpu/cpu73 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu74 ../../cpu/cpu74 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu75 ../../cpu/cpu75 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu76 ../../cpu/cpu76 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu77 ../../cpu/cpu77 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu78 ../../cpu/cpu78 +tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu79 ../../cpu/cpu79 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu104 ../../cpu/cpu104 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu105 ../../cpu/cpu105 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu106 ../../cpu/cpu106 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu107 ../../cpu/cpu107 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu108 ../../cpu/cpu108 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu109 ../../cpu/cpu109 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu110 ../../cpu/cpu110 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu111 ../../cpu/cpu111 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu112 ../../cpu/cpu112 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu113 ../../cpu/cpu113 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu114 ../../cpu/cpu114 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu115 ../../cpu/cpu115 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu116 ../../cpu/cpu116 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu117 ../../cpu/cpu117 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu118 ../../cpu/cpu118 +tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu119 ../../cpu/cpu119 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu120 ../../cpu/cpu120 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu121 ../../cpu/cpu121 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu122 ../../cpu/cpu122 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu123 ../../cpu/cpu123 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu124 ../../cpu/cpu124 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu125 ../../cpu/cpu125 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu126 ../../cpu/cpu126 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu127 ../../cpu/cpu127 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu128 ../../cpu/cpu128 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu129 ../../cpu/cpu129 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu130 ../../cpu/cpu130 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu131 ../../cpu/cpu131 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu132 ../../cpu/cpu132 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu133 ../../cpu/cpu133 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu134 ../../cpu/cpu134 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu135 ../../cpu/cpu135 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu136 ../../cpu/cpu136 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu137 ../../cpu/cpu137 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu138 ../../cpu/cpu138 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu139 ../../cpu/cpu139 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu140 ../../cpu/cpu140 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu141 ../../cpu/cpu141 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu142 ../../cpu/cpu142 +tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu143 ../../cpu/cpu143 +tests/virhostcpudata/linux-subcores1/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-subcores1/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-subcores1/node/node0/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-subcores1/node/node0/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-subcores1/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-subcores1/node/node0/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-subcores1/node/node0/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-subcores1/node/node0/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-subcores1/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-subcores1/node/node0/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-subcores1/node/node0/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-subcores1/node/node0/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-subcores1/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-subcores1/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-subcores1/node/node0/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-subcores1/node/node0/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-subcores1/node/node0/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-subcores1/node/node0/cpu24 ../../cpu/cpu24 +tests/virhostcpudata/linux-subcores1/node/node0/cpu25 ../../cpu/cpu25 +tests/virhostcpudata/linux-subcores1/node/node0/cpu26 ../../cpu/cpu26 +tests/virhostcpudata/linux-subcores1/node/node0/cpu27 ../../cpu/cpu27 +tests/virhostcpudata/linux-subcores1/node/node0/cpu28 ../../cpu/cpu28 +tests/virhostcpudata/linux-subcores1/node/node0/cpu29 ../../cpu/cpu29 +tests/virhostcpudata/linux-subcores1/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-subcores1/node/node0/cpu30 ../../cpu/cpu30 +tests/virhostcpudata/linux-subcores1/node/node0/cpu31 ../../cpu/cpu31 +tests/virhostcpudata/linux-subcores1/node/node0/cpu32 ../../cpu/cpu32 +tests/virhostcpudata/linux-subcores1/node/node0/cpu33 ../../cpu/cpu33 +tests/virhostcpudata/linux-subcores1/node/node0/cpu34 ../../cpu/cpu34 +tests/virhostcpudata/linux-subcores1/node/node0/cpu35 ../../cpu/cpu35 +tests/virhostcpudata/linux-subcores1/node/node0/cpu36 ../../cpu/cpu36 +tests/virhostcpudata/linux-subcores1/node/node0/cpu37 ../../cpu/cpu37 +tests/virhostcpudata/linux-subcores1/node/node0/cpu38 ../../cpu/cpu38 +tests/virhostcpudata/linux-subcores1/node/node0/cpu39 ../../cpu/cpu39 +tests/virhostcpudata/linux-subcores1/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-subcores1/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-subcores1/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-subcores1/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-subcores1/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-subcores1/node/node0/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-subcores1/node/node1/cpu40 ../../cpu/cpu40 +tests/virhostcpudata/linux-subcores1/node/node1/cpu41 ../../cpu/cpu41 +tests/virhostcpudata/linux-subcores1/node/node1/cpu42 ../../cpu/cpu42 +tests/virhostcpudata/linux-subcores1/node/node1/cpu43 ../../cpu/cpu43 +tests/virhostcpudata/linux-subcores1/node/node1/cpu44 ../../cpu/cpu44 +tests/virhostcpudata/linux-subcores1/node/node1/cpu45 ../../cpu/cpu45 +tests/virhostcpudata/linux-subcores1/node/node1/cpu46 ../../cpu/cpu46 +tests/virhostcpudata/linux-subcores1/node/node1/cpu47 ../../cpu/cpu47 +tests/virhostcpudata/linux-subcores1/node/node1/cpu48 ../../cpu/cpu48 +tests/virhostcpudata/linux-subcores1/node/node1/cpu49 ../../cpu/cpu49 +tests/virhostcpudata/linux-subcores1/node/node1/cpu50 ../../cpu/cpu50 +tests/virhostcpudata/linux-subcores1/node/node1/cpu51 ../../cpu/cpu51 +tests/virhostcpudata/linux-subcores1/node/node1/cpu52 ../../cpu/cpu52 +tests/virhostcpudata/linux-subcores1/node/node1/cpu53 ../../cpu/cpu53 +tests/virhostcpudata/linux-subcores1/node/node1/cpu54 ../../cpu/cpu54 +tests/virhostcpudata/linux-subcores1/node/node1/cpu55 ../../cpu/cpu55 +tests/virhostcpudata/linux-subcores1/node/node1/cpu56 ../../cpu/cpu56 +tests/virhostcpudata/linux-subcores1/node/node1/cpu57 ../../cpu/cpu57 +tests/virhostcpudata/linux-subcores1/node/node1/cpu58 ../../cpu/cpu58 +tests/virhostcpudata/linux-subcores1/node/node1/cpu59 ../../cpu/cpu59 +tests/virhostcpudata/linux-subcores1/node/node1/cpu60 ../../cpu/cpu60 +tests/virhostcpudata/linux-subcores1/node/node1/cpu61 ../../cpu/cpu61 +tests/virhostcpudata/linux-subcores1/node/node1/cpu62 ../../cpu/cpu62 +tests/virhostcpudata/linux-subcores1/node/node1/cpu63 ../../cpu/cpu63 +tests/virhostcpudata/linux-subcores1/node/node1/cpu64 ../../cpu/cpu64 +tests/virhostcpudata/linux-subcores1/node/node1/cpu65 ../../cpu/cpu65 +tests/virhostcpudata/linux-subcores1/node/node1/cpu66 ../../cpu/cpu66 +tests/virhostcpudata/linux-subcores1/node/node1/cpu67 ../../cpu/cpu67 +tests/virhostcpudata/linux-subcores1/node/node1/cpu68 ../../cpu/cpu68 +tests/virhostcpudata/linux-subcores1/node/node1/cpu69 ../../cpu/cpu69 +tests/virhostcpudata/linux-subcores1/node/node1/cpu70 ../../cpu/cpu70 +tests/virhostcpudata/linux-subcores1/node/node1/cpu71 ../../cpu/cpu71 +tests/virhostcpudata/linux-subcores1/node/node1/cpu72 ../../cpu/cpu72 +tests/virhostcpudata/linux-subcores1/node/node1/cpu73 ../../cpu/cpu73 +tests/virhostcpudata/linux-subcores1/node/node1/cpu74 ../../cpu/cpu74 +tests/virhostcpudata/linux-subcores1/node/node1/cpu75 ../../cpu/cpu75 +tests/virhostcpudata/linux-subcores1/node/node1/cpu76 ../../cpu/cpu76 +tests/virhostcpudata/linux-subcores1/node/node1/cpu77 ../../cpu/cpu77 +tests/virhostcpudata/linux-subcores1/node/node1/cpu78 ../../cpu/cpu78 +tests/virhostcpudata/linux-subcores1/node/node1/cpu79 ../../cpu/cpu79 +tests/virhostcpudata/linux-subcores1/node/node16/cpu100 ../../cpu/cpu100 +tests/virhostcpudata/linux-subcores1/node/node16/cpu101 ../../cpu/cpu101 +tests/virhostcpudata/linux-subcores1/node/node16/cpu102 ../../cpu/cpu102 +tests/virhostcpudata/linux-subcores1/node/node16/cpu103 ../../cpu/cpu103 +tests/virhostcpudata/linux-subcores1/node/node16/cpu104 ../../cpu/cpu104 +tests/virhostcpudata/linux-subcores1/node/node16/cpu105 ../../cpu/cpu105 +tests/virhostcpudata/linux-subcores1/node/node16/cpu106 ../../cpu/cpu106 +tests/virhostcpudata/linux-subcores1/node/node16/cpu107 ../../cpu/cpu107 +tests/virhostcpudata/linux-subcores1/node/node16/cpu108 ../../cpu/cpu108 +tests/virhostcpudata/linux-subcores1/node/node16/cpu109 ../../cpu/cpu109 +tests/virhostcpudata/linux-subcores1/node/node16/cpu110 ../../cpu/cpu110 +tests/virhostcpudata/linux-subcores1/node/node16/cpu111 ../../cpu/cpu111 +tests/virhostcpudata/linux-subcores1/node/node16/cpu112 ../../cpu/cpu112 +tests/virhostcpudata/linux-subcores1/node/node16/cpu113 ../../cpu/cpu113 +tests/virhostcpudata/linux-subcores1/node/node16/cpu114 ../../cpu/cpu114 +tests/virhostcpudata/linux-subcores1/node/node16/cpu115 ../../cpu/cpu115 +tests/virhostcpudata/linux-subcores1/node/node16/cpu116 ../../cpu/cpu116 +tests/virhostcpudata/linux-subcores1/node/node16/cpu117 ../../cpu/cpu117 +tests/virhostcpudata/linux-subcores1/node/node16/cpu118 ../../cpu/cpu118 +tests/virhostcpudata/linux-subcores1/node/node16/cpu119 ../../cpu/cpu119 +tests/virhostcpudata/linux-subcores1/node/node16/cpu80 ../../cpu/cpu80 +tests/virhostcpudata/linux-subcores1/node/node16/cpu81 ../../cpu/cpu81 +tests/virhostcpudata/linux-subcores1/node/node16/cpu82 ../../cpu/cpu82 +tests/virhostcpudata/linux-subcores1/node/node16/cpu83 ../../cpu/cpu83 +tests/virhostcpudata/linux-subcores1/node/node16/cpu84 ../../cpu/cpu84 +tests/virhostcpudata/linux-subcores1/node/node16/cpu85 ../../cpu/cpu85 +tests/virhostcpudata/linux-subcores1/node/node16/cpu86 ../../cpu/cpu86 +tests/virhostcpudata/linux-subcores1/node/node16/cpu87 ../../cpu/cpu87 +tests/virhostcpudata/linux-subcores1/node/node16/cpu88 ../../cpu/cpu88 +tests/virhostcpudata/linux-subcores1/node/node16/cpu89 ../../cpu/cpu89 +tests/virhostcpudata/linux-subcores1/node/node16/cpu90 ../../cpu/cpu90 +tests/virhostcpudata/linux-subcores1/node/node16/cpu91 ../../cpu/cpu91 +tests/virhostcpudata/linux-subcores1/node/node16/cpu92 ../../cpu/cpu92 +tests/virhostcpudata/linux-subcores1/node/node16/cpu93 ../../cpu/cpu93 +tests/virhostcpudata/linux-subcores1/node/node16/cpu94 ../../cpu/cpu94 +tests/virhostcpudata/linux-subcores1/node/node16/cpu95 ../../cpu/cpu95 +tests/virhostcpudata/linux-subcores1/node/node16/cpu96 ../../cpu/cpu96 +tests/virhostcpudata/linux-subcores1/node/node16/cpu97 ../../cpu/cpu97 +tests/virhostcpudata/linux-subcores1/node/node16/cpu98 ../../cpu/cpu98 +tests/virhostcpudata/linux-subcores1/node/node16/cpu99 ../../cpu/cpu99 +tests/virhostcpudata/linux-subcores1/node/node17/cpu120 ../../cpu/cpu120 +tests/virhostcpudata/linux-subcores1/node/node17/cpu121 ../../cpu/cpu121 +tests/virhostcpudata/linux-subcores1/node/node17/cpu122 ../../cpu/cpu122 +tests/virhostcpudata/linux-subcores1/node/node17/cpu123 ../../cpu/cpu123 +tests/virhostcpudata/linux-subcores1/node/node17/cpu124 ../../cpu/cpu124 +tests/virhostcpudata/linux-subcores1/node/node17/cpu125 ../../cpu/cpu125 +tests/virhostcpudata/linux-subcores1/node/node17/cpu126 ../../cpu/cpu126 +tests/virhostcpudata/linux-subcores1/node/node17/cpu127 ../../cpu/cpu127 +tests/virhostcpudata/linux-subcores1/node/node17/cpu128 ../../cpu/cpu128 +tests/virhostcpudata/linux-subcores1/node/node17/cpu129 ../../cpu/cpu129 +tests/virhostcpudata/linux-subcores1/node/node17/cpu130 ../../cpu/cpu130 +tests/virhostcpudata/linux-subcores1/node/node17/cpu131 ../../cpu/cpu131 +tests/virhostcpudata/linux-subcores1/node/node17/cpu132 ../../cpu/cpu132 +tests/virhostcpudata/linux-subcores1/node/node17/cpu133 ../../cpu/cpu133 +tests/virhostcpudata/linux-subcores1/node/node17/cpu134 ../../cpu/cpu134 +tests/virhostcpudata/linux-subcores1/node/node17/cpu135 ../../cpu/cpu135 +tests/virhostcpudata/linux-subcores1/node/node17/cpu136 ../../cpu/cpu136 +tests/virhostcpudata/linux-subcores1/node/node17/cpu137 ../../cpu/cpu137 +tests/virhostcpudata/linux-subcores1/node/node17/cpu138 ../../cpu/cpu138 +tests/virhostcpudata/linux-subcores1/node/node17/cpu139 ../../cpu/cpu139 +tests/virhostcpudata/linux-subcores1/node/node17/cpu140 ../../cpu/cpu140 +tests/virhostcpudata/linux-subcores1/node/node17/cpu141 ../../cpu/cpu141 +tests/virhostcpudata/linux-subcores1/node/node17/cpu142 ../../cpu/cpu142 +tests/virhostcpudata/linux-subcores1/node/node17/cpu143 ../../cpu/cpu143 +tests/virhostcpudata/linux-subcores1/node/node17/cpu144 ../../cpu/cpu144 +tests/virhostcpudata/linux-subcores1/node/node17/cpu145 ../../cpu/cpu145 +tests/virhostcpudata/linux-subcores1/node/node17/cpu146 ../../cpu/cpu146 +tests/virhostcpudata/linux-subcores1/node/node17/cpu147 ../../cpu/cpu147 +tests/virhostcpudata/linux-subcores1/node/node17/cpu148 ../../cpu/cpu148 +tests/virhostcpudata/linux-subcores1/node/node17/cpu149 ../../cpu/cpu149 +tests/virhostcpudata/linux-subcores1/node/node17/cpu150 ../../cpu/cpu150 +tests/virhostcpudata/linux-subcores1/node/node17/cpu151 ../../cpu/cpu151 +tests/virhostcpudata/linux-subcores1/node/node17/cpu152 ../../cpu/cpu152 +tests/virhostcpudata/linux-subcores1/node/node17/cpu153 ../../cpu/cpu153 +tests/virhostcpudata/linux-subcores1/node/node17/cpu154 ../../cpu/cpu154 +tests/virhostcpudata/linux-subcores1/node/node17/cpu155 ../../cpu/cpu155 +tests/virhostcpudata/linux-subcores1/node/node17/cpu156 ../../cpu/cpu156 +tests/virhostcpudata/linux-subcores1/node/node17/cpu157 ../../cpu/cpu157 +tests/virhostcpudata/linux-subcores1/node/node17/cpu158 ../../cpu/cpu158 +tests/virhostcpudata/linux-subcores1/node/node17/cpu159 ../../cpu/cpu159 +tests/virhostcpudata/linux-subcores2/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-subcores2/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-subcores2/node/node0/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-subcores2/node/node0/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-subcores2/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-subcores2/node/node0/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-subcores2/node/node0/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-subcores2/node/node0/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-subcores2/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-subcores2/node/node0/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-subcores2/node/node0/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-subcores2/node/node0/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-subcores2/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-subcores2/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-subcores2/node/node0/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-subcores2/node/node0/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-subcores2/node/node0/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-subcores2/node/node0/cpu24 ../../cpu/cpu24 +tests/virhostcpudata/linux-subcores2/node/node0/cpu25 ../../cpu/cpu25 +tests/virhostcpudata/linux-subcores2/node/node0/cpu26 ../../cpu/cpu26 +tests/virhostcpudata/linux-subcores2/node/node0/cpu27 ../../cpu/cpu27 +tests/virhostcpudata/linux-subcores2/node/node0/cpu28 ../../cpu/cpu28 +tests/virhostcpudata/linux-subcores2/node/node0/cpu29 ../../cpu/cpu29 +tests/virhostcpudata/linux-subcores2/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-subcores2/node/node0/cpu30 ../../cpu/cpu30 +tests/virhostcpudata/linux-subcores2/node/node0/cpu31 ../../cpu/cpu31 +tests/virhostcpudata/linux-subcores2/node/node0/cpu32 ../../cpu/cpu32 +tests/virhostcpudata/linux-subcores2/node/node0/cpu33 ../../cpu/cpu33 +tests/virhostcpudata/linux-subcores2/node/node0/cpu34 ../../cpu/cpu34 +tests/virhostcpudata/linux-subcores2/node/node0/cpu35 ../../cpu/cpu35 +tests/virhostcpudata/linux-subcores2/node/node0/cpu36 ../../cpu/cpu36 +tests/virhostcpudata/linux-subcores2/node/node0/cpu37 ../../cpu/cpu37 +tests/virhostcpudata/linux-subcores2/node/node0/cpu38 ../../cpu/cpu38 +tests/virhostcpudata/linux-subcores2/node/node0/cpu39 ../../cpu/cpu39 +tests/virhostcpudata/linux-subcores2/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-subcores2/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-subcores2/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-subcores2/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-subcores2/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-subcores2/node/node0/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-subcores2/node/node1/cpu40 ../../cpu/cpu40 +tests/virhostcpudata/linux-subcores2/node/node1/cpu41 ../../cpu/cpu41 +tests/virhostcpudata/linux-subcores2/node/node1/cpu42 ../../cpu/cpu42 +tests/virhostcpudata/linux-subcores2/node/node1/cpu43 ../../cpu/cpu43 +tests/virhostcpudata/linux-subcores2/node/node1/cpu44 ../../cpu/cpu44 +tests/virhostcpudata/linux-subcores2/node/node1/cpu45 ../../cpu/cpu45 +tests/virhostcpudata/linux-subcores2/node/node1/cpu46 ../../cpu/cpu46 +tests/virhostcpudata/linux-subcores2/node/node1/cpu47 ../../cpu/cpu47 +tests/virhostcpudata/linux-subcores2/node/node1/cpu48 ../../cpu/cpu48 +tests/virhostcpudata/linux-subcores2/node/node1/cpu49 ../../cpu/cpu49 +tests/virhostcpudata/linux-subcores2/node/node1/cpu50 ../../cpu/cpu50 +tests/virhostcpudata/linux-subcores2/node/node1/cpu51 ../../cpu/cpu51 +tests/virhostcpudata/linux-subcores2/node/node1/cpu52 ../../cpu/cpu52 +tests/virhostcpudata/linux-subcores2/node/node1/cpu53 ../../cpu/cpu53 +tests/virhostcpudata/linux-subcores2/node/node1/cpu54 ../../cpu/cpu54 +tests/virhostcpudata/linux-subcores2/node/node1/cpu55 ../../cpu/cpu55 +tests/virhostcpudata/linux-subcores2/node/node1/cpu56 ../../cpu/cpu56 +tests/virhostcpudata/linux-subcores2/node/node1/cpu57 ../../cpu/cpu57 +tests/virhostcpudata/linux-subcores2/node/node1/cpu58 ../../cpu/cpu58 +tests/virhostcpudata/linux-subcores2/node/node1/cpu59 ../../cpu/cpu59 +tests/virhostcpudata/linux-subcores2/node/node1/cpu60 ../../cpu/cpu60 +tests/virhostcpudata/linux-subcores2/node/node1/cpu61 ../../cpu/cpu61 +tests/virhostcpudata/linux-subcores2/node/node1/cpu62 ../../cpu/cpu62 +tests/virhostcpudata/linux-subcores2/node/node1/cpu63 ../../cpu/cpu63 +tests/virhostcpudata/linux-subcores2/node/node1/cpu64 ../../cpu/cpu64 +tests/virhostcpudata/linux-subcores2/node/node1/cpu65 ../../cpu/cpu65 +tests/virhostcpudata/linux-subcores2/node/node1/cpu66 ../../cpu/cpu66 +tests/virhostcpudata/linux-subcores2/node/node1/cpu67 ../../cpu/cpu67 +tests/virhostcpudata/linux-subcores2/node/node1/cpu68 ../../cpu/cpu68 +tests/virhostcpudata/linux-subcores2/node/node1/cpu69 ../../cpu/cpu69 +tests/virhostcpudata/linux-subcores2/node/node1/cpu70 ../../cpu/cpu70 +tests/virhostcpudata/linux-subcores2/node/node1/cpu71 ../../cpu/cpu71 +tests/virhostcpudata/linux-subcores2/node/node1/cpu72 ../../cpu/cpu72 +tests/virhostcpudata/linux-subcores2/node/node1/cpu73 ../../cpu/cpu73 +tests/virhostcpudata/linux-subcores2/node/node1/cpu74 ../../cpu/cpu74 +tests/virhostcpudata/linux-subcores2/node/node1/cpu75 ../../cpu/cpu75 +tests/virhostcpudata/linux-subcores2/node/node1/cpu76 ../../cpu/cpu76 +tests/virhostcpudata/linux-subcores2/node/node1/cpu77 ../../cpu/cpu77 +tests/virhostcpudata/linux-subcores2/node/node1/cpu78 ../../cpu/cpu78 +tests/virhostcpudata/linux-subcores2/node/node1/cpu79 ../../cpu/cpu79 +tests/virhostcpudata/linux-subcores2/node/node16/cpu100 ../../cpu/cpu100 +tests/virhostcpudata/linux-subcores2/node/node16/cpu101 ../../cpu/cpu101 +tests/virhostcpudata/linux-subcores2/node/node16/cpu102 ../../cpu/cpu102 +tests/virhostcpudata/linux-subcores2/node/node16/cpu103 ../../cpu/cpu103 +tests/virhostcpudata/linux-subcores2/node/node16/cpu104 ../../cpu/cpu104 +tests/virhostcpudata/linux-subcores2/node/node16/cpu105 ../../cpu/cpu105 +tests/virhostcpudata/linux-subcores2/node/node16/cpu106 ../../cpu/cpu106 +tests/virhostcpudata/linux-subcores2/node/node16/cpu107 ../../cpu/cpu107 +tests/virhostcpudata/linux-subcores2/node/node16/cpu108 ../../cpu/cpu108 +tests/virhostcpudata/linux-subcores2/node/node16/cpu109 ../../cpu/cpu109 +tests/virhostcpudata/linux-subcores2/node/node16/cpu110 ../../cpu/cpu110 +tests/virhostcpudata/linux-subcores2/node/node16/cpu111 ../../cpu/cpu111 +tests/virhostcpudata/linux-subcores2/node/node16/cpu112 ../../cpu/cpu112 +tests/virhostcpudata/linux-subcores2/node/node16/cpu113 ../../cpu/cpu113 +tests/virhostcpudata/linux-subcores2/node/node16/cpu114 ../../cpu/cpu114 +tests/virhostcpudata/linux-subcores2/node/node16/cpu115 ../../cpu/cpu115 +tests/virhostcpudata/linux-subcores2/node/node16/cpu116 ../../cpu/cpu116 +tests/virhostcpudata/linux-subcores2/node/node16/cpu117 ../../cpu/cpu117 +tests/virhostcpudata/linux-subcores2/node/node16/cpu118 ../../cpu/cpu118 +tests/virhostcpudata/linux-subcores2/node/node16/cpu119 ../../cpu/cpu119 +tests/virhostcpudata/linux-subcores2/node/node16/cpu80 ../../cpu/cpu80 +tests/virhostcpudata/linux-subcores2/node/node16/cpu81 ../../cpu/cpu81 +tests/virhostcpudata/linux-subcores2/node/node16/cpu82 ../../cpu/cpu82 +tests/virhostcpudata/linux-subcores2/node/node16/cpu83 ../../cpu/cpu83 +tests/virhostcpudata/linux-subcores2/node/node16/cpu84 ../../cpu/cpu84 +tests/virhostcpudata/linux-subcores2/node/node16/cpu85 ../../cpu/cpu85 +tests/virhostcpudata/linux-subcores2/node/node16/cpu86 ../../cpu/cpu86 +tests/virhostcpudata/linux-subcores2/node/node16/cpu87 ../../cpu/cpu87 +tests/virhostcpudata/linux-subcores2/node/node16/cpu88 ../../cpu/cpu88 +tests/virhostcpudata/linux-subcores2/node/node16/cpu89 ../../cpu/cpu89 +tests/virhostcpudata/linux-subcores2/node/node16/cpu90 ../../cpu/cpu90 +tests/virhostcpudata/linux-subcores2/node/node16/cpu91 ../../cpu/cpu91 +tests/virhostcpudata/linux-subcores2/node/node16/cpu92 ../../cpu/cpu92 +tests/virhostcpudata/linux-subcores2/node/node16/cpu93 ../../cpu/cpu93 +tests/virhostcpudata/linux-subcores2/node/node16/cpu94 ../../cpu/cpu94 +tests/virhostcpudata/linux-subcores2/node/node16/cpu95 ../../cpu/cpu95 +tests/virhostcpudata/linux-subcores2/node/node16/cpu96 ../../cpu/cpu96 +tests/virhostcpudata/linux-subcores2/node/node16/cpu97 ../../cpu/cpu97 +tests/virhostcpudata/linux-subcores2/node/node16/cpu98 ../../cpu/cpu98 +tests/virhostcpudata/linux-subcores2/node/node16/cpu99 ../../cpu/cpu99 +tests/virhostcpudata/linux-subcores2/node/node17/cpu120 ../../cpu/cpu120 +tests/virhostcpudata/linux-subcores2/node/node17/cpu121 ../../cpu/cpu121 +tests/virhostcpudata/linux-subcores2/node/node17/cpu122 ../../cpu/cpu122 +tests/virhostcpudata/linux-subcores2/node/node17/cpu123 ../../cpu/cpu123 +tests/virhostcpudata/linux-subcores2/node/node17/cpu124 ../../cpu/cpu124 +tests/virhostcpudata/linux-subcores2/node/node17/cpu125 ../../cpu/cpu125 +tests/virhostcpudata/linux-subcores2/node/node17/cpu126 ../../cpu/cpu126 +tests/virhostcpudata/linux-subcores2/node/node17/cpu127 ../../cpu/cpu127 +tests/virhostcpudata/linux-subcores2/node/node17/cpu128 ../../cpu/cpu128 +tests/virhostcpudata/linux-subcores2/node/node17/cpu129 ../../cpu/cpu129 +tests/virhostcpudata/linux-subcores2/node/node17/cpu130 ../../cpu/cpu130 +tests/virhostcpudata/linux-subcores2/node/node17/cpu131 ../../cpu/cpu131 +tests/virhostcpudata/linux-subcores2/node/node17/cpu132 ../../cpu/cpu132 +tests/virhostcpudata/linux-subcores2/node/node17/cpu133 ../../cpu/cpu133 +tests/virhostcpudata/linux-subcores2/node/node17/cpu134 ../../cpu/cpu134 +tests/virhostcpudata/linux-subcores2/node/node17/cpu135 ../../cpu/cpu135 +tests/virhostcpudata/linux-subcores2/node/node17/cpu136 ../../cpu/cpu136 +tests/virhostcpudata/linux-subcores2/node/node17/cpu137 ../../cpu/cpu137 +tests/virhostcpudata/linux-subcores2/node/node17/cpu138 ../../cpu/cpu138 +tests/virhostcpudata/linux-subcores2/node/node17/cpu139 ../../cpu/cpu139 +tests/virhostcpudata/linux-subcores2/node/node17/cpu140 ../../cpu/cpu140 +tests/virhostcpudata/linux-subcores2/node/node17/cpu141 ../../cpu/cpu141 +tests/virhostcpudata/linux-subcores2/node/node17/cpu142 ../../cpu/cpu142 +tests/virhostcpudata/linux-subcores2/node/node17/cpu143 ../../cpu/cpu143 +tests/virhostcpudata/linux-subcores2/node/node17/cpu144 ../../cpu/cpu144 +tests/virhostcpudata/linux-subcores2/node/node17/cpu145 ../../cpu/cpu145 +tests/virhostcpudata/linux-subcores2/node/node17/cpu146 ../../cpu/cpu146 +tests/virhostcpudata/linux-subcores2/node/node17/cpu147 ../../cpu/cpu147 +tests/virhostcpudata/linux-subcores2/node/node17/cpu148 ../../cpu/cpu148 +tests/virhostcpudata/linux-subcores2/node/node17/cpu149 ../../cpu/cpu149 +tests/virhostcpudata/linux-subcores2/node/node17/cpu150 ../../cpu/cpu150 +tests/virhostcpudata/linux-subcores2/node/node17/cpu151 ../../cpu/cpu151 +tests/virhostcpudata/linux-subcores2/node/node17/cpu152 ../../cpu/cpu152 +tests/virhostcpudata/linux-subcores2/node/node17/cpu153 ../../cpu/cpu153 +tests/virhostcpudata/linux-subcores2/node/node17/cpu154 ../../cpu/cpu154 +tests/virhostcpudata/linux-subcores2/node/node17/cpu155 ../../cpu/cpu155 +tests/virhostcpudata/linux-subcores2/node/node17/cpu156 ../../cpu/cpu156 +tests/virhostcpudata/linux-subcores2/node/node17/cpu157 ../../cpu/cpu157 +tests/virhostcpudata/linux-subcores2/node/node17/cpu158 ../../cpu/cpu158 +tests/virhostcpudata/linux-subcores2/node/node17/cpu159 ../../cpu/cpu159 +tests/virhostcpudata/linux-subcores3/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-subcores3/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-subcores3/node/node0/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-subcores3/node/node0/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-subcores3/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-subcores3/node/node0/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-subcores3/node/node0/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-subcores3/node/node0/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-subcores3/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-subcores3/node/node0/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-subcores3/node/node0/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-subcores3/node/node0/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-subcores3/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-subcores3/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-subcores3/node/node0/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-subcores3/node/node0/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-subcores3/node/node0/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-subcores3/node/node0/cpu24 ../../cpu/cpu24 +tests/virhostcpudata/linux-subcores3/node/node0/cpu25 ../../cpu/cpu25 +tests/virhostcpudata/linux-subcores3/node/node0/cpu26 ../../cpu/cpu26 +tests/virhostcpudata/linux-subcores3/node/node0/cpu27 ../../cpu/cpu27 +tests/virhostcpudata/linux-subcores3/node/node0/cpu28 ../../cpu/cpu28 +tests/virhostcpudata/linux-subcores3/node/node0/cpu29 ../../cpu/cpu29 +tests/virhostcpudata/linux-subcores3/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-subcores3/node/node0/cpu30 ../../cpu/cpu30 +tests/virhostcpudata/linux-subcores3/node/node0/cpu31 ../../cpu/cpu31 +tests/virhostcpudata/linux-subcores3/node/node0/cpu32 ../../cpu/cpu32 +tests/virhostcpudata/linux-subcores3/node/node0/cpu33 ../../cpu/cpu33 +tests/virhostcpudata/linux-subcores3/node/node0/cpu34 ../../cpu/cpu34 +tests/virhostcpudata/linux-subcores3/node/node0/cpu35 ../../cpu/cpu35 +tests/virhostcpudata/linux-subcores3/node/node0/cpu36 ../../cpu/cpu36 +tests/virhostcpudata/linux-subcores3/node/node0/cpu37 ../../cpu/cpu37 +tests/virhostcpudata/linux-subcores3/node/node0/cpu38 ../../cpu/cpu38 +tests/virhostcpudata/linux-subcores3/node/node0/cpu39 ../../cpu/cpu39 +tests/virhostcpudata/linux-subcores3/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-subcores3/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-subcores3/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-subcores3/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-subcores3/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-subcores3/node/node0/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-subcores3/node/node1/cpu40 ../../cpu/cpu40 +tests/virhostcpudata/linux-subcores3/node/node1/cpu41 ../../cpu/cpu41 +tests/virhostcpudata/linux-subcores3/node/node1/cpu42 ../../cpu/cpu42 +tests/virhostcpudata/linux-subcores3/node/node1/cpu43 ../../cpu/cpu43 +tests/virhostcpudata/linux-subcores3/node/node1/cpu44 ../../cpu/cpu44 +tests/virhostcpudata/linux-subcores3/node/node1/cpu45 ../../cpu/cpu45 +tests/virhostcpudata/linux-subcores3/node/node1/cpu46 ../../cpu/cpu46 +tests/virhostcpudata/linux-subcores3/node/node1/cpu47 ../../cpu/cpu47 +tests/virhostcpudata/linux-subcores3/node/node1/cpu48 ../../cpu/cpu48 +tests/virhostcpudata/linux-subcores3/node/node1/cpu49 ../../cpu/cpu49 +tests/virhostcpudata/linux-subcores3/node/node1/cpu50 ../../cpu/cpu50 +tests/virhostcpudata/linux-subcores3/node/node1/cpu51 ../../cpu/cpu51 +tests/virhostcpudata/linux-subcores3/node/node1/cpu52 ../../cpu/cpu52 +tests/virhostcpudata/linux-subcores3/node/node1/cpu53 ../../cpu/cpu53 +tests/virhostcpudata/linux-subcores3/node/node1/cpu54 ../../cpu/cpu54 +tests/virhostcpudata/linux-subcores3/node/node1/cpu55 ../../cpu/cpu55 +tests/virhostcpudata/linux-subcores3/node/node1/cpu56 ../../cpu/cpu56 +tests/virhostcpudata/linux-subcores3/node/node1/cpu57 ../../cpu/cpu57 +tests/virhostcpudata/linux-subcores3/node/node1/cpu58 ../../cpu/cpu58 +tests/virhostcpudata/linux-subcores3/node/node1/cpu59 ../../cpu/cpu59 +tests/virhostcpudata/linux-subcores3/node/node1/cpu60 ../../cpu/cpu60 +tests/virhostcpudata/linux-subcores3/node/node1/cpu61 ../../cpu/cpu61 +tests/virhostcpudata/linux-subcores3/node/node1/cpu62 ../../cpu/cpu62 +tests/virhostcpudata/linux-subcores3/node/node1/cpu63 ../../cpu/cpu63 +tests/virhostcpudata/linux-subcores3/node/node1/cpu64 ../../cpu/cpu64 +tests/virhostcpudata/linux-subcores3/node/node1/cpu65 ../../cpu/cpu65 +tests/virhostcpudata/linux-subcores3/node/node1/cpu66 ../../cpu/cpu66 +tests/virhostcpudata/linux-subcores3/node/node1/cpu67 ../../cpu/cpu67 +tests/virhostcpudata/linux-subcores3/node/node1/cpu68 ../../cpu/cpu68 +tests/virhostcpudata/linux-subcores3/node/node1/cpu69 ../../cpu/cpu69 +tests/virhostcpudata/linux-subcores3/node/node1/cpu70 ../../cpu/cpu70 +tests/virhostcpudata/linux-subcores3/node/node1/cpu71 ../../cpu/cpu71 +tests/virhostcpudata/linux-subcores3/node/node1/cpu72 ../../cpu/cpu72 +tests/virhostcpudata/linux-subcores3/node/node1/cpu73 ../../cpu/cpu73 +tests/virhostcpudata/linux-subcores3/node/node1/cpu74 ../../cpu/cpu74 +tests/virhostcpudata/linux-subcores3/node/node1/cpu75 ../../cpu/cpu75 +tests/virhostcpudata/linux-subcores3/node/node1/cpu76 ../../cpu/cpu76 +tests/virhostcpudata/linux-subcores3/node/node1/cpu77 ../../cpu/cpu77 +tests/virhostcpudata/linux-subcores3/node/node1/cpu78 ../../cpu/cpu78 +tests/virhostcpudata/linux-subcores3/node/node1/cpu79 ../../cpu/cpu79 +tests/virhostcpudata/linux-subcores3/node/node16/cpu100 ../../cpu/cpu100 +tests/virhostcpudata/linux-subcores3/node/node16/cpu101 ../../cpu/cpu101 +tests/virhostcpudata/linux-subcores3/node/node16/cpu102 ../../cpu/cpu102 +tests/virhostcpudata/linux-subcores3/node/node16/cpu103 ../../cpu/cpu103 +tests/virhostcpudata/linux-subcores3/node/node16/cpu104 ../../cpu/cpu104 +tests/virhostcpudata/linux-subcores3/node/node16/cpu105 ../../cpu/cpu105 +tests/virhostcpudata/linux-subcores3/node/node16/cpu106 ../../cpu/cpu106 +tests/virhostcpudata/linux-subcores3/node/node16/cpu107 ../../cpu/cpu107 +tests/virhostcpudata/linux-subcores3/node/node16/cpu108 ../../cpu/cpu108 +tests/virhostcpudata/linux-subcores3/node/node16/cpu109 ../../cpu/cpu109 +tests/virhostcpudata/linux-subcores3/node/node16/cpu110 ../../cpu/cpu110 +tests/virhostcpudata/linux-subcores3/node/node16/cpu111 ../../cpu/cpu111 +tests/virhostcpudata/linux-subcores3/node/node16/cpu112 ../../cpu/cpu112 +tests/virhostcpudata/linux-subcores3/node/node16/cpu113 ../../cpu/cpu113 +tests/virhostcpudata/linux-subcores3/node/node16/cpu114 ../../cpu/cpu114 +tests/virhostcpudata/linux-subcores3/node/node16/cpu115 ../../cpu/cpu115 +tests/virhostcpudata/linux-subcores3/node/node16/cpu116 ../../cpu/cpu116 +tests/virhostcpudata/linux-subcores3/node/node16/cpu117 ../../cpu/cpu117 +tests/virhostcpudata/linux-subcores3/node/node16/cpu118 ../../cpu/cpu118 +tests/virhostcpudata/linux-subcores3/node/node16/cpu119 ../../cpu/cpu119 +tests/virhostcpudata/linux-subcores3/node/node16/cpu80 ../../cpu/cpu80 +tests/virhostcpudata/linux-subcores3/node/node16/cpu81 ../../cpu/cpu81 +tests/virhostcpudata/linux-subcores3/node/node16/cpu82 ../../cpu/cpu82 +tests/virhostcpudata/linux-subcores3/node/node16/cpu83 ../../cpu/cpu83 +tests/virhostcpudata/linux-subcores3/node/node16/cpu84 ../../cpu/cpu84 +tests/virhostcpudata/linux-subcores3/node/node16/cpu85 ../../cpu/cpu85 +tests/virhostcpudata/linux-subcores3/node/node16/cpu86 ../../cpu/cpu86 +tests/virhostcpudata/linux-subcores3/node/node16/cpu87 ../../cpu/cpu87 +tests/virhostcpudata/linux-subcores3/node/node16/cpu88 ../../cpu/cpu88 +tests/virhostcpudata/linux-subcores3/node/node16/cpu89 ../../cpu/cpu89 +tests/virhostcpudata/linux-subcores3/node/node16/cpu90 ../../cpu/cpu90 +tests/virhostcpudata/linux-subcores3/node/node16/cpu91 ../../cpu/cpu91 +tests/virhostcpudata/linux-subcores3/node/node16/cpu92 ../../cpu/cpu92 +tests/virhostcpudata/linux-subcores3/node/node16/cpu93 ../../cpu/cpu93 +tests/virhostcpudata/linux-subcores3/node/node16/cpu94 ../../cpu/cpu94 +tests/virhostcpudata/linux-subcores3/node/node16/cpu95 ../../cpu/cpu95 +tests/virhostcpudata/linux-subcores3/node/node16/cpu96 ../../cpu/cpu96 +tests/virhostcpudata/linux-subcores3/node/node16/cpu97 ../../cpu/cpu97 +tests/virhostcpudata/linux-subcores3/node/node16/cpu98 ../../cpu/cpu98 +tests/virhostcpudata/linux-subcores3/node/node16/cpu99 ../../cpu/cpu99 +tests/virhostcpudata/linux-subcores3/node/node17/cpu120 ../../cpu/cpu120 +tests/virhostcpudata/linux-subcores3/node/node17/cpu121 ../../cpu/cpu121 +tests/virhostcpudata/linux-subcores3/node/node17/cpu122 ../../cpu/cpu122 +tests/virhostcpudata/linux-subcores3/node/node17/cpu123 ../../cpu/cpu123 +tests/virhostcpudata/linux-subcores3/node/node17/cpu124 ../../cpu/cpu124 +tests/virhostcpudata/linux-subcores3/node/node17/cpu125 ../../cpu/cpu125 +tests/virhostcpudata/linux-subcores3/node/node17/cpu126 ../../cpu/cpu126 +tests/virhostcpudata/linux-subcores3/node/node17/cpu127 ../../cpu/cpu127 +tests/virhostcpudata/linux-subcores3/node/node17/cpu128 ../../cpu/cpu128 +tests/virhostcpudata/linux-subcores3/node/node17/cpu129 ../../cpu/cpu129 +tests/virhostcpudata/linux-subcores3/node/node17/cpu130 ../../cpu/cpu130 +tests/virhostcpudata/linux-subcores3/node/node17/cpu131 ../../cpu/cpu131 +tests/virhostcpudata/linux-subcores3/node/node17/cpu132 ../../cpu/cpu132 +tests/virhostcpudata/linux-subcores3/node/node17/cpu133 ../../cpu/cpu133 +tests/virhostcpudata/linux-subcores3/node/node17/cpu134 ../../cpu/cpu134 +tests/virhostcpudata/linux-subcores3/node/node17/cpu135 ../../cpu/cpu135 +tests/virhostcpudata/linux-subcores3/node/node17/cpu136 ../../cpu/cpu136 +tests/virhostcpudata/linux-subcores3/node/node17/cpu137 ../../cpu/cpu137 +tests/virhostcpudata/linux-subcores3/node/node17/cpu138 ../../cpu/cpu138 +tests/virhostcpudata/linux-subcores3/node/node17/cpu139 ../../cpu/cpu139 +tests/virhostcpudata/linux-subcores3/node/node17/cpu140 ../../cpu/cpu140 +tests/virhostcpudata/linux-subcores3/node/node17/cpu141 ../../cpu/cpu141 +tests/virhostcpudata/linux-subcores3/node/node17/cpu142 ../../cpu/cpu142 +tests/virhostcpudata/linux-subcores3/node/node17/cpu143 ../../cpu/cpu143 +tests/virhostcpudata/linux-subcores3/node/node17/cpu144 ../../cpu/cpu144 +tests/virhostcpudata/linux-subcores3/node/node17/cpu145 ../../cpu/cpu145 +tests/virhostcpudata/linux-subcores3/node/node17/cpu146 ../../cpu/cpu146 +tests/virhostcpudata/linux-subcores3/node/node17/cpu147 ../../cpu/cpu147 +tests/virhostcpudata/linux-subcores3/node/node17/cpu148 ../../cpu/cpu148 +tests/virhostcpudata/linux-subcores3/node/node17/cpu149 ../../cpu/cpu149 +tests/virhostcpudata/linux-subcores3/node/node17/cpu150 ../../cpu/cpu150 +tests/virhostcpudata/linux-subcores3/node/node17/cpu151 ../../cpu/cpu151 +tests/virhostcpudata/linux-subcores3/node/node17/cpu152 ../../cpu/cpu152 +tests/virhostcpudata/linux-subcores3/node/node17/cpu153 ../../cpu/cpu153 +tests/virhostcpudata/linux-subcores3/node/node17/cpu154 ../../cpu/cpu154 +tests/virhostcpudata/linux-subcores3/node/node17/cpu155 ../../cpu/cpu155 +tests/virhostcpudata/linux-subcores3/node/node17/cpu156 ../../cpu/cpu156 +tests/virhostcpudata/linux-subcores3/node/node17/cpu157 ../../cpu/cpu157 +tests/virhostcpudata/linux-subcores3/node/node17/cpu158 ../../cpu/cpu158 +tests/virhostcpudata/linux-subcores3/node/node17/cpu159 ../../cpu/cpu159 +tests/virhostcpudata/linux-test2/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-test2/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-test3/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-test3/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-test3/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-test3/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-test3/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-test3/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-test3/node/node1/cpu24 ../../cpu/cpu24 +tests/virhostcpudata/linux-test3/node/node1/cpu28 ../../cpu/cpu28 +tests/virhostcpudata/linux-test3/node/node1/cpu32 ../../cpu/cpu32 +tests/virhostcpudata/linux-test3/node/node1/cpu36 ../../cpu/cpu36 +tests/virhostcpudata/linux-test3/node/node1/cpu40 ../../cpu/cpu40 +tests/virhostcpudata/linux-test3/node/node1/cpu44 ../../cpu/cpu44 +tests/virhostcpudata/linux-test3/node/node2/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-test3/node/node2/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-test3/node/node2/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-test3/node/node2/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-test3/node/node2/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-test3/node/node2/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-test3/node/node3/cpu27 ../../cpu/cpu27 +tests/virhostcpudata/linux-test3/node/node3/cpu31 ../../cpu/cpu31 +tests/virhostcpudata/linux-test3/node/node3/cpu35 ../../cpu/cpu35 +tests/virhostcpudata/linux-test3/node/node3/cpu39 ../../cpu/cpu39 +tests/virhostcpudata/linux-test3/node/node3/cpu43 ../../cpu/cpu43 +tests/virhostcpudata/linux-test3/node/node3/cpu47 ../../cpu/cpu47 +tests/virhostcpudata/linux-test3/node/node4/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-test3/node/node4/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-test3/node/node4/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-test3/node/node4/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-test3/node/node4/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-test3/node/node4/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-test3/node/node5/cpu26 ../../cpu/cpu26 +tests/virhostcpudata/linux-test3/node/node5/cpu30 ../../cpu/cpu30 +tests/virhostcpudata/linux-test3/node/node5/cpu34 ../../cpu/cpu34 +tests/virhostcpudata/linux-test3/node/node5/cpu38 ../../cpu/cpu38 +tests/virhostcpudata/linux-test3/node/node5/cpu42 ../../cpu/cpu42 +tests/virhostcpudata/linux-test3/node/node5/cpu46 ../../cpu/cpu46 +tests/virhostcpudata/linux-test3/node/node6/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-test3/node/node6/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-test3/node/node6/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-test3/node/node6/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-test3/node/node6/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-test3/node/node6/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-test3/node/node7/cpu25 ../../cpu/cpu25 +tests/virhostcpudata/linux-test3/node/node7/cpu29 ../../cpu/cpu29 +tests/virhostcpudata/linux-test3/node/node7/cpu33 ../../cpu/cpu33 +tests/virhostcpudata/linux-test3/node/node7/cpu37 ../../cpu/cpu37 +tests/virhostcpudata/linux-test3/node/node7/cpu41 ../../cpu/cpu41 +tests/virhostcpudata/linux-test3/node/node7/cpu45 ../../cpu/cpu45 +tests/virhostcpudata/linux-test4/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-test4/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-test4/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-test4/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-test4/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-test4/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-test4/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-test4/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-test4/node/node1/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-test4/node/node1/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-test4/node/node1/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-test4/node/node1/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-test4/node/node1/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-test4/node/node1/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-test4/node/node1/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-test4/node/node1/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-test6/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-test6/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-test6/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-test6/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-test6/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-test6/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-test6/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-test6/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-test7/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-test7/node/node0/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-test7/node/node0/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-test7/node/node0/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-test7/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-test7/node/node0/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-test7/node/node0/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-test7/node/node0/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-test7/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-test7/node/node0/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-test7/node/node0/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-test7/node/node0/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-test7/node/node0/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-test7/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-test7/node/node0/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-test7/node/node0/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-test7/node/node0/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-test7/node/node0/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-test7/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-test7/node/node0/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-test7/node/node0/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-test7/node/node0/cpu7 ../../cpu/cpu7 +tests/virhostcpudata/linux-test7/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-test7/node/node0/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-test8/node/node0/cpu0 ../../cpu/cpu0 +tests/virhostcpudata/linux-test8/node/node0/cpu12 ../../cpu/cpu12 +tests/virhostcpudata/linux-test8/node/node0/cpu16 ../../cpu/cpu16 +tests/virhostcpudata/linux-test8/node/node0/cpu20 ../../cpu/cpu20 +tests/virhostcpudata/linux-test8/node/node0/cpu24 ../../cpu/cpu24 +tests/virhostcpudata/linux-test8/node/node0/cpu28 ../../cpu/cpu28 +tests/virhostcpudata/linux-test8/node/node0/cpu4 ../../cpu/cpu4 +tests/virhostcpudata/linux-test8/node/node0/cpu8 ../../cpu/cpu8 +tests/virhostcpudata/linux-test8/node/node1/cpu32 ../../cpu/cpu32 +tests/virhostcpudata/linux-test8/node/node1/cpu36 ../../cpu/cpu36 +tests/virhostcpudata/linux-test8/node/node1/cpu40 ../../cpu/cpu40 +tests/virhostcpudata/linux-test8/node/node1/cpu44 ../../cpu/cpu44 +tests/virhostcpudata/linux-test8/node/node1/cpu48 ../../cpu/cpu48 +tests/virhostcpudata/linux-test8/node/node1/cpu52 ../../cpu/cpu52 +tests/virhostcpudata/linux-test8/node/node1/cpu56 ../../cpu/cpu56 +tests/virhostcpudata/linux-test8/node/node1/cpu60 ../../cpu/cpu60 +tests/virhostcpudata/linux-test8/node/node2/cpu1 ../../cpu/cpu1 +tests/virhostcpudata/linux-test8/node/node2/cpu13 ../../cpu/cpu13 +tests/virhostcpudata/linux-test8/node/node2/cpu17 ../../cpu/cpu17 +tests/virhostcpudata/linux-test8/node/node2/cpu21 ../../cpu/cpu21 +tests/virhostcpudata/linux-test8/node/node2/cpu25 ../../cpu/cpu25 +tests/virhostcpudata/linux-test8/node/node2/cpu29 ../../cpu/cpu29 +tests/virhostcpudata/linux-test8/node/node2/cpu5 ../../cpu/cpu5 +tests/virhostcpudata/linux-test8/node/node2/cpu9 ../../cpu/cpu9 +tests/virhostcpudata/linux-test8/node/node3/cpu33 ../../cpu/cpu33 +tests/virhostcpudata/linux-test8/node/node3/cpu37 ../../cpu/cpu37 +tests/virhostcpudata/linux-test8/node/node3/cpu41 ../../cpu/cpu41 +tests/virhostcpudata/linux-test8/node/node3/cpu45 ../../cpu/cpu45 +tests/virhostcpudata/linux-test8/node/node3/cpu49 ../../cpu/cpu49 +tests/virhostcpudata/linux-test8/node/node3/cpu53 ../../cpu/cpu53 +tests/virhostcpudata/linux-test8/node/node3/cpu57 ../../cpu/cpu57 +tests/virhostcpudata/linux-test8/node/node3/cpu61 ../../cpu/cpu61 +tests/virhostcpudata/linux-test8/node/node4/cpu10 ../../cpu/cpu10 +tests/virhostcpudata/linux-test8/node/node4/cpu14 ../../cpu/cpu14 +tests/virhostcpudata/linux-test8/node/node4/cpu18 ../../cpu/cpu18 +tests/virhostcpudata/linux-test8/node/node4/cpu2 ../../cpu/cpu2 +tests/virhostcpudata/linux-test8/node/node4/cpu22 ../../cpu/cpu22 +tests/virhostcpudata/linux-test8/node/node4/cpu26 ../../cpu/cpu26 +tests/virhostcpudata/linux-test8/node/node4/cpu30 ../../cpu/cpu30 +tests/virhostcpudata/linux-test8/node/node4/cpu6 ../../cpu/cpu6 +tests/virhostcpudata/linux-test8/node/node5/cpu34 ../../cpu/cpu34 +tests/virhostcpudata/linux-test8/node/node5/cpu38 ../../cpu/cpu38 +tests/virhostcpudata/linux-test8/node/node5/cpu42 ../../cpu/cpu42 +tests/virhostcpudata/linux-test8/node/node5/cpu46 ../../cpu/cpu46 +tests/virhostcpudata/linux-test8/node/node5/cpu50 ../../cpu/cpu50 +tests/virhostcpudata/linux-test8/node/node5/cpu54 ../../cpu/cpu54 +tests/virhostcpudata/linux-test8/node/node5/cpu58 ../../cpu/cpu58 +tests/virhostcpudata/linux-test8/node/node5/cpu62 ../../cpu/cpu62 +tests/virhostcpudata/linux-test8/node/node6/cpu35 ../../cpu/cpu35 +tests/virhostcpudata/linux-test8/node/node6/cpu39 ../../cpu/cpu39 +tests/virhostcpudata/linux-test8/node/node6/cpu43 ../../cpu/cpu43 +tests/virhostcpudata/linux-test8/node/node6/cpu47 ../../cpu/cpu47 +tests/virhostcpudata/linux-test8/node/node6/cpu51 ../../cpu/cpu51 +tests/virhostcpudata/linux-test8/node/node6/cpu55 ../../cpu/cpu55 +tests/virhostcpudata/linux-test8/node/node6/cpu59 ../../cpu/cpu59 +tests/virhostcpudata/linux-test8/node/node6/cpu63 ../../cpu/cpu63 +tests/virhostcpudata/linux-test8/node/node7/cpu11 ../../cpu/cpu11 +tests/virhostcpudata/linux-test8/node/node7/cpu15 ../../cpu/cpu15 +tests/virhostcpudata/linux-test8/node/node7/cpu19 ../../cpu/cpu19 +tests/virhostcpudata/linux-test8/node/node7/cpu23 ../../cpu/cpu23 +tests/virhostcpudata/linux-test8/node/node7/cpu27 ../../cpu/cpu27 +tests/virhostcpudata/linux-test8/node/node7/cpu3 ../../cpu/cpu3 +tests/virhostcpudata/linux-test8/node/node7/cpu31 ../../cpu/cpu31 +tests/virhostcpudata/linux-test8/node/node7/cpu7 ../../cpu/cpu7 diff --git a/SPECS/libvirt.spec b/SPECS/libvirt.spec index f0ce48e..f4d1691 100644 --- a/SPECS/libvirt.spec +++ b/SPECS/libvirt.spec @@ -1,79 +1,35 @@ # -*- rpm-spec -*- -# This spec file assumes you are building for Fedora 13 or newer, -# or for RHEL 5 or newer. It may need some tweaks for other distros. -# If neither fedora nor rhel was defined, try to guess them from %{dist} -%if !0%{?rhel} && !0%{?fedora} -%{expand:%(echo "%{?dist}" | \ - sed -ne 's/^\.el\([0-9]\+\).*/%%define rhel \1/p')} -%{expand:%(echo "%{?dist}" | \ - sed -ne 's/^\.fc\?\([0-9]\+\).*/%%define fedora \1/p')} +# This spec file assumes you are building for Fedora 20 or newer, +# or for RHEL 6 or newer. It may need some tweaks for other distros. +# If neither fedora nor rhel was defined, try to guess them from dist +%if (0%{?fedora} && 0%{?fedora} >= 20) || (0%{?rhel} && 0%{?rhel} >= 6) + %define supported_platform 1 +%else + %define supported_platform 0 %endif # Default to skipping autoreconf. Distros can change just this one line # (or provide a command-line override) if they backport any patches that # touch configure.ac or Makefile.am. # Always run autoreconf -%{!?enable_autotools:%define enable_autotools 1} - -# A client only build will create a libvirt.so only containing -# the generic RPC driver, and test driver and no libvirtd -# Default to a full server + client build, but with the possibility -# of a command-line or ~/.rpmmacros override for client-only. -%{!?client_only:%define client_only 0} - -# Now turn off server build in certain cases - -# RHEL-5 builds are client-only for s390, ppc -%if 0%{?rhel} == 5 - %ifnarch %{ix86} x86_64 ia64 - %define client_only 1 - %endif -%endif - -# Disable all server side drivers if client only build requested -%if %{client_only} - %define server_drivers 0 -%else - %define server_drivers 1 -%endif - -# Always build with dlopen'd modules -%define with_driver_modules 1 +%{!?enable_autotools:%global enable_autotools 1} -# Now set the defaults for all the important features, independent -# of any particular OS -# First the daemon itself -%define with_libvirtd 0%{!?_without_libvirtd:%{server_drivers}} -%define with_avahi 0%{!?_without_avahi:%{server_drivers}} - -# Then the hypervisor drivers that run in libvirtd -%define with_xen 0%{!?_without_xen:%{server_drivers}} -%define with_qemu 0%{!?_without_qemu:%{server_drivers}} -%define with_lxc 0%{!?_without_lxc:%{server_drivers}} -%define with_uml 0%{!?_without_uml:%{server_drivers}} -%define with_libxl 0%{!?_without_libxl:%{server_drivers}} -%define with_vbox 0%{!?_without_vbox:%{server_drivers}} +# The hypervisor drivers that run in libvirtd +%define with_xen 0%{!?_without_xen:1} +%define with_qemu 0%{!?_without_qemu:1} +%define with_lxc 0%{!?_without_lxc:1} +%define with_uml 0%{!?_without_uml:1} +%define with_libxl 0%{!?_without_libxl:1} +%define with_vbox 0%{!?_without_vbox:1} %define with_qemu_tcg %{with_qemu} %define qemu_kvm_arches %{ix86} x86_64 %if 0%{?fedora} - %if 0%{?fedora} < 16 - # Fedora doesn't have any QEMU on ppc64 until FC16 - only ppc - # I think F17 is the first release with the power64 macro - %ifarch ppc64 - %define with_qemu_tcg 0 - %endif - %endif - %if 0%{?fedora} >= 18 - %define qemu_kvm_arches %{ix86} x86_64 %{power64} s390x - %endif - %if 0%{?fedora} >= 20 - %define qemu_kvm_arches %{ix86} x86_64 %{power64} s390x %{arm} aarch64 - %endif + %define qemu_kvm_arches %{ix86} x86_64 %{power64} s390x %{arm} aarch64 %endif %if 0%{?rhel} @@ -100,52 +56,23 @@ %define with_phyp 0%{!?_without_phyp:1} %define with_esx 0%{!?_without_esx:1} %define with_hyperv 0%{!?_without_hyperv:1} -%define with_xenapi 0%{!?_without_xenapi:1} -%define with_vz 0%{!?_without_vz:1} -# No test for bhyve, because it does not build on Linux # Then the secondary host drivers, which run inside libvirtd -%define with_interface 0%{!?_without_interface:%{server_drivers}} -%define with_network 0%{!?_without_network:%{server_drivers}} -%define with_storage_fs 0%{!?_without_storage_fs:%{server_drivers}} -%define with_storage_lvm 0%{!?_without_storage_lvm:%{server_drivers}} -%define with_storage_iscsi 0%{!?_without_storage_iscsi:%{server_drivers}} -%define with_storage_disk 0%{!?_without_storage_disk:%{server_drivers}} -%define with_storage_mpath 0%{!?_without_storage_mpath:%{server_drivers}} -%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7 - %define with_storage_rbd 0%{!?_without_storage_rbd:%{server_drivers}} +%if 0%{?fedora} || 0%{?rhel} >= 7 + %define with_storage_rbd 0%{!?_without_storage_rbd:1} %else %define with_storage_rbd 0 %endif -%if 0%{?fedora} >= 17 - %define with_storage_sheepdog 0%{!?_without_storage_sheepdog:%{server_drivers}} +%if 0%{?fedora} + %define with_storage_sheepdog 0%{!?_without_storage_sheepdog:1} %else %define with_storage_sheepdog 0 %endif -%if 0%{?fedora} >= 19 || 0%{?rhel} >= 6 - %define with_storage_gluster 0%{!?_without_storage_gluster:%{server_drivers}} -%else - %define with_storage_gluster 0 -%endif -%define with_numactl 0%{!?_without_numactl:%{server_drivers}} -%define with_selinux 0%{!?_without_selinux:%{server_drivers}} - -# Just hardcode to off, since few people ever have apparmor RPMs installed -%define with_apparmor 0%{!?_without_apparmor:0} +%define with_storage_gluster 0%{!?_without_storage_gluster:1} +%define with_numactl 0%{!?_without_numactl:1} # A few optional bits off by default, we enable later -%define with_polkit 0%{!?_without_polkit:0} -%define with_capng 0%{!?_without_capng:0} %define with_fuse 0%{!?_without_fuse:0} -%define with_netcf 0%{!?_without_netcf:0} -%define with_udev 0%{!?_without_udev:0} -%define with_hal 0%{!?_without_hal:0} -%define with_yajl 0%{!?_without_yajl:0} -%define with_nwfilter 0%{!?_without_nwfilter:0} -%define with_libpcap 0%{!?_without_libpcap:0} -%define with_macvtap 0%{!?_without_macvtap:0} -%define with_libnl 0%{!?_without_libnl:0} -%define with_dtrace 0%{!?_without_dtrace:0} %define with_cgconfig 0%{!?_without_cgconfig:0} %define with_sanlock 0%{!?_without_sanlock:0} %define with_systemd 0%{!?_without_systemd:0} @@ -153,14 +80,8 @@ %define with_firewalld 0%{!?_without_firewalld:0} %define with_libssh2 0%{!?_without_libssh2:0} %define with_wireshark 0%{!?_without_wireshark:0} -%define with_systemd_daemon 0%{!?_without_systemd_daemon:0} %define with_pm_utils 1 -# Non-server/HV driver defaults which are always enabled -%define with_sasl 0%{!?_without_sasl:1} -%define with_audit 0%{!?_without_audit:1} - - # Finally set the OS / architecture specific special cases # Xen is available only on i386 x86_64 ia64 @@ -181,7 +102,7 @@ # libgfapi is built only on x86_64 on rhel %ifnarch x86_64 - %if 0%{?rhel} >= 6 + %if 0%{?rhel} %define with_storage_gluster 0 %endif %endif @@ -194,7 +115,7 @@ %endif # RHEL doesn't ship OpenVZ, VBox, UML, PowerHypervisor, -# VMWare, libxenserver (xenapi), libxenlight (Xen 4.1 and newer), +# VMware, libxenserver (xenapi), libxenlight (Xen 4.1 and newer), # or HyperV. %if 0%{?rhel} %define with_openvz 0 @@ -210,67 +131,39 @@ # Fedora 17 / RHEL-7 are first where we use systemd. Although earlier # Fedora has systemd, libvirt still used sysvinit there. -%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 %define with_systemd 1 - %define with_systemd_daemon 1 %define with_pm_utils 0 %endif # Fedora 18 / RHEL-7 are first where firewalld support is enabled -%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 %define with_firewalld 1 %endif -# RHEL-5 is too old for LXC -%if 0%{?rhel} == 5 - %define with_lxc 0 -%endif - # RHEL-6 stopped including Xen on all archs. -%if 0%{?rhel} >= 6 +%if 0%{?rhel} %define with_xen 0 %endif -# Fedora doesn't have new enough Xen for libxl until F18 -%if 0%{?fedora} && 0%{?fedora} < 18 - %define with_libxl 0 -%endif - # fuse is used to provide virtualized /proc for LXC -%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 %define with_fuse 0%{!?_without_fuse:1} %endif -# RHEL 5 lacks newer tools -%if 0%{?rhel} == 5 - %define with_hal 0%{!?_without_hal:%{server_drivers}} -%else - %define with_polkit 0%{!?_without_polkit:1} - %define with_capng 0%{!?_without_capng:1} - %define with_netcf 0%{!?_without_netcf:%{server_drivers}} - %define with_udev 0%{!?_without_udev:%{server_drivers}} - %define with_yajl 0%{!?_without_yajl:%{server_drivers}} - %define with_dtrace 1 -%endif - -# interface requires netcf -%if ! 0%{?with_netcf} - %define with_interface 0 -%endif - # Enable sanlock library for lock management with QEMU # Sanlock is available only on arches where kvm is available for RHEL -%if 0%{?fedora} >= 16 - %define with_sanlock 0%{!?_without_sanlock:%{server_drivers}} +%if 0%{?fedora} + %define with_sanlock 0%{!?_without_sanlock:1} %endif -%if 0%{?rhel} >= 6 +%if 0%{?rhel} %ifarch %{qemu_kvm_arches} - %define with_sanlock 0%{!?_without_sanlock:%{server_drivers}} + %define with_sanlock 0%{!?_without_sanlock:1} %endif %endif # Enable libssh2 transport for new enough distros -%if 0%{?fedora} >= 17 +%if 0%{?fedora} %define with_libssh2 0%{!?_without_libssh2:1} %endif @@ -279,90 +172,26 @@ %define with_wireshark 0%{!?_without_wireshark:1} %endif -# Disable some drivers when building without libvirt daemon. -# The logic is the same as in configure.ac -%if ! %{with_libvirtd} - %define with_interface 0 - %define with_network 0 - %define with_qemu 0 - %define with_lxc 0 - %define with_uml 0 - %define with_hal 0 - %define with_udev 0 - %define with_storage_fs 0 - %define with_storage_lvm 0 - %define with_storage_iscsi 0 - %define with_storage_mpath 0 - %define with_storage_rbd 0 - %define with_storage_sheepdog 0 - %define with_storage_gluster 0 - %define with_storage_disk 0 -%endif %if %{with_qemu} || %{with_lxc} || %{with_uml} - %define with_nwfilter 0%{!?_without_nwfilter:%{server_drivers}} -# Enable libpcap library - %define with_libpcap 0%{!?_without_libpcap:%{server_drivers}} - %define with_macvtap 0%{!?_without_macvtap:%{server_drivers}} - # numad is used to manage the CPU and memory placement dynamically, # it's not available on s390[x] and ARM. - %if 0%{?fedora} >= 17 || 0%{?rhel} >= 6 - %ifnarch s390 s390x %{arm} - %define with_numad 0%{!?_without_numad:%{server_drivers}} - %endif + %ifnarch s390 s390x %{arm} + %define with_numad 0%{!?_without_numad:1} %endif %endif -%if %{with_macvtap} - %define with_libnl 1 -%endif - # Pull in cgroups config system -%if 0%{?fedora} || 0%{?rhel} >= 6 - %if %{with_qemu} || %{with_lxc} - %define with_cgconfig 0%{!?_without_cgconfig:1} - %endif -%endif - -%if %{with_udev} || %{with_hal} - %define with_nodedev 1 -%else - %define with_nodedev 0 -%endif - -%if %{with_storage_fs} || %{with_storage_mpath} || %{with_storage_iscsi} || %{with_storage_lvm} || %{with_storage_disk} - %define with_storage 1 -%else - %define with_storage 0 +%if %{with_qemu} || %{with_lxc} + %define with_cgconfig 0%{!?_without_cgconfig:1} %endif - # Force QEMU to run as non-root -%if 0%{?fedora} || 0%{?rhel} >= 6 - %define qemu_user qemu - %define qemu_group qemu -%else - %define qemu_user root - %define qemu_group root -%endif - - -# Advertise OVMF and AAVMF from nightly firmware repo -%if 0%{?fedora} - %define with_loader_nvram --with-loader-nvram="/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd:/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw" -%endif - +%define qemu_user qemu +%define qemu_group qemu -# The RHEL-5 Xen package has some feature backports. This -# flag is set to enable use of those special bits on RHEL-5 -%if 0%{?rhel} == 5 - %define with_rhel5 1 -%else - %define with_rhel5 0 -%endif -%if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 %define with_systemd_macros 1 %else %define with_systemd_macros 0 @@ -378,11 +207,17 @@ %define enable_werror --disable-werror %endif +%if 0%{?fedora} >= 21 + %define tls_priority "@SYSTEM" +%else + %define tls_priority "NORMAL" +%endif + Summary: Library providing a simple virtualization API Name: libvirt -Version: 1.2.17 -Release: 13%{?dist}.5%{?extra_release} +Version: 2.0.0 +Release: 10%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root @@ -391,7 +226,8 @@ URL: http://libvirt.org/ %if %(echo %{version} | grep -o \\. | wc -l) == 3 %define mainturl stable_updates/ %endif -Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz +Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz +Source1: symlinks Patch1: libvirt-RHEL-screenshot-Implement-multiple-screen-support.patch Patch2: libvirt-RHEL-Support-virtio-disk-hotplug-in-JSON-mode.patch @@ -399,310 +235,263 @@ Patch3: libvirt-RHEL-Add-support-for-QMP-I-O-error-reason.patch Patch4: libvirt-RHEL-qemu-support-relative-backing-for-RHEL-7.0.z-qemu.patch Patch5: libvirt-RHEL-Fix-maxvcpus-output.patch Patch6: libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch -Patch7: libvirt-util-bitmap-Don-t-alloc-overly-large-binary-bitmaps.patch -Patch8: libvirt-storage-Fix-regression-in-storagePoolUpdateAllState.patch -Patch9: libvirt-Separate-isa-fdc-options-generation.patch -Patch10: libvirt-Explicitly-format-the-isa-fdc-controller-for-newer-q35-machines.patch -Patch11: libvirt-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch -Patch12: libvirt-conf-Don-t-allow-duplicated-target-names-regardless-of-bus.patch -Patch13: libvirt-storage-Revert-volume-obj-list-updating-after-volume-creation-4749d82a.patch -Patch14: libvirt-qemu_monitor-Wire-up-MIGRATION-event.patch -Patch15: libvirt-qemu-Enable-migration-events-on-QMP-monitor.patch -Patch16: libvirt-qemuDomainGetJobStatsInternal-Support-migration-events.patch -Patch17: libvirt-qemu-Update-migration-state-according-to-MIGRATION-event.patch -Patch18: libvirt-qemu-Wait-for-migration-events-on-domain-condition.patch -Patch19: libvirt-qemu-Check-duplicate-WWNs-also-for-hotplugged-disks.patch -Patch20: libvirt-qemu-move-the-guest-status-check-before-agent-config-and-status-check.patch -Patch21: libvirt-qemu-report-error-for-non-existing-disk-in-blockjobinfo.patch -Patch22: libvirt-virCondWaitUntil-add-another-return-value.patch -Patch23: libvirt-virDomainObjSignal-drop-this-function.patch -Patch24: libvirt-monitor-detect-that-eject-fails-because-the-tray-is-locked.patch -Patch25: libvirt-qemu_hotplug-try-harder-to-eject-media.patch -Patch26: libvirt-qemu-Drop-LFs-at-the-end-of-error-from-QEMU-log.patch -Patch27: libvirt-Introduce-virHashAtomic.patch -Patch28: libvirt-Introduce-virErrorCopyNew.patch -Patch29: libvirt-qemu-Remember-incoming-migration-errors.patch -Patch30: libvirt-qemu-Don-t-report-false-error-from-MigrateFinish.patch -Patch31: libvirt-qemu-Use-error-from-Finish-instead-of-unexpectedly-failed.patch -Patch32: libvirt-cpu-Add-support-for-MPX-and-AVX512-Intel-features.patch -Patch33: libvirt-qemuProcessHandleMigrationStatus-Update-migration-status-more-frequently.patch -Patch34: libvirt-qemuDomainSetNumaParamsLive-Check-for-NUMA-mode-more-wisely.patch -Patch35: libvirt-qemu-process-Improve-update-of-maximum-balloon-state-at-startup.patch -Patch36: libvirt-storage-Fix-pool-building-when-directory-already-exists.patch -Patch37: libvirt-virsh-report-error-if-vcpu-number-exceed-the-guest-maxvcpu-number.patch -Patch38: libvirt-cmdVcpuPin-Remove-dead-code.patch -Patch39: libvirt-rpc-Add-virNetDaemonHasClients.patch -Patch40: libvirt-rpc-Rework-timerActive-logic-in-daemon.patch -Patch41: libvirt-cgroup-Drop-resource-partition-from-virSystemdMakeScopeName.patch -Patch42: libvirt-virsh-blockjob-Extract-block-job-info-code-into-a-separate-function.patch -Patch43: libvirt-virsh-cmdBlockJob-Switch-to-declarative-flag-interlocking.patch -Patch44: libvirt-virsh-blockjob-Split-out-vshBlockJobSetSpeed-from-blockJobImpl.patch -Patch45: libvirt-virsh-block-job-separate-abort-from-blockJobImpl.patch -Patch46: libvirt-virsh-Split-out-block-pull-implementation-from-blockJobImpl.patch -Patch47: libvirt-virsh-Kill-blockJobImpl-by-moving-the-final-impl-into-cmdBlockCommit.patch -Patch48: libvirt-virsh-Refactor-argument-checking-in-cmdBlockCommit.patch -Patch49: libvirt-virsh-Refactor-argument-handling-in-cmdBlockCopy.patch -Patch50: libvirt-virsh-Refactor-argument-handling-in-cmdBlockPull.patch -Patch51: libvirt-qemu-Update-state-of-block-job-to-READY-only-if-it-actually-is-ready.patch -Patch52: libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockPull.patch -Patch53: libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCommit.patch -Patch54: libvirt-virsh-Refactor-block-job-waiting-in-cmdBlockCopy.patch -Patch55: libvirt-qemu-Reject-migration-with-memory-hotplug-if-destination-doesn-t-support-it.patch -Patch56: libvirt-qemu-Properly-check-for-incoming-migration-job.patch -Patch57: libvirt-qemu-Do-not-reset-labels-when-migration-fails.patch -Patch58: libvirt-qemu-Check-for-iotune_max-support-properly.patch -Patch59: libvirt-docs-Add-Fibre-Channel-NPIV-supported-option-for-volume-lun-config.patch -Patch60: libvirt-conf-Allow-error-reporting-in-virDomainDiskSourceIsBlockType.patch -Patch61: libvirt-qemu-Forbid-image-pre-creation-for-non-shared-storage-migration.patch -Patch62: libvirt-qemu-remove-deadcode-in-qemuDomain-HelperGetVcpus-GetIOThreadsLive.patch -Patch63: libvirt-nodeinfo-Introduce-local-linuxGetCPUPresentPath.patch -Patch64: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUCount.patch -Patch65: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetPresentCPUBitmap.patch -Patch66: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUBitmap.patch -Patch67: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetCPUMap.patch -Patch68: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetInfo.patch -Patch69: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeCapsInitNUMA.patch -Patch70: libvirt-nodeinfo-Add-sysfs_prefix-to-nodeGetMemoryStats.patch -Patch71: libvirt-nodeinfo-fix-to-parse-present-cpus-rather-than-possible-cpus.patch -Patch72: libvirt-tests-Add-nodeinfo-test-for-non-present-CPUs.patch -Patch73: libvirt-nodeinfo-Make-sysfs_prefix-usage-more-consistent.patch -Patch74: libvirt-nodeinfo-Formatting-changes.patch -Patch75: libvirt-tests-Restore-links-in-deconfigured-cpus-nodeinfo-test.patch -Patch76: libvirt-nodeinfo-Add-nodeGetPresentCPUBitmap-to-libvirt_private.syms.patch -Patch77: libvirt-nodeinfo-Fix-nodeGetCPUBitmap-s-fallback-code-path.patch -Patch78: libvirt-nodeinfo-Introduce-linuxGetCPUGlobalPath.patch -Patch79: libvirt-nodeinfo-Introduce-linuxGetCPUOnlinePath.patch -Patch80: libvirt-nodeinfo-Rename-linuxParseCPUmax-to-linuxParseCPUCount.patch -Patch81: libvirt-nodeinfo-Add-old-kernel-compatibility-to-nodeGetPresentCPUBitmap.patch -Patch82: libvirt-nodeinfo-Remove-out-parameter-from-nodeGetCPUBitmap.patch -Patch83: libvirt-nodeinfo-Rename-nodeGetCPUBitmap-to-nodeGetOnlineCPUBitmap.patch -Patch84: libvirt-nodeinfo-Phase-out-cpu_set_t-usage.patch -Patch85: libvirt-nodeinfo-Use-nodeGetOnlineCPUBitmap-when-parsing-node.patch -Patch86: libvirt-nodeinfo-Use-a-bitmap-to-keep-track-of-node-CPUs.patch -Patch87: libvirt-nodeinfo-Calculate-present-and-online-CPUs-only-once.patch -Patch88: libvirt-nodeinfo-Check-for-errors-when-reading-core_id.patch -Patch89: libvirt-Renamed-deconfigured-cpus-to-allow-make-dist.patch -Patch90: libvirt-tests-Finish-rename-of-the-long-nodeinfo-test-case.patch -Patch91: libvirt-nodeinfo-Fix-output-on-PPC64-KVM-hosts.patch -Patch92: libvirt-tests-Prepare-for-subcore-tests.patch -Patch93: libvirt-tests-Add-subcores1-nodeinfo-test.patch -Patch94: libvirt-tests-Add-subcores2-nodeinfo-test.patch -Patch95: libvirt-tests-Add-subcores3-nodeinfo-test.patch -Patch96: libvirt-nodeinfo-Fix-build-failure-when-KVM-headers-are-not-available.patch -Patch97: libvirt-qemu-fix-some-api-cannot-work-when-disable-cpuset-in-conf.patch -Patch98: libvirt-qemu-Auto-assign-pci-addresses-for-shared-memory-devices.patch -Patch99: libvirt-conf-Add-getter-for-network-routes.patch -Patch100: libvirt-network-Add-another-collision-check-into-networkCheckRouteCollision.patch -Patch101: libvirt-docs-Document-how-libvirt-handles-companion-controllers.patch -Patch102: libvirt-qemu-Reject-updating-unsupported-disk-information.patch -Patch103: libvirt-numa_conf-Introduce-virDomainNumaGetMaxCPUID.patch -Patch104: libvirt-virDomainDefParseXML-Check-for-malicious-cpu-ids-in-numa.patch -Patch105: libvirt-conf-more-useful-error-message-when-pci-function-is-out-of-range.patch -Patch106: libvirt-qemu-Fix-reporting-of-physical-capacity-for-block-devices.patch -Patch107: libvirt-network-verify-proper-address-family-in-updates-to-host-and-range.patch -Patch108: libvirt-rpc-Remove-keepalive_required-option.patch -Patch109: libvirt-virNetDevBandwidthParseRate-Reject-negative-values.patch -Patch110: libvirt-domain-Fix-crash-if-trying-to-live-update-disk-serial.patch -Patch111: libvirt-qemu-fail-on-attempts-to-use-filterref-for-non-tap-network-connections.patch -Patch112: libvirt-network-validate-network-NAT-range.patch -Patch113: libvirt-conf-Don-t-try-formating-non-existing-addresses.patch -Patch114: libvirt-cpu-Rename-powerpc-ppc-ppc64-filesystem.patch -Patch115: libvirt-cpu-Rename-powerpc-ppc-ppc64-exported-symbols.patch -Patch116: libvirt-cpu-Rename-powerpc-ppc-ppc64-internal-symbols.patch -Patch117: libvirt-cpu-Indentation-changes-in-the-ppc64-driver.patch -Patch118: libvirt-cpu-Mark-driver-functions-in-ppc64-driver.patch -Patch119: libvirt-cpu-Simplify-NULL-handling-in-ppc64-driver.patch -Patch120: libvirt-cpu-Simplify-ppc64ModelFromCPU.patch -Patch121: libvirt-cpu-Reorder-functions-in-the-ppc64-driver.patch -Patch122: libvirt-cpu-Remove-ISA-information-from-CPU-map-XML.patch -Patch123: libvirt-tests-Remove-unused-file.patch -Patch124: libvirt-tests-Improve-result-handling-in-cpuTestGuestData.patch -Patch125: libvirt-cpu-Never-skip-CPU-model-name-check-in-ppc64-driver.patch -Patch126: libvirt-cpu-CPU-model-names-have-to-match-on-ppc64.patch -Patch127: libvirt-cpu-Use-ppc64Compute-to-implement-ppc64DriverCompare.patch -Patch128: libvirt-tests-Temporarily-disable-ppc64-cpu-tests.patch -Patch129: libvirt-cpu-Align-ppc64-CPU-data-with-x86.patch -Patch130: libvirt-cpu-Support-multiple-PVRs-in-the-ppc64-driver.patch -Patch131: libvirt-cpu-Simplify-ppc64-part-of-CPU-map-XML.patch -Patch132: libvirt-cpu-Parse-and-use-PVR-masks-in-the-ppc64-driver.patch -Patch133: libvirt-cpu-Add-POWER8NVL-information-to-CPU-map-XML.patch -Patch134: libvirt-cpu-Implement-backwards-compatibility-in-the-ppc64-driver.patch -Patch135: libvirt-cpu-Forbid-model-fallback-in-the-ppc64-driver.patch -Patch136: libvirt-tests-Re-enable-ppc64-cpu-tests.patch -Patch137: libvirt-tests-Add-a-bunch-of-cpu-test-case-for-ppc64.patch -Patch138: libvirt-cpu-Fix-segfault-in-the-ppc64-driver.patch -Patch139: libvirt-qemu-Fix-segfault-when-parsing-private-domain-data.patch -Patch140: libvirt-conf-Pass-private-data-to-Parse-function-of-XML-options.patch -Patch141: libvirt-qemu-Keep-numad-hint-after-daemon-restart.patch -Patch142: libvirt-qemu-Use-numad-information-when-getting-pin-information.patch -Patch143: libvirt-api-Remove-check-on-iothread_id-arg-in-virDomainPinIOThread.patch -Patch144: libvirt-api-Adjust-comment-for-virDomainAddIOThread.patch -Patch145: libvirt-qemu-Add-check-for-invalid-iothread_id-in-qemuDomainChgIOThread.patch -Patch146: libvirt-conf-Check-for-attach-disk-usage-of-iothread-0.patch -Patch147: libvirt-virNetDevBandwidthUpdateRate-turn-class_id-into-integer.patch -Patch148: libvirt-bridge_driver-Introduce-networkBandwidthChangeAllowed.patch -Patch149: libvirt-bridge_driver-Introduce-networkBandwidthUpdate.patch -Patch150: libvirt-qemuDomainSetInterfaceParameters-Use-new-functions-to-update-bandwidth.patch -Patch151: libvirt-cpu-Don-t-update-host-model-guest-CPUs-on-ppc64.patch -Patch152: libvirt-cpu-Better-support-for-ppc64-compatibility-modes.patch -Patch153: libvirt-cpu-Move-check-for-NULL-CPU-model-inside-the-driver.patch -Patch154: libvirt-tests-Add-some-compatibility-related-cases-to-the-CPU-tests.patch -Patch155: libvirt-Start-daemon-only-after-filesystems-are-mounted.patch -Patch156: libvirt-virfile-Add-error-for-root-squash-change-mode-failure.patch -Patch157: libvirt-virfile-Introduce-virFileUnlink.patch -Patch158: libvirt-storage-Correct-the-mode-check.patch -Patch159: libvirt-storage-Handle-failure-from-refreshVol.patch -Patch160: libvirt-util-Add-virStringGetFirstWithPrefix.patch -Patch161: libvirt-util-Add-virCgroupGetBlockDevString.patch -Patch162: libvirt-util-Add-getters-for-cgroup-block-device-I-O-throttling.patch -Patch163: libvirt-lxc-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch -Patch164: libvirt-qemu-Sync-BlkioDevice-values-when-setting-them-in-cgroups.patch -Patch165: libvirt-Allow-vfio-hotplug-of-a-device-to-the-domain-which-owns-the-iommu.patch -Patch166: libvirt-hostdev-skip-ACS-check-when-using-VFIO-for-device-assignment.patch -Patch167: libvirt-docs-Clarify-unprivileged-sgio-feature.patch -Patch168: libvirt-qemu-Introduce-qemuIsSharedHostdev.patch -Patch169: libvirt-qemu-Introduce-qemuGetHostdevPath.patch -Patch170: libvirt-qemu-Refactor-qemuCheckSharedDisk-to-create-qemuCheckUnprivSGIO.patch -Patch171: libvirt-qemu-Inline-qemuGetHostdevPath.patch -Patch172: libvirt-qemu-Refactor-qemuSetUnprivSGIO-return-values.patch -Patch173: libvirt-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch -Patch174: libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch -Patch175: libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch -Patch176: libvirt-security_selinux-Use-proper-structure-to-access-socket-data.patch -Patch177: libvirt-security_dac-Label-non-listening-sockets.patch -Patch178: libvirt-security-Add-virSecurityDomainSetDirLabel.patch -Patch179: libvirt-security_stack-Add-SetDirLabel-support.patch -Patch180: libvirt-security_selinux-Add-SetDirLabel-support.patch -Patch181: libvirt-security_dac-Add-SetDirLabel-support.patch -Patch182: libvirt-qemu-Fix-access-to-auto-generated-socket-paths.patch -Patch183: libvirt-tests-Use-qemuProcessPrepareMonitorChr-in-qemuxmlnstest.patch -Patch184: libvirt-qemu-Label-correct-per-VM-path-when-starting.patch -Patch185: libvirt-selinux-fix-compile-errors.patch -Patch186: libvirt-conf-Add-ioeventfd-option-for-controllers.patch -Patch187: libvirt-qemu-Enable-ioeventfd-usage-for-virtio-scsi-controllers.patch -Patch188: libvirt-util-make-virNetDev-Replace-Restore-MacAddress-public-functions.patch -Patch189: libvirt-util-don-t-use-netlink-to-save-set-mac-for-macvtap-passthrough-802.1Qbh.patch -Patch190: libvirt-cpu-Introduce-IvyBridge-CPU-model.patch -Patch191: libvirt-examples-Add-example-polkit-ACL-rules.patch -Patch192: libvirt-qemu-don-t-use-initialized-ret-in-qemuRemoveSharedDevice.patch -Patch193: libvirt-qemu-Introduce-qemuDomainMachineIsS390CCW.patch -Patch194: libvirt-qemu-Need-to-check-for-machine.os-when-using-ADDRESS_TYPE_CCW.patch -Patch195: libvirt-conf-fix-crash-when-parsing-a-unordered-NUMA-cell.patch -Patch196: libvirt-vmx-Some-whitespace-cleanup.patch -Patch197: libvirt-vmx-The-virVMXParseDisk-deviceType-can-be-NULL-add-some-missing-checks.patch -Patch198: libvirt-vmx-Add-handling-for-CDROM-devices-with-SCSI-passthru.patch -Patch199: libvirt-qemu-hotplug-Properly-clean-up-drive-backend-if-frontend-hotplug-fails.patch -Patch200: libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_RTL8139.patch -Patch201: libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_E1000.patch -Patch202: libvirt-qemu-Introduce-QEMU_CAPS_DEVICE_VIRTIO_NET.patch -Patch203: libvirt-qemu-Try-several-network-devices-when-looking-for-a-default.patch -Patch204: libvirt-qemu-Report-error-if-per-VM-directory-cannot-be-created.patch -Patch205: libvirt-qemu-Do-not-allow-others-into-per-VM-subdirectories.patch -Patch206: libvirt-qemu-Allow-others-to-browse-var-lib-libvirt-qemu.patch -Patch207: libvirt-virSecuritySELinuxSetSecurityAllLabel-drop-useless-virFileIsSharedFSType.patch -Patch208: libvirt-security_selinux-Replace-SELinuxSCSICallbackData-with-proper-struct.patch -Patch209: libvirt-virSecurityManager-Track-if-running-as-privileged.patch -Patch210: libvirt-security_selinux-Take-privileged-into-account.patch -Patch211: libvirt-qemu-Fix-using-guest-architecture-as-lookup-key.patch -Patch212: libvirt-virfile-Check-for-existence-of-dir-in-virFileDeleteTree.patch -Patch213: libvirt-Revert-qemu-Fix-integer-boolean-logic-in-qemuSetUnprivSGIO.patch -Patch214: libvirt-qemu-migration-Relax-enforcement-of-memory-hotplug-support.patch -Patch215: libvirt-conf-Add-helper-to-determine-whether-memory-hotplug-is-enabled-for-a-vm.patch -Patch216: libvirt-qemu-Make-memory-alignment-helper-more-universal.patch -Patch217: libvirt-conf-Drop-VIR_DOMAIN_DEF_PARSE_CLOCK_ADJUST-flag.patch -Patch218: libvirt-conf-Document-all-VIR_DOMAIN_DEF_PARSE_-flags.patch -Patch219: libvirt-conf-Add-XML-parser-flag-that-will-allow-us-to-do-incompatible-updates.patch -Patch220: libvirt-conf-Split-memory-related-post-parse-stuff-into-separate-function.patch -Patch221: libvirt-conf-Rename-max_balloon-to-total_memory.patch -Patch222: libvirt-conf-Pre-calculate-initial-memory-size-instead-of-always-calculating-it.patch -Patch223: libvirt-conf-Don-t-always-recalculate-initial-memory-size-from-NUMA-size-totals.patch -Patch224: libvirt-qemu-command-Align-memory-sizes-only-on-fresh-starts.patch -Patch225: libvirt-qemu-ppc64-Align-memory-sizes-to-256MiB-blocks.patch -Patch226: libvirt-test-Add-test-to-validate-that-memory-sizes-don-t-get-updated-on-migration.patch -Patch227: libvirt-qemu-Align-memory-module-sizes-to-2MiB.patch -Patch228: libvirt-qemu-Refresh-memory-size-only-on-fresh-starts.patch -Patch229: libvirt-domain-Fix-migratable-XML-with-graphics-listen.patch -Patch230: libvirt-qemu-Fix-dynamic_ownership-qemu.conf-setting.patch -Patch231: libvirt-qemu-Add-conditions-for-qemu-kvm-use-on-ppc64.patch -Patch232: libvirt-qemu-Move-simplification-variable-to-begining-of-the-function.patch -Patch233: libvirt-qemu-Extract-mem-path-building-into-its-own-function.patch -Patch234: libvirt-qemu-Add-mem-path-even-with-numa.patch -Patch235: libvirt-qemu-Use-memory-backing-file-only-when-needed.patch -Patch236: libvirt-qemu-Always-update-migration-times-on-destination.patch -Patch237: libvirt-qemu-Copy-completed-migration-stats-only-on-success.patch -Patch238: libvirt-qemu-Introduce-flags-in-qemuMigrationCompleted.patch -Patch239: libvirt-qemu-Make-updating-stats-in-qemuMigrationCheckJobStatus-optional.patch -Patch240: libvirt-qemu-Wait-until-destination-QEMU-consumes-all-migration-data.patch -Patch241: libvirt-qemu-migration-Properly-parse-memory-hotplug-migration-flag.patch -Patch242: libvirt-qemu-Emit-correct-audit-message-for-memory-hot-unplug.patch -Patch243: libvirt-qemu-Emit-correct-audit-message-for-memory-hot-plug.patch -Patch244: libvirt-qemu-Extract-logic-to-determine-the-mlock-limit-size-for-VFIO.patch -Patch245: libvirt-qemu-hotplug-Fix-mlock-limit-handling-on-memory-hotplug.patch -Patch246: libvirt-qemu-domain-Restructurate-control-flow-in-qemuDomainGetMlockLimitBytes.patch -Patch247: libvirt-qemu-Explain-mlock-limit-size-more-in-detail.patch -Patch248: libvirt-qemu-hotplug-Reject-VFIO-hotplug-if-setting-RLIMIT_MEMLOCK-fails.patch -Patch249: libvirt-process-Log-when-limiting-the-amount-of-locked-memory.patch -Patch250: libvirt-qemu-Use-qemuDomainRequiresMlock-in-qemuBuildCommandLine.patch -Patch251: libvirt-qemu-Use-qemuDomainRequiresMlock-when-attaching-PCI-hostdev.patch -Patch252: libvirt-qemu-Add-ppc64-specific-math-to-qemuDomainGetMlockLimitBytes.patch -Patch253: libvirt-qemu-Always-set-locked-memory-limit-for-ppc64-domains.patch -Patch254: libvirt-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch -Patch255: libvirt-vmx-Adapt-to-emptyBackingString-for-cdrom-image.patch -Patch256: libvirt-systemd-Escape-machine-name-for-machined.patch -Patch257: libvirt-systemd-Add-virSystemdGetMachineNameByPID.patch -Patch258: libvirt-systemd-Modernize-machine-naming.patch -Patch259: libvirt-virSystemdGetMachineNameByPID-Initialize-reply.patch -Patch260: libvirt-util-Fix-virCgroupNewMachine-ATTRIBUTE_NONNULL-args.patch -Patch261: libvirt-dbus-Don-t-unref-NULL-messages.patch -Patch262: libvirt-vmx-Expose-datacenter-path-in-domain-XML.patch -Patch263: libvirt-nodedev-Indent-PCI-express-for-future-fix.patch -Patch264: libvirt-nodedev-Expose-PCI-header-type.patch -Patch265: libvirt-nodedev-Fix-parsing-of-generated-XMLs.patch -Patch266: libvirt-qemu-driver-Remove-unnecessary-flag-in-qemuDomainGetStatsBlock.patch -Patch267: libvirt-qemu-driver-Separate-bulk-stats-worker-for-block-devices.patch -Patch268: libvirt-qemu-bulk-stats-Don-t-access-possibly-blocked-storage.patch - - -%if %{with_libvirtd} +Patch7: libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch +Patch8: libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch +Patch9: libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch +Patch10: libvirt-RHEL-qemu-Support-vhost-user-multiqueue-with-QEMU-2.3.patch +Patch11: libvirt-qemu-Use-bootindex-whenever-possible.patch +Patch12: libvirt-qemu-Properly-reset-spiceMigration-flag.patch +Patch13: libvirt-qemu-Drop-useless-SPICE-migration-code.patch +Patch14: libvirt-qemu-Memory-locking-is-only-required-for-KVM-guests-on-ppc64.patch +Patch15: libvirt-virtlogd-make-max-file-size-number-of-backups-configurable.patch +Patch16: libvirt-virtlogd-increase-max-file-size-to-2-MB.patch +Patch17: libvirt-qemu-getAutoDumpPath-return-value-should-be-dumpfile-not-domname.patch +Patch18: libvirt-qemu-Copy-complete-domain-def-in-qemuDomainDefFormatBuf.patch +Patch19: libvirt-qemu-Drop-default-channel-path-during-migration.patch +Patch20: libvirt-qemu-Fix-migration-from-old-libvirt.patch +Patch21: libvirt-Add-USB-addresses-to-qemuhotplug-test-cases.patch +Patch22: libvirt-Introduce-virDomainUSBDeviceDefForeach.patch +Patch23: libvirt-Allow-omitting-USB-port.patch +Patch24: libvirt-Store-USB-port-path-as-an-array-of-integers.patch +Patch25: libvirt-Introduce-virDomainUSBAddressSet.patch +Patch26: libvirt-Add-functions-for-adding-USB-controllers-to-addrs.patch +Patch27: libvirt-Add-functions-for-adding-USB-hubs-to-addrs.patch +Patch28: libvirt-Reserve-existing-USB-addresses.patch +Patch29: libvirt-Add-tests-for-USB-address-assignment.patch +Patch30: libvirt-Assign-addresses-to-USB-devices.patch +Patch31: libvirt-Assign-addresses-on-USB-device-hotplug.patch +Patch32: libvirt-Auto-add-one-hub-if-there-are-too-many-USB-devices.patch +Patch33: libvirt-qemu-hotplug-fix-changeable-media-ejection.patch +Patch34: libvirt-lxc-Don-t-crash-by-forgetting-to-ref-transient-domains.patch +Patch35: libvirt-Introduce-iommu-device.patch +Patch36: libvirt-Add-QEMU_CAPS_DEVICE_INTEL_IOMMU.patch +Patch37: libvirt-qemu-format-intel-iommu-on-the-command-line.patch +Patch38: libvirt-qemu_monitor_json-add-support-to-search-QOM-device-path-by-device-alias.patch +Patch39: libvirt-hvsupport-Introduce-parseSymsFile.patch +Patch40: libvirt-hvsupport-use-a-regex-instead-of-XML-XPath.patch +Patch41: libvirt-hvsupport-construct-the-group-regex-upfront.patch +Patch42: libvirt-hvsupport-skip-non-matching-lines-early.patch +Patch43: libvirt-virconf-Fix-config-file-path-construction.patch +Patch44: libvirt-virDomainHostdevDefFree-Don-t-leak-privateData.patch +Patch45: libvirt-virt-admin-Output-srv-threadpool-info-data-as-unsigned-int-rather-than-signed.patch +Patch46: libvirt-util-Introduce-virISCSINodeNew.patch +Patch47: libvirt-iscsi-Establish-connection-to-target-via-static-target-login.patch +Patch48: libvirt-storage-Document-wiping-formatted-volume-types.patch +Patch49: libvirt-admin-Retrieve-the-SASL-context-for-both-local-and-remote-connection.patch +Patch50: libvirt-daemon-sasl-Don-t-forget-to-save-SASL-username-to-client-s-identity.patch +Patch51: libvirt-vsh-Make-vshInitDebug-return-int-instead-of-void.patch +Patch52: libvirt-tools-Make-use-of-the-correct-environment-variables.patch +Patch53: libvirt-util-Add-usage-for-encryption.patch +Patch54: libvirt-virStorageEncryptionSecretFree-Don-t-leak-secret-lookup-definition.patch +Patch55: libvirt-encryption-Add-luks-parsing-for-storageencryption.patch +Patch56: libvirt-encryption-Add-cipher-and-ivgen-to-encryption.patch +Patch57: libvirt-qemu-Introduce-helper-qemuDomainSecretDiskCapable.patch +Patch58: libvirt-tests-Adjust-LUKS-tests-to-use-volume-secret-type.patch +Patch59: libvirt-docs-Update-docs-to-reflect-LUKS-secret-changes.patch +Patch60: libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachHostSCSIDevice.patch +Patch61: libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachVirtioDiskDevice.patch +Patch62: libvirt-qemu-Alter-error-path-cleanup-for-qemuDomainAttachSCSIDisk.patch +Patch63: libvirt-qemu-Move-and-rename-qemuBufferEscapeComma.patch +Patch64: libvirt-storage-Add-support-to-create-a-luks-volume.patch +Patch65: libvirt-qemu-Add-secinfo-for-hotplug-virtio-disk.patch +Patch66: libvirt-qemu-Alter-the-qemuDomainGetSecretAESAlias-to-add-new-arg.patch +Patch67: libvirt-qemu-Add-luks-support-for-domain-disk.patch +Patch68: libvirt-qemu-Move-setting-of-obj-bools-for-qemuDomainAttachVirtioDiskDevice.patch +Patch69: libvirt-qemu-Move-setting-of-encobjAdded-for-qemuDomainAttachSCSIDisk.patch +Patch70: libvirt-storage-Fix-error-path.patch +Patch71: libvirt-qemu-Disallow-usage-of-luks-encryption-if-aes-secret-not-possible.patch +Patch72: libvirt-storage-Add-extra-failure-condition-for-luks-volume-creation.patch +Patch73: libvirt-virstoragefile-refactor-virStorageFileMatchesNNN-methods.patch +Patch74: libvirt-qemu-Make-qemuDomainCheckDiskStartupPolicy-self-contained.patch +Patch75: libvirt-qemu-Remove-unnecessary-label-and-its-only-reference.patch +Patch76: libvirt-qemu-Fix-support-for-startupPolicy-with-volume-pool-disks.patch +Patch77: libvirt-virsh-Report-error-when-explicit-connection-fails.patch +Patch78: libvirt-tests-Add-testing-of-backing-store-string-parser.patch +Patch79: libvirt-util-json-Make-first-argument-of-virJSONValueObjectForeachKeyValue-const.patch +Patch80: libvirt-util-qemu-Add-wrapper-for-JSON-commandline-conversion.patch +Patch81: libvirt-util-qemu-Add-support-for-user-passed-strings-in-JSON-commandline.patch +Patch82: libvirt-util-qemu-Allow-nested-objects-in-JSON-commandline-generator.patch +Patch83: libvirt-util-qemu-Allow-for-different-approaches-to-format-JSON-arrays.patch +Patch84: libvirt-util-qemu-Don-t-generate-any-extra-commas-in-virQEMUBuildCommandLineJSON.patch +Patch85: libvirt-util-json-Make-first-argument-of-virJSONValueCopy-const.patch +Patch86: libvirt-util-storage-Add-parser-for-qemu-s-json-backing-pseudo-protocol.patch +Patch87: libvirt-util-storage-Add-support-for-host-device-backing-specified-via-JSON.patch +Patch88: libvirt-util-storage-Add-support-for-URI-based-backing-volumes-in-qemu-s-JSON-pseudo-protocol.patch +Patch89: libvirt-util-storage-Add-json-pseudo-protocol-support-for-gluster-volumes.patch +Patch90: libvirt-util-storage-Add-json-pseudo-protocol-support-for-iSCSI-volumes.patch +Patch91: libvirt-util-storage-Add-JSON-backing-volume-parser-for-nbd-protocol.patch +Patch92: libvirt-util-storage-Add-JSON-backing-store-parser-for-sheepdog-protocol.patch +Patch93: libvirt-util-storage-Add-ssh-network-storage-protocol.patch +Patch94: libvirt-util-storage-Add-JSON-backing-volume-parser-for-ssh-protocol.patch +Patch95: libvirt-qemu-command-Rename-qemuBuildNetworkDriveURI-to-qemuBuildNetworkDriveStr.patch +Patch96: libvirt-qemu-command-Split-out-network-disk-URI-building.patch +Patch97: libvirt-qemu-command-Extract-drive-source-command-line-formatter.patch +Patch98: libvirt-qemu-command-Refactor-code-extracted-to-qemuBuildDriveSourceStr.patch +Patch99: libvirt-storage-gluster-Support-multiple-hosts-in-backend-functions.patch +Patch100: libvirt-util-qemu-Add-support-for-numbered-array-members.patch +Patch101: libvirt-qemu-command-Add-infrastructure-for-object-specified-disk-sources.patch +Patch102: libvirt-qemu-command-Add-support-for-multi-host-gluster-disks.patch +Patch103: libvirt-qemu-Need-to-free-fileprops-in-error-path.patch +Patch104: libvirt-storage-remove-luks-storage-volume-type.patch +Patch105: libvirt-RHEL-docs-Introduce-subsite-xsl.patch +Patch106: libvirt-qemu-Fix-domain-state-after-reset.patch +Patch107: libvirt-rpc-virnetserver-Rename-ClientSetProcessingControls-to-ClientSetLimits.patch +Patch108: libvirt-rpc-virnetserver-Move-virNetServerCheckLimits-which-is-static-up-in-the-file.patch +Patch109: libvirt-rpc-virnetserver-Add-code-to-CheckLimits-to-handle-suspending-of-services.patch +Patch110: libvirt-admin-rpc-virnetserver-Fix-updating-of-the-client-limits.patch +Patch111: libvirt-rpc-virnetserver-Remove-dead-code-checking-the-client-limits.patch +Patch112: libvirt-storage-Fix-a-NULL-ptr-dereference-in-virStorageBackendCreateQemuImg.patch +Patch113: libvirt-qemu-Introduce-qemuAliasFromHostdev.patch +Patch114: libvirt-qemu-Use-the-hostdev-alias-in-qemuDomainAttachHostSCSIDevice-error-path.patch +Patch115: libvirt-storage-Don-t-remove-the-pool-for-buildPool-failure-in-storagePoolCreate.patch +Patch116: libvirt-lxcDomainCreateXMLWithFiles-Avoid-crash.patch +Patch117: libvirt-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch +Patch118: libvirt-docs-Distribute-subsite.xsl.patch +Patch119: libvirt-qemuBuildMachineCommandLine-Follow-our-pattern.patch +Patch120: libvirt-Introduce-SMM-feature.patch +Patch121: libvirt-Introduce-secure-attribute-to-os-loader-element.patch +Patch122: libvirt-qemu-Enable-secure-boot.patch +Patch123: libvirt-qemu-Advertise-OVMF_CODE.secboot.fd.patch +Patch124: libvirt-tests-Fix-broken-build.patch +Patch125: libvirt-cpu_x86-Introduce-x86FeatureIsMigratable.patch +Patch126: libvirt-cpu_x86-Properly-drop-non-migratable-features.patch +Patch127: libvirt-tests-Add-a-test-for-host-model-CPU-with-CMT-feature.patch +Patch128: libvirt-cpu_x86-Fix-host-model-CPUs-on-hosts-with-CMT.patch +Patch129: libvirt-virt-admin-Fix-the-error-when-an-invalid-URI-has-been-provided.patch +Patch130: libvirt-conf-improve-error-log-when-PCI-devices-don-t-match-requested-controller.patch +Patch131: libvirt-conf-don-t-allow-connecting-upstream-port-directly-to-pce-expander-bus.patch +Patch132: libvirt-conf-restrict-where-dmi-to-pci-bridge-can-be-connected.patch +Patch133: libvirt-conf-restrict-expander-buses-to-connect-only-to-a-root-bus.patch +Patch134: libvirt-virNetDevMacVLanCreateWithVPortProfile-Don-t-mask-virNetDevMacVLanTapOpen-error.patch +Patch135: libvirt-qemu_command-don-t-modify-heads-for-graphics-device.patch +Patch136: libvirt-virsh-Fix-core-for-cmdSecretGetValue.patch +Patch137: libvirt-conf-report-an-error-message-for-non-existing-USB-hubs.patch +Patch138: libvirt-conf-free-the-ports-array-of-a-USB-hub.patch +Patch139: libvirt-utils-storage-Fix-JSON-field-name-for-uri-based-storage.patch +Patch140: libvirt-qemu-Adjust-the-cur_ballon-on-coldplug-unplug-of-dimms.patch +Patch141: libvirt-conf-Provide-error-on-undefined-iothreadsched-entry.patch +Patch142: libvirt-qemu-Fix-the-command-line-generation-for-rbd-auth-using-aes-secrets.patch +Patch143: libvirt-qemu-Fix-crash-hot-plugging-luks-volume.patch +Patch144: libvirt-Revert-admin-Fix-the-default-uri-for-session-daemon-to-libvirtd-session.patch +Patch145: libvirt-libvirt-convert-to-typesafe-virConf-accessors.patch +Patch146: libvirt-admin-Fix-default-uri-config-option-name-s-admin_uri_default-uri_default.patch +Patch147: libvirt-virt-admin-Properly-fix-the-default-session-daemon-URI-to-admin-server.patch +Patch148: libvirt-qemu-caps-Always-assume-QEMU_CAPS_SMP_TOPOLOGY.patch +Patch149: libvirt-conf-Extract-code-formatting-vCPU-info.patch +Patch150: libvirt-conf-Rename-virDomainVcpuInfoPtr-to-virDomainVcpuDefPtr.patch +Patch151: libvirt-conf-Don-t-report-errors-from-virDomainDefGetVcpu.patch +Patch152: libvirt-tests-qemuxml2xml-Format-status-XML-header-dynamically.patch +Patch153: libvirt-conf-convert-def-vcpus-to-a-array-of-pointers.patch +Patch154: libvirt-conf-Add-private-data-for-virDomainVcpuDef.patch +Patch155: libvirt-qemu-domain-Add-vcpu-private-data-structure.patch +Patch156: libvirt-qemu-domain-Extract-formating-and-parsing-of-vCPU-thread-ids.patch +Patch157: libvirt-qemu-Add-cpu-ID-to-the-vCPU-pid-list-in-the-status-XML.patch +Patch158: libvirt-qemu-Store-vCPU-thread-ids-in-vcpu-private-data-objects.patch +Patch159: libvirt-Fix-logic-in-qemuDomainObjPrivateXMLParseVcpu.patch +Patch160: libvirt-qemu-Add-qemuProcessSetupPid-and-use-it-in-qemuProcessSetupIOThread.patch +Patch161: libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupEmulator.patch +Patch162: libvirt-qemu-Use-qemuProcessSetupPid-in-qemuProcessSetupVcpu.patch +Patch163: libvirt-qemuBuildCpuCommandLine-Don-t-leak-buf.patch +Patch164: libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs.patch +Patch165: libvirt-conf-Make-really-sure-we-don-t-access-non-existing-vCPUs-again.patch +Patch166: libvirt-qemu-capabilities-Drop-unused-function-virQEMUCapsGetMachineTypes.patch +Patch167: libvirt-qemu-caps-Sanitize-storage-of-machine-type-related-data.patch +Patch168: libvirt-qemu-cap-Refactor-access-to-array-in-virQEMUCapsProbeQMPMachineTypes.patch +Patch169: libvirt-qemu-monitor-Add-monitor-API-for-device_add-supporting-JSON-objects.patch +Patch170: libvirt-qemu-monitor-Add-do-while-block-to-QEMU_CHECK_MONITOR_FULL.patch +Patch171: libvirt-qemu-Improve-error-message-in-virDomainGetVcpus.patch +Patch172: libvirt-qemu-domain-Rename-qemuDomainDetectVcpuPids-to-qemuDomainRefreshVcpuInfo.patch +Patch173: libvirt-qemu-monitor-Rename-qemuMonitor-JSON-Text-GetCPUInfo.patch +Patch174: libvirt-qemu-domain-Improve-vCPU-data-checking-in-qemuDomainRefreshVcpu.patch +Patch175: libvirt-qemu-domain-Simplify-return-values-of-qemuDomainRefreshVcpuInfo.patch +Patch176: libvirt-internal-Introduce-macro-for-stealing-pointers.patch +Patch177: libvirt-tests-qemucapabilities-Add-data-for-qemu-2.7.0.patch +Patch178: libvirt-qemu-setcpus-Report-better-errors.patch +Patch179: libvirt-qemu-setvcpus-Extract-setting-of-maximum-vcpu-count.patch +Patch180: libvirt-qemu-driver-Extract-setting-of-live-vcpu-count.patch +Patch181: libvirt-qemu-driver-Split-out-regular-vcpu-hotplug-code-into-a-function.patch +Patch182: libvirt-conf-Provide-error-on-undefined-vcpusched-entry.patch +Patch183: libvirt-qemu-monitor-Return-structures-from-qemuMonitorGetCPUInfo.patch +Patch184: libvirt-qemu-monitor-Return-struct-from-qemuMonitor-Text-Json-QueryCPUs.patch +Patch185: libvirt-qemu-Add-capability-for-query-hotpluggable-cpus-command.patch +Patch186: libvirt-qemu-Forbid-config-when-topology-based-cpu-count-doesn-t-match-the-config.patch +Patch187: libvirt-qemu-capabilities-Extract-availability-of-new-cpu-hotplug-for-machine-types.patch +Patch188: libvirt-qemu-monitor-Extract-QOM-path-from-query-cpus-reply.patch +Patch189: libvirt-qemu-monitor-Add-support-for-calling-query-hotpluggable-cpus.patch +Patch190: libvirt-qemu-monitor-Add-algorithm-for-combining-query-hotpluggable-cpus-data.patch +Patch191: libvirt-tests-Add-test-infrastructure-for-qemuMonitorGetCPUInfo.patch +Patch192: libvirt-tests-cpu-hotplug-Add-data-for-x86-hotplug-with-11-vcpus.patch +Patch193: libvirt-tests-cpu-hotplug-Add-data-for-ppc64-platform-including-hotplug.patch +Patch194: libvirt-tests-cpu-hotplug-Add-data-for-ppc64-out-of-order-hotplug.patch +Patch195: libvirt-tests-cpu-hotplug-Add-data-for-ppc64-without-threads-enabled.patch +Patch196: libvirt-qemu-domain-Extract-cpu-hotplug-related-data.patch +Patch197: libvirt-qemu-domain-Prepare-for-VCPUs-vanishing-while-libvirt-is-not-running.patch +Patch198: libvirt-util-Extract-and-rename-qemuDomainDelCgroupForThread-to-virCgroupDelThread.patch +Patch199: libvirt-conf-Add-XML-for-individual-vCPU-hotplug.patch +Patch200: libvirt-qemu-migration-Prepare-for-non-contiguous-vcpu-configurations.patch +Patch201: libvirt-qemu-command-Add-helper-to-convert-vcpu-definition-to-JSON-props.patch +Patch202: libvirt-qemu-process-Copy-final-vcpu-order-information-into-the-vcpu-definition.patch +Patch203: libvirt-qemu-command-Add-support-for-sparse-vcpu-topologies.patch +Patch204: libvirt-qemu-Use-modern-vcpu-hotplug-approach-if-possible.patch +Patch205: libvirt-qemu-hotplug-Allow-marking-unplugged-devices-by-alias.patch +Patch206: libvirt-qemu-hotplug-Add-support-for-VCPU-unplug.patch +Patch207: libvirt-virsh-vcpuinfo-Report-vcpu-number-from-the-structure-rather-than-it-s-position.patch +Patch208: libvirt-qemu-driver-Fix-qemuDomainHelperGetVcpus-for-sparse-vcpu-topologies.patch +Patch209: libvirt-doc-clarify-documentation-for-vcpu-order.patch +Patch210: libvirt-conf-Don-t-validate-vcpu-count-in-XML-parser.patch +Patch211: libvirt-qemu-driver-Validate-configuration-when-setting-maximum-vcpu-count.patch +Patch212: libvirt-conf-Fix-build-with-picky-GCC.patch +Patch213: libvirt-util-storage-Properly-set-protocol-type-when-parsing-gluster-json-string.patch +Patch214: libvirt-conf-Add-IOThread-quota-and-period-scheduler-cputune-defs.patch +Patch215: libvirt-qemu-Add-support-to-get-set-IOThread-period-and-quota-cgroup-values.patch +Patch216: libvirt-network-new-network-forward-mode-open.patch +Patch217: libvirt-virtlogd.socket-Tie-lifecycle-to-libvirtd.service.patch +Patch218: libvirt-cpu_x86-Fix-minimum-match-custom-CPUs-on-hosts-with-CMT.patch +Patch219: libvirt-qemu-cgroup-Extract-temporary-relaxing-of-cgroup-setting-for-vcpu-hotplug.patch +Patch220: libvirt-qemu-process-Fix-start-with-unpluggable-vcpus-with-NUMA-pinning.patch +Patch221: libvirt-Add-helper-for-removing-transient-definition.patch +Patch222: libvirt-qemu-Remove-stale-transient-def-when-migration-fails.patch +Patch223: libvirt-qemu-Don-t-use-query-migrate-on-destination.patch +Patch224: libvirt-conf-allow-hotplugging-legacy-PCI-device-to-manually-addressed-PCIe-slot.patch +Patch225: libvirt-conf-Add-support-for-virtio-net.rx_queue_size.patch +Patch226: libvirt-qemu_capabilities-Introduce-virtio-net-.rx_queue_size.patch +Patch227: libvirt-qemu-Implement-virtio-net-rx_queue_size.patch +Patch228: libvirt-audit-Audit-information-about-shmem-devices.patch +Patch229: libvirt-qemu-monitor-Use-a-more-obvious-iterator-name.patch +Patch230: libvirt-qemu-monitor-qemuMonitorGetCPUInfoHotplug-Add-iterator-anycpu.patch +Patch231: libvirt-qemu-monitor-Add-vcpu-state-information-to-monitor-data.patch +Patch232: libvirt-qemu-domain-Don-t-infer-vcpu-state.patch +Patch233: libvirt-virtlogd-Don-t-stop-or-restart-along-with-libvirtd.patch + + Requires: libvirt-daemon = %{version}-%{release} - %if %{with_network} Requires: libvirt-daemon-config-network = %{version}-%{release} - %endif - %if %{with_nwfilter} Requires: libvirt-daemon-config-nwfilter = %{version}-%{release} - %endif - %if %{with_driver_modules} - %if %{with_libxl} +%if %{with_libxl} Requires: libvirt-daemon-driver-libxl = %{version}-%{release} - %endif - %if %{with_lxc} +%endif +%if %{with_lxc} Requires: libvirt-daemon-driver-lxc = %{version}-%{release} - %endif - %if %{with_qemu} +%endif +%if %{with_qemu} Requires: libvirt-daemon-driver-qemu = %{version}-%{release} - %endif - %if %{with_uml} +%endif +%if %{with_uml} Requires: libvirt-daemon-driver-uml = %{version}-%{release} - %endif - %if %{with_xen} +%endif +%if %{with_xen} Requires: libvirt-daemon-driver-xen = %{version}-%{release} - %endif - %if %{with_vbox} +%endif +%if %{with_vbox} Requires: libvirt-daemon-driver-vbox = %{version}-%{release} - %endif - %if %{with_nwfilter} +%endif Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} - %endif - %if %{with_interface} Requires: libvirt-daemon-driver-interface = %{version}-%{release} - %endif Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} - %endif -%endif Requires: libvirt-client = %{version}-%{release} # All build-time requirements. Run-time requirements are @@ -716,14 +505,10 @@ BuildRequires: /usr/bin/pod2man %endif BuildRequires: git BuildRequires: perl -BuildRequires: perl-XML-XPath BuildRequires: python %if %{with_systemd} BuildRequires: systemd-units %endif -%if %{with_systemd_daemon} -BuildRequires: systemd-devel -%endif %if %{with_xen} || %{with_libxl} BuildRequires: xen-devel %endif @@ -734,91 +519,51 @@ BuildRequires: readline-devel BuildRequires: ncurses-devel BuildRequires: gettext BuildRequires: libtasn1-devel -%if (0%{?rhel} && 0%{?rhel} < 7) || (0%{?fedora} && 0%{?fedora} < 19) +%if (0%{?rhel} && 0%{?rhel} < 7) BuildRequires: libgcrypt-devel %endif BuildRequires: gnutls-devel BuildRequires: libattr-devel -%if %{with_libvirtd} # For pool-build probing for existing pools BuildRequires: libblkid-devel >= 2.17 -%endif -%if 0%{?fedora} || 0%{?rhel} >= 6 # for augparse, optionally used in testing BuildRequires: augeas -%endif -%if %{with_hal} -BuildRequires: hal-devel -%endif -%if %{with_udev} - %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 BuildRequires: systemd-devel >= 185 - %else +%else BuildRequires: libudev-devel >= 145 - %endif -BuildRequires: libpciaccess-devel >= 0.10.9 %endif -%if %{with_yajl} +BuildRequires: libpciaccess-devel >= 0.10.9 BuildRequires: yajl-devel -%endif %if %{with_sanlock} -# make sure libvirt is built with new enough sanlock on -# distros that have it; required for on_lockfailure - %if 0%{?fedora} >= 17 || 0%{?rhel} >= 6 BuildRequires: sanlock-devel >= 2.4 - %else -BuildRequires: sanlock-devel >= 1.8 - %endif %endif -%if %{with_libpcap} BuildRequires: libpcap-devel -%endif -%if %{with_libnl} - %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 -BuildRequires: libnl3-devel - %else +%if 0%{?rhel} && 0%{?rhel} < 7 BuildRequires: libnl-devel - %endif +%else +BuildRequires: libnl3-devel %endif -%if %{with_avahi} BuildRequires: avahi-devel -%endif -%if %{with_selinux} BuildRequires: libselinux-devel -%endif -%if %{with_apparmor} -BuildRequires: libapparmor-devel -%endif -%if %{with_network} BuildRequires: dnsmasq >= 2.41 BuildRequires: iptables - %if (0%{?fedora} && 0%{?fedora} < 17) || (0%{?rhel} && 0%{?rhel} < 7) +%if 0%{?rhel} && 0%{?rhel} < 7 BuildRequires: iptables-ipv6 - %endif -BuildRequires: radvd %endif -%if %{with_nwfilter} +BuildRequires: radvd BuildRequires: ebtables -%endif BuildRequires: module-init-tools -%if %{with_sasl} BuildRequires: cyrus-sasl-devel -%endif -%if %{with_polkit} - %if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 +# F22 polkit-devel doesn't pull in polkit anymore, which we need for pkcheck +BuildRequires: polkit >= 0.112 BuildRequires: polkit-devel >= 0.112 - %else - %if 0%{?fedora} || 0%{?rhel} >= 6 +%else BuildRequires: polkit-devel >= 0.93 - %else -BuildRequires: PolicyKit-devel >= 0.6 - %endif - %endif %endif -%if %{with_storage_fs} # For mount/umount in FS driver BuildRequires: util-linux -%endif %if %{with_qemu} # From QEMU RPMs BuildRequires: /usr/bin/qemu-img @@ -828,31 +573,14 @@ BuildRequires: /usr/bin/qemu-img BuildRequires: /usr/sbin/qcow-create %endif %endif -%if %{with_storage_lvm} # For LVM drivers BuildRequires: lvm2 -%endif -%if %{with_storage_iscsi} # For ISCSI driver BuildRequires: iscsi-initiator-utils -%endif -%if %{with_storage_disk} # For disk driver BuildRequires: parted-devel - %if 0%{?rhel} == 5 -# Broken RHEL-5 parted RPM is missing a dep -BuildRequires: e2fsprogs-devel - %endif -%endif -%if %{with_storage_mpath} || %{with_storage_disk} # For Multipath support - %if 0%{?rhel} == 5 -# Broken RHEL-5 packaging has header files in main RPM :-( -BuildRequires: device-mapper - %else BuildRequires: device-mapper-devel - %endif -%endif %if %{with_storage_rbd} %if 0%{?rhel} >= 7 BuildRequires: librados2-devel @@ -862,21 +590,17 @@ BuildRequires: ceph-devel %endif %endif %if %{with_storage_gluster} - %if 0%{?rhel} >= 6 -BuildRequires: glusterfs-api-devel >= 3.4.0 -BuildRequires: glusterfs-devel >= 3.4.0 - %else BuildRequires: glusterfs-api-devel >= 3.4.1 BuildRequires: glusterfs-devel >= 3.4.1 - %endif +%endif +%if %{with_storage_sheepdog} +BuildRequires: sheepdog %endif %if %{with_numactl} # For QEMU/LXC numa info BuildRequires: numactl-devel %endif -%if %{with_capng} BuildRequires: libcap-ng-devel >= 0.5.0 -%endif %if %{with_fuse} BuildRequires: fuse-devel >= 2.8.6 %endif @@ -884,46 +608,28 @@ BuildRequires: fuse-devel >= 2.8.6 BuildRequires: libssh2-devel >= 1.3.0 %endif -%if %{with_netcf} - %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 BuildRequires: netcf-devel >= 0.2.2 - %else - %if 0%{?fedora} >= 16 || 0%{?rhel} >= 6 +%else BuildRequires: netcf-devel >= 0.1.8 - %else -BuildRequires: netcf-devel >= 0.1.4 - %endif - %endif %endif %if %{with_esx} - %if 0%{?fedora} || 0%{?rhel} >= 6 BuildRequires: libcurl-devel - %else -BuildRequires: curl-devel - %endif %endif %if %{with_hyperv} BuildRequires: libwsman-devel >= 2.2.3 %endif -%if %{with_audit} BuildRequires: audit-libs-devel -%endif -%if %{with_dtrace} # we need /usr/sbin/dtrace BuildRequires: systemtap-sdt-devel -%endif -%if %{with_storage_fs} # For mount/umount in FS driver BuildRequires: util-linux # For showmount in FS driver (netfs discovery) BuildRequires: nfs-utils -%endif -%if %{with_firewalld} -# Communication with the firewall daemon uses DBus +# Communication with the firewall and polkit daemons use DBus BuildRequires: dbus-devel -%endif # Fedora build root suckage BuildRequires: gawk @@ -954,7 +660,6 @@ Group: Development/Libraries Includes the API reference for the libvirt C library, and a complete copy of the libvirt.org website documentation. -%if %{with_libvirtd} %package daemon Summary: Server side daemon and supporting files for libvirt library Group: Development/Libraries @@ -969,41 +674,29 @@ Requires: %{name}-client = %{version}-%{release} Requires: module-init-tools # for /sbin/ip & /sbin/tc Requires: iproute - %if %{with_avahi} - %if 0%{?rhel} == 5 -Requires: avahi - %else Requires: avahi-libs - %endif - %endif - %if %{with_polkit} - %if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 Requires: polkit >= 0.112 - %else - %if 0%{?fedora} || 0%{?rhel} >=6 +%else Requires: polkit >= 0.93 - %else -Requires: PolicyKit >= 0.6 - %endif - %endif - %endif - %if %{with_cgconfig} +%endif +%if %{with_cgconfig} Requires: libcgroup - %endif - %ifarch %{ix86} x86_64 ia64 +%endif +%ifarch %{ix86} x86_64 ia64 # For virConnectGetSysinfo Requires: dmidecode - %endif +%endif # For service management - %if %{with_systemd} +%if %{with_systemd} Requires(post): systemd-units Requires(post): systemd-sysv Requires(preun): systemd-units Requires(postun): systemd-units - %endif - %if %{with_numad} +%endif +%if %{with_numad} Requires: numad - %endif +%endif # libvirtd depends on 'messagebus' service Requires: dbus # For uid creation during pre @@ -1014,36 +707,26 @@ Server side daemon required to manage the virtualization capabilities of recent versions of Linux. Requires a hypervisor specific sub-RPM for specific drivers. - %if %{with_network} %package daemon-config-network Summary: Default configuration files for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-network = %{version}-%{release} - %endif %description daemon-config-network Default configuration files for setting up NAT based networking - %endif - %if %{with_nwfilter} %package daemon-config-nwfilter Summary: Network filter configuration files for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} - %endif %description daemon-config-nwfilter Network filter configuration files for cleaning guest traffic - %endif - %if %{with_driver_modules} - %if %{with_network} %package daemon-driver-network Summary: Network driver plugin for the libvirtd daemon Group: Development/Libraries @@ -1051,73 +734,61 @@ Requires: libvirt-daemon = %{version}-%{release} Requires: dnsmasq >= 2.41 Requires: radvd Requires: iptables - %if (0%{?fedora} && 0%{?fedora} < 17) || (0%{?rhel} && 0%{?rhel} < 7) +%if 0%{?rhel} && 0%{?rhel} < 7 Requires: iptables-ipv6 - %endif +%endif %description daemon-driver-network The network driver plugin for the libvirtd daemon, providing an implementation of the virtual network APIs using the Linux bridge capabilities. - %endif - %if %{with_nwfilter} %package daemon-driver-nwfilter Summary: Nwfilter driver plugin for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} Requires: iptables - %if (0%{?fedora} && 0%{?fedora} < 17) || (0%{?rhel} && 0%{?rhel} < 7) +%if 0%{?rhel} && 0%{?rhel} < 7 Requires: iptables-ipv6 - %endif +%endif Requires: ebtables %description daemon-driver-nwfilter The nwfilter driver plugin for the libvirtd daemon, providing an implementation of the firewall APIs using the ebtables, iptables and ip6tables capabilities - %endif - %if %{with_nodedev} %package daemon-driver-nodedev Summary: Nodedev driver plugin for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} # needed for device enumeration - %if %{with_hal} -Requires: hal - %endif - %if %{with_udev} - %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 +%if 0%{?fedora} || 0%{?rhel} >= 7 Requires: systemd >= 185 - %else +%else Requires: udev >= 145 - %endif - %endif +%endif %description daemon-driver-nodedev The nodedev driver plugin for the libvirtd daemon, providing an implementation of the node device APIs using the udev capabilities. - %endif - %if %{with_interface} %package daemon-driver-interface Summary: Interface driver plugin for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_netcf} && (0%{?fedora} >= 18 || 0%{?rhel} >= 7) +%if (0%{?fedora} || 0%{?rhel} >= 7) Requires: netcf-libs >= 0.2.2 - %endif +%endif %description daemon-driver-interface The interface driver plugin for the libvirtd daemon, providing an implementation of the network interface APIs using the netcf library - %endif %package daemon-driver-secret @@ -1130,65 +801,54 @@ The secret driver plugin for the libvirtd daemon, providing an implementation of the secret key APIs. - %if %{with_storage} %package daemon-driver-storage Summary: Storage driver plugin for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_storage_fs} Requires: nfs-utils # For mkfs Requires: util-linux # For glusterfs - %if 0%{?fedora} +%if 0%{?fedora} Requires: glusterfs-client >= 2.0.1 - %endif - %endif - %if %{with_storage_lvm} +%endif # For LVM drivers Requires: lvm2 - %endif - %if %{with_storage_iscsi} # For ISCSI driver Requires: iscsi-initiator-utils - %endif - %if %{with_storage_disk} # For disk driver Requires: parted Requires: device-mapper - %endif - %if %{with_storage_mpath} # For multipath support Requires: device-mapper - %endif - %if %{with_storage_sheepdog} +%if %{with_storage_sheepdog} # For Sheepdog support Requires: sheepdog - %endif - %if %{with_qemu} +%endif +%if %{with_qemu} # From QEMU RPMs Requires: /usr/bin/qemu-img - %else - %if %{with_xen} +%else + %if %{with_xen} # From Xen RPMs Requires: /usr/sbin/qcow-create - %endif - %endif + %endif +%endif %description daemon-driver-storage The storage driver plugin for the libvirtd daemon, providing an implementation of the storage APIs using LVM, iSCSI, parted and more. - %endif - %if %{with_qemu} +%if %{with_qemu} %package daemon-driver-qemu Summary: Qemu driver plugin for the libvirtd daemon Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} # There really is a hard cross-driver dependency here Requires: libvirt-daemon-driver-network = %{version}-%{release} +Requires: libvirt-daemon-driver-storage = %{version}-%{release} Requires: /usr/bin/qemu-img # For image compression Requires: gzip @@ -1200,10 +860,10 @@ Requires: xz The qemu driver plugin for the libvirtd daemon, providing an implementation of the hypervisor driver APIs using QEMU - %endif +%endif - %if %{with_lxc} +%if %{with_lxc} %package daemon-driver-lxc Summary: LXC driver plugin for the libvirtd daemon Group: Development/Libraries @@ -1215,10 +875,10 @@ Requires: libvirt-daemon-driver-network = %{version}-%{release} The LXC driver plugin for the libvirtd daemon, providing an implementation of the hypervisor driver APIs using the Linux kernel - %endif +%endif - %if %{with_uml} +%if %{with_uml} %package daemon-driver-uml Summary: Uml driver plugin for the libvirtd daemon Group: Development/Libraries @@ -1228,10 +888,10 @@ Requires: libvirt-daemon = %{version}-%{release} The UML driver plugin for the libvirtd daemon, providing an implementation of the hypervisor driver APIs using User Mode Linux - %endif +%endif - %if %{with_xen} +%if %{with_xen} %package daemon-driver-xen Summary: Xen driver plugin for the libvirtd daemon Group: Development/Libraries @@ -1241,10 +901,10 @@ Requires: libvirt-daemon = %{version}-%{release} The Xen driver plugin for the libvirtd daemon, providing an implementation of the hypervisor driver APIs using Xen - %endif +%endif - %if %{with_vbox} +%if %{with_vbox} %package daemon-driver-vbox Summary: VirtualBox driver plugin for the libvirtd daemon Group: Development/Libraries @@ -1254,10 +914,10 @@ Requires: libvirt-daemon = %{version}-%{release} The vbox driver plugin for the libvirtd daemon, providing an implementation of the hypervisor driver APIs using VirtualBox - %endif +%endif - %if %{with_libxl} +%if %{with_libxl} %package daemon-driver-libxl Summary: Libxl driver plugin for the libvirtd daemon Group: Development/Libraries @@ -1267,18 +927,16 @@ Requires: libvirt-daemon = %{version}-%{release} The Libxl driver plugin for the libvirtd daemon, providing an implementation of the hypervisor driver APIs using Libxl - %endif - %endif # %{with_driver_modules} +%endif - %if %{with_qemu_tcg} +%if %{with_qemu_tcg} %package daemon-qemu Summary: Server side daemon & driver required to run QEMU guests Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-qemu = %{version}-%{release} Requires: libvirt-daemon-driver-interface = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} @@ -1286,22 +944,20 @@ Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} - %endif Requires: qemu %description daemon-qemu Server side daemon and driver required to manage the virtualization capabilities of the QEMU TCG emulators - %endif +%endif - %if %{with_qemu_kvm} +%if %{with_qemu_kvm} %package daemon-kvm Summary: Server side daemon & driver required to run KVM guests Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-qemu = %{version}-%{release} Requires: libvirt-daemon-driver-interface = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} @@ -1309,28 +965,26 @@ Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} - %endif - %ifnarch %{power64} aarch64 + %ifnarch %{power64} aarch64 # On ppc64, ppc64le, and aarch64 there is no qemu-kvm, but we need # libvirt-daemon-kvm to be part of RHEL because layered products depend # on it. Luckily, they also directly require qemu-kvm-rhev so it is # safe (although ugly and dirty) to drop the dependency here. Requires: qemu-kvm - %endif + %endif %description daemon-kvm Server side daemon and driver required to manage the virtualization capabilities of the KVM hypervisor - %endif +%endif - %if %{with_lxc} +%if %{with_lxc} %package daemon-lxc Summary: Server side daemon & driver required to run LXC guests Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-lxc = %{version}-%{release} Requires: libvirt-daemon-driver-interface = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} @@ -1338,21 +992,19 @@ Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} - %endif %description daemon-lxc Server side daemon and driver required to manage the virtualization capabilities of LXC - %endif +%endif - %if %{with_uml} +%if %{with_uml} %package daemon-uml Summary: Server side daemon & driver required to run UML guests Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-uml = %{version}-%{release} Requires: libvirt-daemon-driver-interface = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} @@ -1360,49 +1012,45 @@ Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} - %endif # There are no UML kernel RPMs in Fedora/RHEL to depend on. %description daemon-uml Server side daemon and driver required to manage the virtualization capabilities of UML - %endif +%endif - %if %{with_xen} || %{with_libxl} +%if %{with_xen} || %{with_libxl} %package daemon-xen Summary: Server side daemon & driver required to run XEN guests Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} - %if %{with_xen} + %if %{with_xen} Requires: libvirt-daemon-driver-xen = %{version}-%{release} - %endif - %if %{with_libxl} + %endif + %if %{with_libxl} Requires: libvirt-daemon-driver-libxl = %{version}-%{release} - %endif + %endif Requires: libvirt-daemon-driver-interface = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} - %endif Requires: xen %description daemon-xen Server side daemon and driver required to manage the virtualization capabilities of XEN - %endif +%endif - %if %{with_vbox} +%if %{with_vbox} %package daemon-vbox Summary: Server side daemon & driver required to run VirtualBox guests Group: Development/Libraries Requires: libvirt-daemon = %{version}-%{release} - %if %{with_driver_modules} Requires: libvirt-daemon-driver-vbox = %{version}-%{release} Requires: libvirt-daemon-driver-interface = %{version}-%{release} Requires: libvirt-daemon-driver-network = %{version}-%{release} @@ -1410,13 +1058,11 @@ Requires: libvirt-daemon-driver-nodedev = %{version}-%{release} Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release} Requires: libvirt-daemon-driver-secret = %{version}-%{release} Requires: libvirt-daemon-driver-storage = %{version}-%{release} - %endif %description daemon-vbox Server side daemon and driver required to manage the virtualization capabilities of VirtualBox - %endif -%endif # %{with_libvirtd} +%endif %package client Summary: Client side library and utilities of the libvirt library @@ -1434,12 +1080,10 @@ Requires: gnutls-utils # Needed for probing the power management features of the host. Requires: pm-utils %endif -%if %{with_sasl} Requires: cyrus-sasl # Not technically required, but makes 'out-of-box' config # work correctly & doesn't have onerous dependencies Requires: cyrus-sasl-md5 -%endif %description client Shared libraries and client binaries needed to access to the @@ -1449,7 +1093,7 @@ virtualization capabilities of recent versions of Linux (and other OSes). %package wireshark Summary: Wireshark dissector plugin for libvirt RPC transactions Group: Development/Libraries -Requires: wireshark +Requires: wireshark >= 1.12.6-4 Requires: %{name}-client = %{version}-%{release} %description wireshark @@ -1472,7 +1116,6 @@ namespaces. Summary: Libraries, includes, etc. to compile with the libvirt library Group: Development/Libraries Requires: %{name}-client = %{version}-%{release} -Requires: %{name}-docs = %{version}-%{release} Requires: pkgconfig %description devel @@ -1482,11 +1125,7 @@ Include header files & development libraries for the libvirt C library. %package lock-sanlock Summary: Sanlock lock manager plugin for QEMU driver Group: Development/Libraries - %if 0%{?fedora} >= 17 || 0%{?rhel} >= 6 Requires: sanlock >= 2.4 - %else -Requires: sanlock >= 1.8 - %endif #for virt-sanlock-cleanup require augeas Requires: augeas Requires: %{name}-daemon = %{version}-%{release} @@ -1497,10 +1136,33 @@ Includes the Sanlock lock manager plugin for the QEMU driver %endif +%package nss +Summary: Libvirt plugin for Name Service Switch +Group: Development/Libraries +Requires: libvirt-daemon-driver-network = %{version}-%{release} + +%description nss +Libvirt plugin for NSS for translating domain names into IP addresses. + %prep +%if ! %{supported_platform} +echo "This RPM requires either Fedora >= 20 or RHEL >= 6" +exit 1 +%endif + %setup -q +# "make dist" replaces all symlinks with a copy of the linked files; +# we need to replace all of them with the original symlinks +echo "Restoring symlinks" +while read lnk target; do + if [ -e $lnk ]; then + rm -rf $lnk + ln -s $target $lnk + fi +done <%{_sourcedir}/symlinks || exit 1 + # Patches have to be stored in a temporary file because RPM has # a limit on the length of the result of any macro expansion; # if the string is longer, it's silently cropped @@ -1535,218 +1197,163 @@ if [ $COUNT -gt 0 ]; then fi echo "Applied $COUNT patches" rm -f $PATCHLIST +rm -rf .git %build -%if ! %{with_xen} - %define _without_xen --without-xen +%if %{with_xen} + %define arg_xen --with-xen +%else + %define arg_xen --without-xen %endif -%if ! %{with_qemu} - %define _without_qemu --without-qemu +%if %{with_qemu} + %define arg_qemu --with-qemu +%else + %define arg_qemu --without-qemu %endif -%if ! %{with_openvz} - %define _without_openvz --without-openvz +%if %{with_openvz} + %define arg_openvz --with-openvz +%else + %define arg_openvz --without-openvz %endif -%if ! %{with_lxc} - %define _without_lxc --without-lxc +%if %{with_lxc} + %define arg_lxc --with-lxc +%else + %define arg_lxc --without-lxc %endif -%if ! %{with_vbox} - %define _without_vbox --without-vbox +%if %{with_vbox} + %define arg_vbox --with-vbox +%else + %define arg_vbox --without-vbox %endif -%if ! %{with_xenapi} - %define _without_xenapi --without-xenapi +%if %{with_libxl} + %define arg_libxl --with-libxl +%else + %define arg_libxl --without-libxl %endif -%if ! %{with_libxl} - %define _without_libxl --without-libxl +%if %{with_phyp} + %define arg_phyp --with-phyp +%else + %define arg_phyp --without-phyp %endif -%if ! %{with_sasl} - %define _without_sasl --without-sasl +%if %{with_esx} + %define arg_esx --with-esx +%else + %define arg_esx --without-esx %endif -%if ! %{with_avahi} - %define _without_avahi --without-avahi +%if %{with_hyperv} + %define arg_hyperv --with-hyperv +%else + %define arg_hyperv --without-hyperv %endif -%if ! %{with_phyp} - %define _without_phyp --without-phyp +%if %{with_vmware} + %define arg_vmware --with-vmware +%else + %define arg_vmware --without-vmware %endif -%if ! %{with_esx} - %define _without_esx --without-esx +%if %{with_uml} + %define arg_uml --with-uml +%else + %define arg_uml --without-uml %endif -%if ! %{with_hyperv} - %define _without_hyperv --without-hyperv +%if %{with_storage_rbd} + %define arg_storage_rbd --with-storage-rbd +%else + %define arg_storage_rbd --without-storage-rbd %endif -%if ! %{with_vmware} - %define _without_vmware --without-vmware +%if %{with_storage_sheepdog} + %define arg_storage_sheepdog --with-storage-sheepdog +%else + %define arg_storage_sheepdog --without-storage-sheepdog %endif -%if ! %{with_vz} - %define _without_vz --without-vz +%if %{with_storage_gluster} + %define arg_storage_gluster --with-storage-gluster +%else + %define arg_storage_gluster --without-storage-gluster %endif -%if ! %{with_polkit} - %define _without_polkit --without-polkit +%if %{with_numactl} + %define arg_numactl --with-numactl +%else + %define arg_numactl --without-numactl %endif -%if ! %{with_libvirtd} - %define _without_libvirtd --without-libvirtd +%if %{with_numad} + %define arg_numad --with-numad +%else + %define arg_numad --without-numad %endif -%if ! %{with_uml} - %define _without_uml --without-uml -%endif - -%if %{with_rhel5} - %define _with_rhel5_api --with-rhel5-api -%endif - -%if ! %{with_interface} - %define _without_interface --without-interface -%endif - -%if ! %{with_network} - %define _without_network --without-network -%endif - -%if ! %{with_storage_fs} - %define _without_storage_fs --without-storage-fs -%endif - -%if ! %{with_storage_lvm} - %define _without_storage_lvm --without-storage-lvm -%endif - -%if ! %{with_storage_iscsi} - %define _without_storage_iscsi --without-storage-iscsi -%endif - -%if ! %{with_storage_disk} - %define _without_storage_disk --without-storage-disk -%endif - -%if ! %{with_storage_mpath} - %define _without_storage_mpath --without-storage-mpath -%endif - -%if ! %{with_storage_rbd} - %define _without_storage_rbd --without-storage-rbd -%endif - -%if ! %{with_storage_sheepdog} - %define _without_storage_sheepdog --without-storage-sheepdog -%endif - -%if ! %{with_storage_gluster} - %define _without_storage_gluster --without-storage-gluster -%endif - -%if ! %{with_numactl} - %define _without_numactl --without-numactl -%endif - -%if ! %{with_numad} - %define _without_numad --without-numad -%endif - -%if ! %{with_capng} - %define _without_capng --without-capng -%endif - -%if ! %{with_fuse} - %define _without_fuse --without-fuse -%endif - -%if ! %{with_netcf} - %define _without_netcf --without-netcf -%endif - -%if ! %{with_selinux} - %define _without_selinux --without-selinux -%endif - -%if ! %{with_apparmor} - %define _without_apparmor --without-apparmor -%endif - -%if ! %{with_hal} - %define _without_hal --without-hal -%endif - -%if ! %{with_udev} - %define _without_udev --without-udev -%endif - -%if ! %{with_yajl} - %define _without_yajl --without-yajl -%endif - -%if ! %{with_sanlock} - %define _without_sanlock --without-sanlock -%endif - -%if ! %{with_libpcap} - %define _without_libpcap --without-libpcap -%endif - -%if ! %{with_macvtap} - %define _without_macvtap --without-macvtap -%endif - -%if ! %{with_audit} - %define _without_audit --without-audit -%endif - -%if ! %{with_dtrace} - %define _without_dtrace --without-dtrace +%if %{with_fuse} + %define arg_fuse --with-fuse +%else + %define arg_fuse --without-fuse %endif -%if ! %{with_driver_modules} - %define _without_driver_modules --without-driver-modules +%if %{with_sanlock} + %define arg_sanlock --with-sanlock +%else + %define arg_sanlock --without-sanlock %endif %if %{with_firewalld} - %define _with_firewalld --with-firewalld -%endif - -%if ! %{with_wireshark} - %define _without_wireshark --without-wireshark-dissector + %define arg_firewalld --with-firewalld +%else + %define arg_firewalld --without-firewalld %endif -%if ! %{with_systemd_daemon} - %define _without_systemd_daemon --without-systemd-daemon +%if %{with_wireshark} + %define arg_wireshark --with-wireshark-dissector +%else + %define arg_wireshark --without-wireshark-dissector %endif -%if ! %{with_pm_utils} - %define _without_pm_utils --without-pm-utils +%if %{with_pm_utils} + %define arg_pm_utils --with-pm-utils +%else + %define arg_pm_utils --without-pm-utils %endif %define when %(date +"%%F-%%T") %define where %(hostname) %define who %{?packager}%{!?packager:Unknown} -%define with_packager --with-packager="%{who}, %{when}, %{where}" -%define with_packager_version --with-packager-version="%{release}" +%define arg_packager --with-packager="%{who}, %{when}, %{where}" +%define arg_packager_version --with-packager-version="%{release}" %if %{with_systemd} - %define init_scripts --with-init_script=systemd + %define arg_init_script --with-init-script=systemd %else - %define init_scripts --with-init_script=redhat + %define arg_init_script --with-init-script=redhat %endif -%if %{with_selinux} - %if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 - %define with_selinux_mount --with-selinux-mount="/sys/fs/selinux" - %else - %define with_selinux_mount --with-selinux-mount="/selinux" - %endif +%if 0%{?fedora} || 0%{?rhel} >= 7 + %define arg_selinux_mount --with-selinux-mount="/sys/fs/selinux" +%else + %define arg_selinux_mount --with-selinux-mount="/selinux" +%endif + +%if 0%{?fedora} + # Nightly firmware repo x86/OVMF + LOADERS="/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd" + # Nightly firmware repo aarch64/AAVMF + LOADERS="$LOADERS:/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw" + # Fedora official x86/OVMF + LOADERS="$LOADERS:/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd" + # Fedora official aarch64/AAVMF + LOADERS="$LOADERS:/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw" + %define arg_loader_nvram --with-loader-nvram="$LOADERS" %endif # place macros above and build commands below this comment @@ -1756,64 +1363,64 @@ rm -f $PATCHLIST %endif rm -f po/stamp-po -%configure %{?_without_xen} \ - %{?_without_qemu} \ - %{?_without_openvz} \ - %{?_without_lxc} \ - %{?_without_vbox} \ - %{?_without_libxl} \ - %{?_without_xenapi} \ - %{?_without_sasl} \ - %{?_without_avahi} \ - %{?_without_polkit} \ - %{?_without_libvirtd} \ - %{?_without_uml} \ - %{?_without_phyp} \ - %{?_without_esx} \ - %{?_without_hyperv} \ - %{?_without_vmware} \ - %{?_without_vz} \ +%configure %{?arg_xen} \ + %{?arg_qemu} \ + %{?arg_openvz} \ + %{?arg_lxc} \ + %{?arg_vbox} \ + %{?arg_libxl} \ + --with-sasl \ + --with-avahi \ + --with-polkit \ + --with-libvirtd \ + %{?arg_uml} \ + %{?arg_phyp} \ + %{?arg_esx} \ + %{?arg_hyperv} \ + %{?arg_vmware} \ + --without-xenapi \ + --without-vz \ --without-bhyve \ - %{?_without_interface} \ - %{?_without_network} \ - %{?_with_rhel5_api} \ - %{?_without_storage_fs} \ - %{?_without_storage_lvm} \ - %{?_without_storage_iscsi} \ - %{?_without_storage_disk} \ - %{?_without_storage_mpath} \ - %{?_without_storage_rbd} \ - %{?_without_storage_sheepdog} \ - %{?_without_storage_gluster} \ - %{?_without_numactl} \ - %{?_without_numad} \ - %{?_without_capng} \ - %{?_without_fuse} \ - %{?_without_netcf} \ - %{?_without_selinux} \ - %{?_with_selinux_mount} \ - %{?_without_apparmor} \ - %{?_without_hal} \ - %{?_without_udev} \ - %{?_without_yajl} \ - %{?_without_sanlock} \ - %{?_without_libpcap} \ - %{?_without_macvtap} \ - %{?_without_audit} \ - %{?_without_dtrace} \ - %{?_without_driver_modules} \ - %{?_with_firewalld} \ - %{?_without_wireshark} \ - %{?_without_systemd_daemon} \ - %{?_without_pm_utils} \ - %{with_packager} \ - %{with_packager_version} \ + --with-interface \ + --with-network \ + --with-storage-fs \ + --with-storage-lvm \ + --with-storage-iscsi \ + --with-storage-disk \ + --with-storage-mpath \ + %{?arg_storage_rbd} \ + %{?arg_storage_sheepdog} \ + %{?arg_storage_gluster} \ + %{?arg_numactl} \ + %{?arg_numad} \ + --with-capng \ + %{?arg_fuse} \ + --with-netcf \ + --with-selinux \ + %{?arg_selinux_mount} \ + --without-apparmor \ + --without-hal \ + --with-udev \ + --with-yajl \ + %{?arg_sanlock} \ + --with-libpcap \ + --with-macvtap \ + --with-audit \ + --with-dtrace \ + --with-driver-modules \ + %{?arg_firewalld} \ + %{?arg_wireshark} \ + %{?arg_pm_utils} \ + --with-nss-plugin \ + %{arg_packager} \ + %{arg_packager_version} \ --with-qemu-user=%{qemu_user} \ --with-qemu-group=%{qemu_group} \ - %{?with_loader_nvram} \ + --with-tls-priority=%{tls_priority} \ + %{?arg_loader_nvram} \ %{?enable_werror} \ --enable-expensive-tests \ - %{init_scripts} + %{arg_init_script} make %{?_smp_mflags} gzip -9 ChangeLog @@ -1825,26 +1432,20 @@ rm -fr %{buildroot} # on RHEL 5, thus we need to expand it here. make install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir} -for i in object-events dominfo domsuspend hellolibvirt openauth xml/nwfilter systemtap dommigrate domtop -do - (cd examples/$i ; make clean ; rm -rf .deps .libs Makefile Makefile.in) -done +make -C examples distclean + rm -f $RPM_BUILD_ROOT%{_libdir}/*.la rm -f $RPM_BUILD_ROOT%{_libdir}/*.a rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/lock-driver/*.la rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/lock-driver/*.a -%if %{with_driver_modules} rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.la rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.a -%endif %if %{with_wireshark} rm -f $RPM_BUILD_ROOT%{_libdir}/wireshark/plugins/*/libvirt.la +mv $RPM_BUILD_ROOT%{_libdir}/wireshark/plugins/*/libvirt.so \ + $RPM_BUILD_ROOT%{_libdir}/wireshark/plugins/libvirt.so %endif -# Temporarily get rid of not-installed libvirt-admin.so -rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt-admin.so - -%if %{with_network} install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/lib/libvirt/dnsmasq/ # We don't want to install /etc/libvirt/qemu/networks in the main %files list # because if the admin wants to delete the default network completely, we don't @@ -1856,10 +1457,6 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml # Strip auto-generated UUID - we need it generated per-install sed -i -e "//d" $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml -%else -rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml -rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml -%endif %if ! %{with_qemu} rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirtd_qemu.aug rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug @@ -1897,17 +1494,11 @@ rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.uml # Copied into libvirt-docs subpackage eventually mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} libvirt-docs -%if %{with_dtrace} - %ifarch %{power64} s390x x86_64 ia64 alpha sparc64 +%ifarch %{power64} s390x x86_64 ia64 alpha sparc64 mv $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_probes.stp \ $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_probes-64.stp mv $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_qemu_probes.stp \ $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_qemu_probes-64.stp - %endif -%endif - -%if 0%{?rhel} == 5 -rm -f $RPM_BUILD_ROOT%{_prefix}/lib/sysctl.d/60-libvirtd.conf %endif %clean @@ -1930,118 +1521,121 @@ then exit 1 fi -%if %{with_libvirtd} %pre daemon - %if ! %{with_driver_modules} - %if %{with_qemu} - %if 0%{?fedora} || 0%{?rhel} >= 6 -# We want soft static allocation of well-known ids, as disk images -# are commonly shared across NFS mounts by id rather than name; see -# https://fedoraproject.org/wiki/Packaging:UsersAndGroups -getent group kvm >/dev/null || groupadd -f -g 36 -r kvm -getent group qemu >/dev/null || groupadd -f -g 107 -r qemu -if ! getent passwd qemu >/dev/null; then - if ! getent passwd 107 >/dev/null; then - useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu - else - useradd -r -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu - fi -fi - %endif - %endif - %endif - - %if %{with_polkit} - %if 0%{?fedora} || 0%{?rhel} >= 6 # 'libvirt' group is just to allow password-less polkit access to # libvirtd. The uid number is irrelevant, so we use dynamic allocation # described at the above link. getent group libvirt >/dev/null || groupadd -r libvirt - %endif - %endif exit 0 %post daemon - %if %{with_systemd} - %if %{with_systemd_macros} - %systemd_post virtlockd.socket libvirtd.service libvirtd.socket - %else +%if %{with_systemd} + %if %{with_systemd_macros} + %systemd_post virtlockd.socket virtlogd.socket libvirtd.service + %else if [ $1 -eq 1 ] ; then # Initial installation /bin/systemctl enable \ virtlockd.socket \ + virtlogd.socket \ libvirtd.service >/dev/null 2>&1 || : fi - %endif - %else - %if %{with_cgconfig} + %endif +%else + %if %{with_cgconfig} # Starting with Fedora 16/RHEL-7, systemd automounts all cgroups, # and cgconfig is no longer a necessary service. - %if (0%{?rhel} && 0%{?rhel} < 7) || (0%{?fedora} && 0%{?fedora} < 16) + %if 0%{?rhel} && 0%{?rhel} < 7 if [ "$1" -eq "1" ]; then /sbin/chkconfig cgconfig on fi - %endif %endif + %endif /sbin/chkconfig --add libvirtd +/sbin/chkconfig --add virtlogd /sbin/chkconfig --add virtlockd - %endif +%endif %preun daemon - %if %{with_systemd} - %if %{with_systemd_macros} - %systemd_preun libvirtd.socket libvirtd.service virtlockd.socket virtlockd.service - %else +%if %{with_systemd} + %if %{with_systemd_macros} + %systemd_preun libvirtd.service virtlogd.socket virtlogd.service virtlockd.socket virtlockd.service + %else if [ $1 -eq 0 ] ; then # Package removal, not upgrade /bin/systemctl --no-reload disable \ - libvirtd.socket \ libvirtd.service \ + virtlogd.socket \ + virtlogd.service \ virtlockd.socket \ virtlockd.service > /dev/null 2>&1 || : /bin/systemctl stop \ - libvirtd.socket \ libvirtd.service \ + virtlogd.socket \ + virtlogd.service \ virtlockd.socket \ virtlockd.service > /dev/null 2>&1 || : fi - %endif - %else + %endif +%else if [ $1 = 0 ]; then /sbin/service libvirtd stop 1>/dev/null 2>&1 /sbin/chkconfig --del libvirtd + /sbin/service virtlogd stop 1>/dev/null 2>&1 + /sbin/chkconfig --del virtlogd /sbin/service virtlockd stop 1>/dev/null 2>&1 /sbin/chkconfig --del virtlockd fi - %endif +%endif %postun daemon - %if %{with_systemd} +%if %{with_systemd} /bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then /bin/systemctl reload-or-try-restart virtlockd.service >/dev/null 2>&1 || : + /bin/systemctl reload-or-try-restart virtlogd.service >/dev/null 2>&1 || : /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || : fi - %else +%else if [ $1 -ge 1 ]; then /sbin/service virtlockd reload > /dev/null 2>&1 || : + /sbin/service virtlogd reload > /dev/null 2>&1 || : /sbin/service libvirtd condrestart > /dev/null 2>&1 fi - %endif +%endif - %if %{with_systemd} - %else +%if %{with_systemd} +%else %triggerpostun daemon -- libvirt-daemon < 1.2.1 if [ "$1" -ge "1" ]; then /sbin/service virtlockd reload > /dev/null 2>&1 || : + /sbin/service virtlogd reload > /dev/null 2>&1 || : /sbin/service libvirtd condrestart > /dev/null 2>&1 fi - %endif +%endif + +# In upgrade scenario we must explicitly enable virtlockd/virtlogd +# sockets, if libvirtd is already enabled and start them if +# libvirtd is running, otherwise you'll get failures to start +# guests +%triggerpostun daemon -- libvirt-daemon < 1.3.0 +if [ $1 -ge 1 ] ; then +%if %{with_systemd} + /bin/systemctl is-enabled libvirtd.service 1>/dev/null 2>&1 && + /bin/systemctl enable virtlogd.socket || : + /bin/systemctl is-active libvirtd.service 1>/dev/null 2>&1 && + /bin/systemctl start virtlogd.socket || : +%else + /sbin/chkconfig libvirtd 1>/dev/null 2>&1 && + /sbin/chkconfig virtlogd on || : + /sbin/service libvirtd status 1>/dev/null 2>&1 && + /sbin/service virtlogd start || : +%endif +fi - %if %{with_network} %post daemon-config-network if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ; then # see if the network used by default network creates a conflict, @@ -2078,10 +1672,17 @@ if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ; < %{_datadir}/libvirt/networks/default.xml \ > %{_sysconfdir}/libvirt/qemu/networks/default.xml ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml + + # Make sure libvirt picks up the new network defininiton +%if %{with_systemd} + /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 ||: +%else + /sbin/service libvirtd condrestart > /dev/null 2>&1 || : +%endif + fi - %endif - %if %{with_systemd} +%if %{with_systemd} %triggerun -- libvirt < 0.9.4 %{_bindir}/systemd-sysv-convert --save libvirtd >/dev/null 2>&1 ||: @@ -2091,12 +1692,10 @@ fi # Run these because the SysV package being removed won't do them /sbin/chkconfig --del libvirtd >/dev/null 2>&1 || : /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || : - %endif +%endif - %if %{with_driver_modules} - %if %{with_qemu} +%if %{with_qemu} %pre daemon-driver-qemu - %if 0%{?fedora} || 0%{?rhel} >= 6 # We want soft static allocation of well-known ids, as disk images # are commonly shared across NFS mounts by id rather than name; see # https://fedoraproject.org/wiki/Packaging:UsersAndGroups @@ -2110,10 +1709,7 @@ if ! getent passwd qemu >/dev/null; then fi fi exit 0 - %endif - %endif - %endif -%endif # %{with_libvirtd} +%endif %preun client @@ -2171,11 +1767,10 @@ exit 0 %endif %files -%defattr(-, root, root) %files docs -%defattr(-, root, root) -%doc AUTHORS ChangeLog.gz NEWS README TODO libvirt-docs/* +%doc AUTHORS ChangeLog.gz NEWS README TODO +%doc libvirt-docs/* # API docs %dir %{_datadir}/gtk-doc/html/libvirt/ @@ -2183,30 +1778,41 @@ exit 0 %doc %{_datadir}/gtk-doc/html/libvirt/*.html %doc %{_datadir}/gtk-doc/html/libvirt/*.png %doc %{_datadir}/gtk-doc/html/libvirt/*.css +%doc examples/hellolibvirt +%doc examples/object-events +%doc examples/dominfo +%doc examples/domsuspend +%doc examples/dommigrate +%doc examples/openauth +%doc examples/xml +%doc examples/rename +%doc examples/systemtap +%doc examples/admin + -%if %{with_libvirtd} %files daemon -%defattr(-, root, root) %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/ - %if %{with_systemd} +%if %{with_systemd} %{_unitdir}/libvirtd.service -%{_unitdir}/libvirtd.socket +%{_unitdir}/virtlogd.service +%{_unitdir}/virtlogd.socket %{_unitdir}/virtlockd.service %{_unitdir}/virtlockd.socket - %else +%else %{_sysconfdir}/rc.d/init.d/libvirtd +%{_sysconfdir}/rc.d/init.d/virtlogd %{_sysconfdir}/rc.d/init.d/virtlockd - %endif +%endif %doc daemon/libvirtd.upstart %config(noreplace) %{_sysconfdir}/sysconfig/libvirtd +%config(noreplace) %{_sysconfdir}/sysconfig/virtlogd %config(noreplace) %{_sysconfdir}/sysconfig/virtlockd %config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf +%config(noreplace) %{_sysconfdir}/libvirt/virtlogd.conf %config(noreplace) %{_sysconfdir}/libvirt/virtlockd.conf - %if 0%{?fedora} || 0%{?rhel} >= 6 %config(noreplace) %{_prefix}/lib/sysctl.d/60-libvirtd.conf - %endif %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd %dir %{_datadir}/libvirt/ @@ -2224,125 +1830,44 @@ exit 0 %{_datadir}/augeas/lenses/libvirtd.aug %{_datadir}/augeas/lenses/tests/test_libvirtd.aug +%{_datadir}/augeas/lenses/virtlogd.aug +%{_datadir}/augeas/lenses/tests/test_virtlogd.aug %{_datadir}/augeas/lenses/virtlockd.aug %{_datadir}/augeas/lenses/tests/test_virtlockd.aug %{_datadir}/augeas/lenses/libvirt_lockd.aug - %if %{with_qemu} +%if %{with_qemu} %{_datadir}/augeas/lenses/tests/test_libvirt_lockd.aug - %endif +%endif - %if %{with_polkit} - %if 0%{?fedora} || 0%{?rhel} >= 6 %{_datadir}/polkit-1/actions/org.libvirt.unix.policy %{_datadir}/polkit-1/actions/org.libvirt.api.policy %{_datadir}/polkit-1/rules.d/50-libvirt.rules - %else -%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy - %endif - %endif %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/ %attr(0755, root, root) %{_libexecdir}/libvirt_iohelper - %if %{with_apparmor} -%attr(0755, root, root) %{_libexecdir}/virt-aa-helper - %endif - %attr(0755, root, root) %{_sbindir}/libvirtd +%attr(0755, root, root) %{_sbindir}/virtlogd %attr(0755, root, root) %{_sbindir}/virtlockd %{_mandir}/man8/libvirtd.8* +%{_mandir}/man8/virtlogd.8* %{_mandir}/man8/virtlockd.8* - %if ! %{with_driver_modules} - %if %{with_network} || %{with_qemu} -%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/ - %endif - %if %{with_network} || %{with_nwfilter} -%ghost %dir %{_localstatedir}/run/libvirt/network/ - %endif - %if %{with_network} -%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/ -%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart -%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/network/ -%dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/dnsmasq/ -%attr(0755, root, root) %{_libexecdir}/libvirt_leaseshelper - %endif - %if %{with_nwfilter} -%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/ - %endif - %if %{with_storage_disk} -%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper - %endif - %if %{with_qemu} -%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf -%config(noreplace) %{_sysconfdir}/libvirt/qemu-lockd.conf -%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.qemu -%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/ -%ghost %dir %attr(0700, root, root) %{_localstatedir}/run/libvirt/qemu/ -%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/ -%dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/cache/libvirt/qemu/ -%{_datadir}/augeas/lenses/libvirtd_qemu.aug -%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug - %endif - %if %{with_lxc} -%config(noreplace) %{_sysconfdir}/libvirt/lxc.conf -%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.lxc -%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/lxc/ -%ghost %dir %{_localstatedir}/run/libvirt/lxc/ -%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/lxc/ -%{_datadir}/augeas/lenses/libvirtd_lxc.aug -%{_datadir}/augeas/lenses/tests/test_libvirtd_lxc.aug -%attr(0755, root, root) %{_libexecdir}/libvirt_lxc - %endif - %if %{with_uml} -%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.uml -%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/uml/ -%ghost %dir %{_localstatedir}/run/libvirt/uml/ -%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/ - %endif - %if %{with_libxl} -%config(noreplace) %{_sysconfdir}/libvirt/libxl.conf -%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.libxl -%config(noreplace) %{_sysconfdir}/libvirt/libxl-lockd.conf -%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/libxl/ -%ghost %dir %{_localstatedir}/run/libvirt/libxl/ -%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/ -%{_datadir}/augeas/lenses/libvirtd_libxl.aug -%{_datadir}/augeas/lenses/tests/test_libvirtd_libxl.aug - %endif - %if %{with_xen} -%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/xen/ - %endif - %endif # ! %{with_driver_modules} - - %if %{with_network} - %doc examples/polkit/*.rules %files daemon-config-network -%defattr(-, root, root) %dir %{_datadir}/libvirt/networks/ %{_datadir}/libvirt/networks/default.xml - %endif - %if %{with_nwfilter} %files daemon-config-nwfilter -%defattr(-, root, root) %{_sysconfdir}/libvirt/nwfilter/*.xml - %endif - %if %{with_driver_modules} - %if %{with_interface} %files daemon-driver-interface -%defattr(-, root, root) %{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so - %endif - %if %{with_network} %files daemon-driver-network -%defattr(-, root, root) %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/ %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/ %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart @@ -2351,38 +1876,24 @@ exit 0 %dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/dnsmasq/ %attr(0755, root, root) %{_libexecdir}/libvirt_leaseshelper %{_libdir}/%{name}/connection-driver/libvirt_driver_network.so - %endif - %if %{with_nodedev} %files daemon-driver-nodedev -%defattr(-, root, root) %{_libdir}/%{name}/connection-driver/libvirt_driver_nodedev.so - %endif - %if %{with_nwfilter} %files daemon-driver-nwfilter -%defattr(-, root, root) %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/ %ghost %dir %{_localstatedir}/run/libvirt/network/ %{_libdir}/%{name}/connection-driver/libvirt_driver_nwfilter.so - %endif %files daemon-driver-secret -%defattr(-, root, root) %{_libdir}/%{name}/connection-driver/libvirt_driver_secret.so - %if %{with_storage} %files daemon-driver-storage -%defattr(-, root, root) - %if %{with_storage_disk} %attr(0755, root, root) %{_libexecdir}/libvirt_parthelper - %endif %{_libdir}/%{name}/connection-driver/libvirt_driver_storage.so - %endif - %if %{with_qemu} +%if %{with_qemu} %files daemon-driver-qemu -%defattr(-, root, root) %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/ %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/ %config(noreplace) %{_sysconfdir}/libvirt/qemu.conf @@ -2394,11 +1905,10 @@ exit 0 %{_datadir}/augeas/lenses/libvirtd_qemu.aug %{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug %{_libdir}/%{name}/connection-driver/libvirt_driver_qemu.so - %endif +%endif - %if %{with_lxc} +%if %{with_lxc} %files daemon-driver-lxc -%defattr(-, root, root) %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/lxc/ %config(noreplace) %{_sysconfdir}/libvirt/lxc.conf %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.lxc @@ -2408,28 +1918,25 @@ exit 0 %{_datadir}/augeas/lenses/tests/test_libvirtd_lxc.aug %attr(0755, root, root) %{_libexecdir}/libvirt_lxc %{_libdir}/%{name}/connection-driver/libvirt_driver_lxc.so - %endif +%endif - %if %{with_uml} +%if %{with_uml} %files daemon-driver-uml -%defattr(-, root, root) %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/uml/ %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.uml %ghost %dir %{_localstatedir}/run/libvirt/uml/ %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/ %{_libdir}/%{name}/connection-driver/libvirt_driver_uml.so - %endif +%endif - %if %{with_xen} +%if %{with_xen} %files daemon-driver-xen -%defattr(-, root, root) %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/xen/ %{_libdir}/%{name}/connection-driver/libvirt_driver_xen.so - %endif +%endif - %if %{with_libxl} +%if %{with_libxl} %files daemon-driver-libxl -%defattr(-, root, root) %config(noreplace) %{_sysconfdir}/libvirt/libxl.conf %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.libxl %config(noreplace) %{_sysconfdir}/libvirt/libxl-lockd.conf @@ -2439,49 +1946,39 @@ exit 0 %ghost %dir %{_localstatedir}/run/libvirt/libxl/ %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/ %{_libdir}/%{name}/connection-driver/libvirt_driver_libxl.so - %endif +%endif - %if %{with_vbox} +%if %{with_vbox} %files daemon-driver-vbox -%defattr(-, root, root) %{_libdir}/%{name}/connection-driver/libvirt_driver_vbox.so - %endif - %endif # %{with_driver_modules} +%endif - %if %{with_qemu_tcg} +%if %{with_qemu_tcg} %files daemon-qemu -%defattr(-, root, root) - %endif +%endif - %if %{with_qemu_kvm} +%if %{with_qemu_kvm} %files daemon-kvm -%defattr(-, root, root) - %endif +%endif - %if %{with_lxc} +%if %{with_lxc} %files daemon-lxc -%defattr(-, root, root) - %endif +%endif - %if %{with_uml} +%if %{with_uml} %files daemon-uml -%defattr(-, root, root) - %endif +%endif - %if %{with_xen} || %{with_libxl} +%if %{with_xen} || %{with_libxl} %files daemon-xen -%defattr(-, root, root) - %endif +%endif - %if %{with_vbox} +%if %{with_vbox} %files daemon-vbox -%defattr(-, root, root) - %endif -%endif # %{with_libvirtd} +%endif %if %{with_sanlock} %files lock-sanlock -%defattr(-, root, root) %if %{with_qemu} %config(noreplace) %{_sysconfdir}/libvirt/qemu-sanlock.conf %endif @@ -2498,15 +1995,17 @@ exit 0 %endif %files client -f %{name}.lang -%defattr(-, root, root) %doc COPYING COPYING.LESSER %config(noreplace) %{_sysconfdir}/libvirt/libvirt.conf +%config(noreplace) %{_sysconfdir}/libvirt/libvirt-admin.conf %{_mandir}/man1/virsh.1* +%{_mandir}/man1/virt-admin.1* %{_mandir}/man1/virt-xml-validate.1* %{_mandir}/man1/virt-pki-validate.1* %{_mandir}/man1/virt-host-validate.1* %{_bindir}/virsh +%{_bindir}/virt-admin %{_bindir}/virt-xml-validate %{_bindir}/virt-pki-validate %{_bindir}/virt-host-validate @@ -2515,11 +2014,9 @@ exit 0 %{_libdir}/libvirt-lxc.so.* %{_libdir}/libvirt-admin.so.* -%if %{with_dtrace} %{_datadir}/systemtap/tapset/libvirt_probes*.stp %{_datadir}/systemtap/tapset/libvirt_qemu_probes*.stp %{_datadir}/systemtap/tapset/libvirt_functions.stp -%endif %dir %{_datadir}/libvirt/ %dir %{_datadir}/libvirt/schemas/ @@ -2552,15 +2049,16 @@ exit 0 %attr(0755, root, root) %{_libexecdir}/libvirt-guests.sh %dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/ -%if %{with_sasl} %config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf -%endif %if %{with_wireshark} %files wireshark -%{_libdir}/wireshark/plugins/*/libvirt.so +%{_libdir}/wireshark/plugins/libvirt.so %endif +%files nss +%{_libdir}/libnss_libvirt.so.2 + %if %{with_lxc} %files login-shell %attr(4750, root, virtlogin) %{_bindir}/virt-login-shell @@ -2569,14 +2067,15 @@ exit 0 %endif %files devel -%defattr(-, root, root) - %{_libdir}/libvirt.so +%{_libdir}/libvirt-admin.so %{_libdir}/libvirt-qemu.so %{_libdir}/libvirt-lxc.so %dir %{_includedir}/libvirt %{_includedir}/libvirt/virterror.h %{_includedir}/libvirt/libvirt.h +%{_includedir}/libvirt/libvirt-admin.h +%{_includedir}/libvirt/libvirt-common.h %{_includedir}/libvirt/libvirt-domain.h %{_includedir}/libvirt/libvirt-domain-snapshot.h %{_includedir}/libvirt/libvirt-event.h @@ -2591,64 +2090,326 @@ exit 0 %{_includedir}/libvirt/libvirt-qemu.h %{_includedir}/libvirt/libvirt-lxc.h %{_libdir}/pkgconfig/libvirt.pc +%{_libdir}/pkgconfig/libvirt-admin.pc %{_libdir}/pkgconfig/libvirt-qemu.pc %{_libdir}/pkgconfig/libvirt-lxc.pc %dir %{_datadir}/libvirt/api/ %{_datadir}/libvirt/api/libvirt-api.xml +%{_datadir}/libvirt/api/libvirt-admin-api.xml %{_datadir}/libvirt/api/libvirt-qemu-api.xml %{_datadir}/libvirt/api/libvirt-lxc-api.xml - - -%doc docs/*.html docs/html docs/*.gif +# Needed building python bindings %doc docs/libvirt-api.xml -%doc examples/hellolibvirt -%doc examples/object-events -%doc examples/dominfo -%doc examples/domsuspend -%doc examples/dommigrate -%doc examples/openauth -%doc examples/xml -%doc examples/systemtap + %changelog -* Thu May 26 2016 Jiri Denemark - 1.2.17-13.el7_2.5 -- nodedev: Indent PCI express for future fix (rhbz#1331328) -- nodedev: Expose PCI header type (rhbz#1331328) -- nodedev: Fix parsing of generated XMLs (rhbz#1331328) -- qemu: driver: Remove unnecessary flag in qemuDomainGetStatsBlock (rhbz#1339963) -- qemu: driver: Separate bulk stats worker for block devices (rhbz#1339963) -- qemu: bulk stats: Don't access possibly blocked storage (rhbz#1339963) - -* Wed Mar 2 2016 Jiri Denemark - 1.2.17-13.el7_2.4 -- systemd: Escape machine name for machined (rhbz#1308494) -- systemd: Add virSystemdGetMachineNameByPID (rhbz#1308494) -- systemd: Modernize machine naming (rhbz#1308494) -- virSystemdGetMachineNameByPID: Initialize @reply (rhbz#1308494) -- util: Fix virCgroupNewMachine ATTRIBUTE_NONNULL args (rhbz#1308494) -- dbus: Don't unref NULL messages (rhbz#1308494) -- vmx: Expose datacenter path in domain XML (rhbz#1305489) - -* Wed Jan 27 2016 Jiri Denemark - 1.2.17-13.el7_2.3 -- vmx: Adapt to emptyBackingString for cdrom-image (rhbz#1301892) - -* Mon Nov 23 2015 Jiri Denemark - 1.2.17-13.el7_2.2 -- qemu: Support vhost-user-multiqueue with QEMU 2.3 (rhbz#1284416) - -* Fri Nov 20 2015 Jiri Denemark - 1.2.17-13.el7_2.1 -- qemu: migration: Properly parse memory hotplug migration flag (rhbz#1280419) -- qemu: Emit correct audit message for memory hot unplug (rhbz#1280420) -- qemu: Emit correct audit message for memory hot plug (rhbz#1280420) -- qemu: Extract logic to determine the mlock limit size for VFIO (rhbz#1280420) -- qemu: hotplug: Fix mlock limit handling on memory hotplug (rhbz#1280420) -- qemu: domain: Restructurate control flow in qemuDomainGetMlockLimitBytes (rhbz#1280420) -- qemu: Explain mlock limit size more in detail (rhbz#1280420) -- qemu: hotplug: Reject VFIO hotplug if setting RLIMIT_MEMLOCK fails (rhbz#1283924) -- process: Log when limiting the amount of locked memory (rhbz#1283924) -- qemu: Use qemuDomainRequiresMlock() in qemuBuildCommandLine() (rhbz#1283924) -- qemu: Use qemuDomainRequiresMlock() when attaching PCI hostdev (rhbz#1283924) -- qemu: Add ppc64-specific math to qemuDomainGetMlockLimitBytes() (rhbz#1283924) -- qemu: Always set locked memory limit for ppc64 domains (rhbz#1283924) +* Wed Sep 21 2016 Jiri Denemark - 2.0.0-10 +- virtlogd: Don't stop or restart along with libvirtd (rhbz#1372576) + +* Wed Sep 14 2016 Jiri Denemark - 2.0.0-9 +- Add helper for removing transient definition (rhbz#1368774) +- qemu: Remove stale transient def when migration fails (rhbz#1368774) +- qemu: Don't use query-migrate on destination (rhbz#1374613) +- conf: allow hotplugging "legacy PCI" device to manually addressed PCIe slot (rhbz#1337490) +- conf: Add support for virtio-net.rx_queue_size (rhbz#1366989) +- qemu_capabilities: Introduce virtio-net-*.rx_queue_size (rhbz#1366989) +- qemu: Implement virtio-net rx_queue_size (rhbz#1366989) +- audit: Audit information about shmem devices (rhbz#1218603) +- qemu: monitor: Use a more obvious iterator name (rhbz#1375783) +- qemu: monitor: qemuMonitorGetCPUInfoHotplug: Add iterator 'anycpu' (rhbz#1375783) +- qemu: monitor: Add vcpu state information to monitor data (rhbz#1375783) +- qemu: domain: Don't infer vcpu state (rhbz#1375783) + +* Wed Sep 7 2016 Jiri Denemark - 2.0.0-8 +- util: storage: Properly set protocol type when parsing gluster json string (rhbz#1372251) +- conf: Add IOThread quota and period scheduler/cputune defs (rhbz#1356937) +- qemu: Add support to get/set IOThread period and quota cgroup values (rhbz#1356937) +- network: new network forward mode 'open' (rhbz#846810) +- virtlogd.socket: Tie lifecycle to libvirtd.service (rhbz#1372576) +- cpu_x86: Fix minimum match custom CPUs on hosts with CMT (rhbz#1365500) +- qemu: cgroup: Extract temporary relaxing of cgroup setting for vcpu hotplug (rhbz#1097930) +- qemu: process: Fix start with unpluggable vcpus with NUMA pinning (rhbz#1097930) + +* Wed Sep 7 2016 Jiri Denemark - 2.0.0-7 +- qemu: caps: Always assume QEMU_CAPS_SMP_TOPOLOGY (rhbz#1097930) +- conf: Extract code formatting vCPU info (rhbz#1097930) +- conf: Rename virDomainVcpuInfoPtr to virDomainVcpuDefPtr (rhbz#1097930) +- conf: Don't report errors from virDomainDefGetVcpu (rhbz#1097930) +- tests: qemuxml2xml: Format status XML header dynamically (rhbz#1097930) +- conf: convert def->vcpus to a array of pointers (rhbz#1097930) +- conf: Add private data for virDomainVcpuDef (rhbz#1097930) +- qemu: domain: Add vcpu private data structure (rhbz#1097930) +- qemu: domain: Extract formating and parsing of vCPU thread ids (rhbz#1097930) +- qemu: Add cpu ID to the vCPU pid list in the status XML (rhbz#1097930) +- qemu: Store vCPU thread ids in vcpu private data objects (rhbz#1097930) +- Fix logic in qemuDomainObjPrivateXMLParseVcpu (rhbz#1097930) +- qemu: Add qemuProcessSetupPid() and use it in qemuProcessSetupIOThread() (rhbz#1097930) +- qemu: Use qemuProcessSetupPid() in qemuProcessSetupEmulator() (rhbz#1097930) +- qemu: Use qemuProcessSetupPid() in qemuProcessSetupVcpu() (rhbz#1097930) +- qemuBuildCpuCommandLine: Don't leak @buf (rhbz#1097930) +- conf: Make really sure we don't access non-existing vCPUs (rhbz#1097930) +- conf: Make really sure we don't access non-existing vCPUs again (rhbz#1097930) +- qemu: capabilities: Drop unused function virQEMUCapsGetMachineTypes (rhbz#1097930) +- qemu: caps: Sanitize storage of machine type related data (rhbz#1097930) +- qemu: cap: Refactor access to array in virQEMUCapsProbeQMPMachineTypes (rhbz#1097930) +- qemu: monitor: Add monitor API for device_add supporting JSON objects (rhbz#1097930) +- qemu: monitor: Add do-while block to QEMU_CHECK_MONITOR_FULL (rhbz#1097930) +- qemu: Improve error message in virDomainGetVcpus (rhbz#1097930) +- qemu: domain: Rename qemuDomainDetectVcpuPids to qemuDomainRefreshVcpuInfo (rhbz#1097930) +- qemu: monitor: Rename qemuMonitor(JSON|Text)GetCPUInfo (rhbz#1097930) +- qemu: domain: Improve vCPU data checking in qemuDomainRefreshVcpu (rhbz#1097930) +- qemu: domain: Simplify return values of qemuDomainRefreshVcpuInfo (rhbz#1097930) +- internal: Introduce macro for stealing pointers (rhbz#1097930) +- tests: qemucapabilities: Add data for qemu 2.7.0 (rhbz#1097930) +- qemu: setcpus: Report better errors (rhbz#1097930) +- qemu: setvcpus: Extract setting of maximum vcpu count (rhbz#1097930) +- qemu: driver: Extract setting of live vcpu count (rhbz#1097930) +- qemu: driver: Split out regular vcpu hotplug code into a function (rhbz#1097930) +- conf: Provide error on undefined vcpusched entry (rhbz#1097930) +- qemu: monitor: Return structures from qemuMonitorGetCPUInfo (rhbz#1097930) +- qemu: monitor: Return struct from qemuMonitor(Text|Json)QueryCPUs (rhbz#1097930) +- qemu: Add capability for query-hotpluggable-cpus command (rhbz#1097930) +- qemu: Forbid config when topology based cpu count doesn't match the config (rhbz#1097930) +- qemu: capabilities: Extract availability of new cpu hotplug for machine types (rhbz#1097930) +- qemu: monitor: Extract QOM path from query-cpus reply (rhbz#1097930) +- qemu: monitor: Add support for calling query-hotpluggable-cpus (rhbz#1097930) +- qemu: monitor: Add algorithm for combining query-(hotpluggable-)-cpus data (rhbz#1097930) +- tests: Add test infrastructure for qemuMonitorGetCPUInfo (rhbz#1097930) +- tests: cpu-hotplug: Add data for x86 hotplug with 11+ vcpus (rhbz#1097930) +- tests: cpu-hotplug: Add data for ppc64 platform including hotplug (rhbz#1097930) +- tests: cpu-hotplug: Add data for ppc64 out-of-order hotplug (rhbz#1097930) +- tests: cpu-hotplug: Add data for ppc64 without threads enabled (rhbz#1097930) +- qemu: domain: Extract cpu-hotplug related data (rhbz#1097930) +- qemu: domain: Prepare for VCPUs vanishing while libvirt is not running (rhbz#1097930) +- util: Extract and rename qemuDomainDelCgroupForThread to virCgroupDelThread (rhbz#1097930) +- conf: Add XML for individual vCPU hotplug (rhbz#1097930) +- qemu: migration: Prepare for non-contiguous vcpu configurations (rhbz#1097930) +- qemu: command: Add helper to convert vcpu definition to JSON props (rhbz#1097930) +- qemu: process: Copy final vcpu order information into the vcpu definition (rhbz#1097930) +- qemu: command: Add support for sparse vcpu topologies (rhbz#1097930) +- qemu: Use modern vcpu hotplug approach if possible (rhbz#1097930) +- qemu: hotplug: Allow marking unplugged devices by alias (rhbz#1097930) +- qemu: hotplug: Add support for VCPU unplug (rhbz#1224341) +- virsh: vcpuinfo: Report vcpu number from the structure rather than it's position (rhbz#1097930) +- qemu: driver: Fix qemuDomainHelperGetVcpus for sparse vcpu topologies (rhbz#1097930) +- doc: clarify documentation for vcpu order (rhbz#1097930) +- conf: Don't validate vcpu count in XML parser (rhbz#1097930) +- qemu: driver: Validate configuration when setting maximum vcpu count (rhbz#1370066) +- conf: Fix build with picky GCC (rhbz#1097930) + +* Tue Aug 23 2016 Jiri Denemark - 2.0.0-6 +- qemu_command: don't modify heads for graphics device (rhbz#1366119) +- virsh: Fix core for cmdSecretGetValue (rhbz#1366611) +- conf: report an error message for non-existing USB hubs (rhbz#1367130) +- conf: free the ports array of a USB hub (rhbz#1366097) +- utils: storage: Fix JSON field name for uri based storage (rhbz#1367260) +- qemu: Adjust the cur_ballon on coldplug/unplug of dimms (rhbz#1220702) +- conf: Provide error on undefined iothreadsched entry (rhbz#1366484) +- qemu: Fix the command line generation for rbd auth using aes secrets (rhbz#1182074) +- qemu: Fix crash hot plugging luks volume (rhbz#1367259) +- Revert "admin: Fix the default uri for session daemon to libvirtd:///session" (rhbz#1367269) +- libvirt: convert to typesafe virConf accessors (rhbz#1367269) +- admin: Fix default uri config option name s/admin_uri_default/uri_default (rhbz#1367269) +- virt-admin: Properly fix the default session daemon URI to admin server (rhbz#1367269) + +* Wed Aug 10 2016 Jiri Denemark - 2.0.0-5 +- qemu: Fix domain state after reset (rhbz#1269575) +- rpc: virnetserver: Rename ClientSetProcessingControls to ClientSetLimits (rhbz#1357776) +- rpc: virnetserver: Move virNetServerCheckLimits which is static up in the file (rhbz#1357776) +- rpc: virnetserver: Add code to CheckLimits to handle suspending of services (rhbz#1357776) +- admin: rpc: virnetserver: Fix updating of the client limits (rhbz#1357776) +- rpc: virnetserver: Remove dead code checking the client limits (rhbz#1357776) +- storage: Fix a NULL ptr dereference in virStorageBackendCreateQemuImg (rhbz#1363636) +- qemu: Introduce qemuAliasFromHostdev (rhbz#1289391) +- qemu: Use the hostdev alias in qemuDomainAttachHostSCSIDevice error path (rhbz#1289391) +- storage: Don't remove the pool for buildPool failure in storagePoolCreate (rhbz#1362349) +- lxcDomainCreateXMLWithFiles: Avoid crash (rhbz#1363773) +- admin: Fix the default uri for session daemon to libvirtd:///session (rhbz#1356858) +- docs: Distribute subsite.xsl (rhbz#1365004) +- qemuBuildMachineCommandLine: Follow our pattern (rhbz#1304483) +- Introduce SMM feature (rhbz#1304483) +- Introduce @secure attribute to os loader element (rhbz#1304483) +- qemu: Enable secure boot (rhbz#1304483) +- qemu: Advertise OVMF_CODE.secboot.fd (rhbz#1304483) +- tests: Fix broken build (rhbz#1304483) +- cpu_x86: Introduce x86FeatureIsMigratable (rhbz#1365500) +- cpu_x86: Properly drop non-migratable features (rhbz#1365500) +- tests: Add a test for host-model CPU with CMT feature (rhbz#1365500) +- cpu_x86: Fix host-model CPUs on hosts with CMT (rhbz#1365500) +- virt-admin: Fix the error when an invalid URI has been provided (rhbz#1365903) +- conf: improve error log when PCI devices don't match requested controller (rhbz#1363627) +- conf: don't allow connecting upstream-port directly to pce-expander-bus (rhbz#1361172) +- conf: restrict where dmi-to-pci-bridge can be connected (rhbz#1363648) +- conf: restrict expander buses to connect only to a root bus (rhbz#1358712) +- virNetDevMacVLanCreateWithVPortProfile: Don't mask virNetDevMacVLanTapOpen error (rhbz#1240439) + +* Tue Aug 2 2016 Jiri Denemark - 2.0.0-4 +- qemu: hotplug: fix changeable media ejection (rhbz#1359071) +- lxc: Don't crash by forgetting to ref transient domains (rhbz#1351057) +- Introduce device (rhbz#1235581) +- Add QEMU_CAPS_DEVICE_INTEL_IOMMU (rhbz#1235581) +- qemu: format intel-iommu on the command line (rhbz#1235581) +- qemu_monitor_json: add support to search QOM device path by device alias (rhbz#1358728) +- hvsupport: Introduce parseSymsFile (rhbz#1286679) +- hvsupport: use a regex instead of XML::XPath (rhbz#1286679) +- hvsupport: construct the group regex upfront (rhbz#1286679) +- hvsupport: skip non-matching lines early (rhbz#1286679) +- virconf: Fix config file path construction (rhbz#1357364) +- virDomainHostdevDefFree: Don't leak privateData (rhbz#1357346) +- virt-admin: Output srv-threadpool-info data as unsigned int rather than signed (rhbz#1356769) +- util: Introduce virISCSINodeNew (rhbz#1356436) +- iscsi: Establish connection to target via static target login (rhbz#1356436) +- storage: Document wiping formatted volume types (rhbz#868771) +- admin: Retrieve the SASL context for both local and remote connection (rhbz#1361948) +- daemon: sasl: Don't forget to save SASL username to client's identity (rhbz#1361948) +- vsh: Make vshInitDebug return int instead of void (rhbz#1357363) +- tools: Make use of the correct environment variables (rhbz#1357363) +- util: Add 'usage' for encryption (rhbz#1301021) +- virStorageEncryptionSecretFree: Don't leak secret lookup definition (rhbz#1301021) +- encryption: Add luks parsing for storageencryption (rhbz#1301021) +- encryption: Add and to encryption (rhbz#1301021) +- qemu: Introduce helper qemuDomainSecretDiskCapable (rhbz#1301021) +- tests: Adjust LUKS tests to use 'volume' secret type (rhbz#1301021) +- docs: Update docs to reflect LUKS secret changes (rhbz#1301021) +- qemu: Alter error path cleanup for qemuDomainAttachHostSCSIDevice (rhbz#1301021) +- qemu: Alter error path cleanup for qemuDomainAttachVirtioDiskDevice (rhbz#1301021) +- qemu: Alter error path cleanup for qemuDomainAttachSCSIDisk (rhbz#1301021) +- qemu: Move and rename qemuBufferEscapeComma (rhbz#1301021) +- storage: Add support to create a luks volume (rhbz#1301021) +- qemu: Add secinfo for hotplug virtio disk (rhbz#1301021) +- qemu: Alter the qemuDomainGetSecretAESAlias to add new arg (rhbz#1301021) +- qemu: Add luks support for domain disk (rhbz#1301021) +- qemu: Move setting of obj bools for qemuDomainAttachVirtioDiskDevice (rhbz#1301021) +- qemu: Move setting of encobjAdded for qemuDomainAttachSCSIDisk (rhbz#1301021) +- storage: Fix error path (rhbz#1301021) +- qemu: Disallow usage of luks encryption if aes secret not possible (rhbz#1301021) +- storage: Add extra failure condition for luks volume creation (rhbz#1301021) +- virstoragefile: refactor virStorageFileMatchesNNN methods (rhbz#1301021) +- qemu: Make qemuDomainCheckDiskStartupPolicy self-contained (rhbz#1168453) +- qemu: Remove unnecessary label and its only reference (rhbz#1168453) +- qemu: Fix support for startupPolicy with volume/pool disks (rhbz#1168453) +- virsh: Report error when explicit connection fails (rhbz#1356461) +- tests: Add testing of backing store string parser (rhbz#1134878) +- util: json: Make first argument of virJSONValueObjectForeachKeyValue const (rhbz#1134878) +- util: qemu: Add wrapper for JSON -> commandline conversion (rhbz#1134878) +- util: qemu: Add support for user-passed strings in JSON->commandline (rhbz#1134878) +- util: qemu: Allow nested objects in JSON -> commandline generator (rhbz#1134878) +- util: qemu: Allow for different approaches to format JSON arrays (rhbz#1134878) +- util: qemu: Don't generate any extra commas in virQEMUBuildCommandLineJSON (rhbz#1134878) +- util: json: Make first argument of virJSONValueCopy const (rhbz#1134878) +- util: storage: Add parser for qemu's json backing pseudo-protocol (rhbz#1134878) +- util: storage: Add support for host device backing specified via JSON (rhbz#1134878) +- util: storage: Add support for URI based backing volumes in qemu's JSON pseudo-protocol (rhbz#1134878) +- util: storage: Add json pseudo protocol support for gluster volumes (rhbz#1134878) +- util: storage: Add json pseudo protocol support for iSCSI volumes (rhbz#1134878) +- util: storage: Add JSON backing volume parser for 'nbd' protocol (rhbz#1134878) +- util: storage: Add JSON backing store parser for 'sheepdog' protocol (rhbz#1134878) +- util: storage: Add 'ssh' network storage protocol (rhbz#1134878) +- util: storage: Add JSON backing volume parser for 'ssh' protocol (rhbz#1134878) +- qemu: command: Rename qemuBuildNetworkDriveURI to qemuBuildNetworkDriveStr (rhbz#1247521) +- qemu: command: Split out network disk URI building (rhbz#1247521) +- qemu: command: Extract drive source command line formatter (rhbz#1247521) +- qemu: command: Refactor code extracted to qemuBuildDriveSourceStr (rhbz#1247521) +- storage: gluster: Support multiple hosts in backend functions (rhbz#1247521) +- util: qemu: Add support for numbered array members (rhbz#1247521) +- qemu: command: Add infrastructure for object specified disk sources (rhbz#1247521) +- qemu: command: Add support for multi-host gluster disks (rhbz#1247521) +- qemu: Need to free fileprops in error path (rhbz#1247521) +- storage: remove "luks" storage volume type (rhbz#1301021) + +* Fri Jul 22 2016 Jiri Denemark - 2.0.0-3 +- qemu: getAutoDumpPath() return value should be dumpfile not domname. (rhbz#1354238) +- qemu: Copy complete domain def in qemuDomainDefFormatBuf (rhbz#1320470) +- qemu: Drop default channel path during migration (rhbz#1320470) +- qemu: Fix migration from old libvirt (rhbz#1320500) +- Add USB addresses to qemuhotplug test cases (rhbz#1215968) +- Introduce virDomainUSBDeviceDefForeach (rhbz#1215968) +- Allow omitting USB port (rhbz#1215968) +- Store USB port path as an array of integers (rhbz#1215968) +- Introduce virDomainUSBAddressSet (rhbz#1215968) +- Add functions for adding USB controllers to addrs (rhbz#1215968) +- Add functions for adding USB hubs to addrs (rhbz#1215968) +- Reserve existing USB addresses (rhbz#1215968) +- Add tests for USB address assignment (rhbz#1215968) +- Assign addresses to USB devices (rhbz#1215968) +- Assign addresses on USB device hotplug (rhbz#1215968) +- Auto-add one hub if there are too many USB devices (rhbz#1215968) + +* Sat Jul 9 2016 Jiri Denemark - 2.0.0-2 +- qemu: Use bootindex whenever possible (rhbz#1323085) +- qemu: Properly reset spiceMigration flag (rhbz#1151723) +- qemu: Drop useless SPICE migration code (rhbz#1151723) +- qemu: Memory locking is only required for KVM guests on ppc64 (rhbz#1350772) +- virtlogd: make max file size & number of backups configurable (rhbz#1351209) +- virtlogd: increase max file size to 2 MB (rhbz#1351209) + +* Fri Jul 1 2016 Jiri Denemark - 2.0.0-1 +- Rebased to libvirt-2.0.0 (rhbz#1286679) +- The rebase also fixes the following bugs: + rhbz#735385, rhbz#1004602, rhbz#1046833, rhbz#1180092, rhbz#1216281 + rhbz#1283207, rhbz#1286679, rhbz#1289288, rhbz#1302373, rhbz#1304222 + rhbz#1312188, rhbz#1316370, rhbz#1320893, rhbz#1322210, rhbz#1325072 + rhbz#1325080, rhbz#1332446, rhbz#1333248, rhbz#1333404, rhbz#1334237 + rhbz#1335617, rhbz#1335832, rhbz#1337869, rhbz#1341415, rhbz#1342342 + rhbz#1342874, rhbz#1342962, rhbz#1343442, rhbz#1344892, rhbz#1344897 + rhbz#1345743, rhbz#1346723, rhbz#1346724, rhbz#1346730, rhbz#1350688 + rhbz#1351473 + +* Tue Jun 7 2016 Jiri Denemark - 1.3.5-1 +- Rebased to libvirt-1.3.5 (rhbz#1286679) +- The rebase also fixes the following bugs: + rhbz#1139766, rhbz#1182074, rhbz#1209802, rhbz#1265694, rhbz#1286679 + rhbz#1286709, rhbz#1318993, rhbz#1319044, rhbz#1320836, rhbz#1326660 + rhbz#1327537, rhbz#1328003, rhbz#1328301, rhbz#1329045, rhbz#1336629 + rhbz#1337073, rhbz#1339900, rhbz#1341460 + +* Tue May 3 2016 Jiri Denemark - 1.3.4-1 +- Rebased to libvirt-1.3.4 (rhbz#1286679) +- The rebase also fixes the following bugs: + rhbz#1002423, rhbz#1004593, rhbz#1038888, rhbz#1103314, rhbz#1220702 + rhbz#1286679, rhbz#1289363, rhbz#1320447, rhbz#1324551, rhbz#1325043 + rhbz#1325075, rhbz#1325757, rhbz#1326270, rhbz#1327499, rhbz#1328401 + rhbz#1329041, rhbz#1329046, rhbz#1329819, rhbz#1331228 + +* Thu Apr 14 2016 Jiri Denemark - 1.3.3-2 +- qemu: perf: Fix crash/memory corruption on failed VM start (rhbz#1324757) + +* Wed Apr 6 2016 Jiri Denemark - 1.3.3-1 +- Rebased to libvirt-1.3.3 (rhbz#1286679) +- The rebase also fixes the following bugs: + rhbz#830971, rhbz#986365, rhbz#1151723, rhbz#1195176, rhbz#1249441 + rhbz#1260749, rhbz#1264008, rhbz#1269715, rhbz#1278727, rhbz#1281706 + rhbz#1282744, rhbz#1286679, rhbz#1288000, rhbz#1289363, rhbz#1293804 + rhbz#1306556, rhbz#1308317, rhbz#1313264, rhbz#1313314, rhbz#1314594 + rhbz#1315059, rhbz#1316371, rhbz#1316384, rhbz#1316420, rhbz#1316433 + rhbz#1316465, rhbz#1317531, rhbz#1318569, rhbz#1321546 + +* Tue Mar 1 2016 Jiri Denemark - 1.3.2-1 +- Rebased to libvirt-1.3.2 (rhbz#1286679) +- The rebase also fixes the following bugs: + rhbz#1197592, rhbz#1235180, rhbz#1244128, rhbz#1244567, rhbz#1245013 + rhbz#1250331, rhbz#1265694, rhbz#1267256, rhbz#1275039, rhbz#1282846 + rhbz#1283085, rhbz#1286679, rhbz#1290324, rhbz#1293241, rhbz#1293899 + rhbz#1299696, rhbz#1305922 + +* Mon Feb 22 2016 Jiri Denemark - 1.3.1-1 +- Rebased to libvirt-1.3.1 (rhbz#1286679) +- The rebase also fixes the following bugs: + rhbz#1207692, rhbz#1233115, rhbz#1245476, rhbz#1298065, rhbz#1026136 + rhbz#1207751, rhbz#1210587, rhbz#1250287, rhbz#1253107, rhbz#1254152 + rhbz#1257486, rhbz#1266078, rhbz#1271107, rhbz#1159219, rhbz#1163091 + rhbz#1196711, rhbz#1263574, rhbz#1270427, rhbz#1245525, rhbz#1247987 + rhbz#1248277, rhbz#1249981, rhbz#1251461, rhbz#1256999, rhbz#1264008 + rhbz#1265049, rhbz#1265114, rhbz#1270715, rhbz#1272301, rhbz#1273686 + rhbz#997561, rhbz#1166452, rhbz#1231114, rhbz#1233003, rhbz#1260576 + rhbz#1261432, rhbz#1273480, rhbz#1273491, rhbz#1277781, rhbz#1278404 + rhbz#1281707, rhbz#1282288, rhbz#1285665, rhbz#1288690, rhbz#1292984 + rhbz#921135, rhbz#1025230, rhbz#1240439, rhbz#1266982, rhbz#1270709 + rhbz#1276198, rhbz#1278068, rhbz#1278421, rhbz#1281710, rhbz#1291035 + rhbz#1297020, rhbz#1297690 +- RHEL: Add rhel machine types to qemuDomainMachineNeedsFDC (rhbz#1227880) +- RHEL: qemu: Support vhost-user-multiqueue with QEMU 2.3 (rhbz#1207692) * Thu Oct 8 2015 Jiri Denemark - 1.2.17-13 - qemu: Add conditions for qemu-kvm use on ppc64 (rhbz#1267882)