diff --git a/qclib-1.3.0.tgz b/qclib-1.3.0.tgz deleted file mode 100644 index f882ee0..0000000 --- a/qclib-1.3.0.tgz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b5ef6e9ddccb13fc6f9d94fdcf098a75987ff6744c93fe5cf8d2eb7930f86ac -size 74070 diff --git a/qclib-1.4.1.tgz b/qclib-1.4.1.tgz new file mode 100644 index 0000000..bfb1bfb --- /dev/null +++ b/qclib-1.4.1.tgz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bbce5648cc26ac6469fd60ef477204d0352e187773164d5e77f1296a0bdb500 +size 77198 diff --git a/qclib-rpmlintrc b/qclib-rpmlintrc index b279db6..bb61853 100644 --- a/qclib-rpmlintrc +++ b/qclib-rpmlintrc @@ -2,5 +2,5 @@ addFilter("qclib.* no-binary") addFilter("libqclib1.* shlib-policy-missing-lib") addFilter("file-contains-date-and-time /usr/share/doc/packages/qclib/*") addFilter("files-duplicate /usr/share/doc/packages/qclib/html/ftv2*") -addFilter("files-duplicate /usr/share/doc/packages/qclib/html/search/all_[12].js") -addFilter("files-duplicate /usr/share/doc/packages/qclib/html/search/classes_[04].js") +addFilter("files-duplicate /usr/share/doc/packages/qclib/html/search/all_[0-4].js") +addFilter("files-duplicate /usr/share/doc/packages/qclib/html/search/classes_[0-4].js") diff --git a/qclib-sles15-fix-mismatch-case-with-STHYI.patch b/qclib-sles15-fix-mismatch-case-with-STHYI.patch deleted file mode 100644 index 9cf019d..0000000 --- a/qclib-sles15-fix-mismatch-case-with-STHYI.patch +++ /dev/null @@ -1,147 +0,0 @@ -commit 13d7aafb0cb8946880abbb73725b0340bec1cd3a -Author: Stefan Raspl -Date: Fri Dec 8 22:11:29 2017 +0100 - - STHYI: Fix mismatch case with STHYI and /proc/sysinfo data - - Reported via Bz162324. Symptom was that qclib wouldn't work on a z/VM 5.4. - Analysis revealed that although the STHYI instruction wasn't available, the - newly added STHYI syscall would work, but (as intended) reported only layers - up to LPAR. In contrast, /proc/sysinfo would report all layers, including the - z/VM layer. Some detection logic kicked in and reported an error. - The problem was rooted in a bizarr combination of multiple glitches: - * An (unnecessary) extra handling for z/VM that was previously added would - raise an error on mismatching layer counts in STHYI and /proc/sysinfo. This - was to detect cases with more than 3 levels of nested virtualization. But the - check just was for mismatching counts and didn't check for the 3 layers - reported by STHYI at all. - * Furthermore, the check mentioned above was unnecessary to begin with: When - STHYI reports data for 3 VM layers, and /proc/sysinfo for more, then the - extra layers will simply not get any data from STHYI - no harm done. - * STHYI in KVM worked like a charm ever since, though it is supposed to fail - with the same error as z/VM since STHYI in KVM (and likewise the syscall in - LPARs) cannot report data beyond the LPAR layer - it should result in the - same mismatch that z/VM experienced. However, the respective routines would - only ever consider VM layers in z/VM and ignore the ones in KVM! Hence all - layers beyond LPAR wouldn't be accounted for on KVM! - To fix, we're ripping out the extra check, and rewrite the remaining code to - handle z/VM and KVM alike. - Furthermore, we rename "STHYI@VM" to "STHYI instruction", and "STHYI@LPAR" to - "STHYI syscall" for improved clarity. - -diff --git a/query_capacity_sthyi.c b/query_capacity_sthyi.c -index b3bd9e8..688062f 100644 ---- a/query_capacity_sthyi.c -+++ b/query_capacity_sthyi.c -@@ -91,16 +91,16 @@ static int qc_sthyi_lpar(struct qc_handle *hdl, struct sthyi_priv *priv) { - #ifdef __NR_s390_sthyi - sthyi = __NR_s390_sthyi - #endif -- qc_debug(hdl, "Try STHYI@LPAR\n"); -+ qc_debug(hdl, "Try STHYI syscall\n"); - if (syscall(sthyi, 0, priv->data, &cc, 0) || cc) { - if (errno == ENOSYS) { -- qc_debug(hdl, "STHYI@LPAR is not available\n"); -+ qc_debug(hdl, "STHYI syscall is not available\n"); - return 0; - } -- qc_debug(hdl, "Error: STHYI@LPAR execution failed: errno='%s', cc=%" PRIu64 "\n", strerror(errno), cc); -+ qc_debug(hdl, "Error: STHYI syscall execution failed: errno='%s', cc=%" PRIu64 "\n", strerror(errno), cc); - return -1; - } -- qc_debug(hdl, "STHYI@LPAR succeeded\n"); -+ qc_debug(hdl, "STHYI syscall succeeded\n"); - priv->avail = STHYI_AVAILABLE; - #endif - -@@ -281,25 +281,15 @@ static int qc_parse_sthyi_guest(struct qc_handle *gst, struct inf0gst *guest) { - return 0; - } - --static int qc_get_num_vm_layers(struct qc_handle *hdl, int *rc) { -- int i; -- -- for (hdl = hdl->root, i = 0; hdl != NULL; hdl = hdl->next) { -- if (*(int *)(hdl->layer) == QC_LAYER_TYPE_ZVM_HYPERVISOR) -- i++; -- } -- -- return i; --} -- - /* Returns pointer to the n-th hypervisor handle. num starts at 0, and handles - are returned in sequence from handle linked list */ - static struct qc_handle *qc_get_HV_layer(struct qc_handle *hdl, int num) { - struct qc_handle *h = hdl; -- int i; -+ int i, type; - - for (hdl = hdl->root, i = 0, num++; hdl != NULL; hdl = hdl->next) { -- if (*(int *)(hdl->layer) == QC_LAYER_TYPE_ZVM_HYPERVISOR && ++i == num) -+ type = *(int *)(hdl->layer); -+ if ((type == QC_LAYER_TYPE_ZVM_HYPERVISOR || type == QC_LAYER_TYPE_KVM_HYPERVISOR) && ++i == num) - return hdl; - } - qc_debug(h, "Error: Couldn't find HV layer %d, only %d layer(s) found\n", num, i); -@@ -309,7 +299,7 @@ static struct qc_handle *qc_get_HV_layer(struct qc_handle *hdl, int num) { - - static int qc_sthyi_process(struct qc_handle *hdl, char *buf) { - struct sthyi_priv *priv = (struct sthyi_priv *)buf; -- int no_hyp_gst, num_vm_layers, i, rc = 0; -+ int no_hyp_gst, i, rc = 0; - struct inf0gst *guest[INF0YGMX]; - struct inf0hyp *hv[INF0YGMX]; - struct inf0par *partition; -@@ -371,30 +361,14 @@ static int qc_sthyi_process(struct qc_handle *hdl, char *buf) { - goto out; - } - -- num_vm_layers = qc_get_num_vm_layers(hdl, &rc); -- if (rc != 0) { -- rc = -2; -- goto out; -- } -- -- if (num_vm_layers != no_hyp_gst) { -- /* STHYI doesn't support more than 3rd level z/VM */ -- qc_debug(hdl, "Error: /proc/sysinfo reported %d layers, but STHYI only " -- "covers %d\n", num_vm_layers, no_hyp_gst); -- rc = -6; -- goto out; -- } -- - for (i = 0; i < no_hyp_gst; i++) { - if ((hdl = qc_get_HV_layer(hdl, i)) == NULL) { - rc = -7; - goto out; - } -- if (*(int *)(hdl->layer) == QC_LAYER_TYPE_ZVM_HYPERVISOR) { -- if (qc_parse_sthyi_hypervisor(hdl, hv[i]) || qc_parse_sthyi_guest(hdl->next, guest[i])) { -- rc = -9; -- goto out; -- } -+ if (qc_parse_sthyi_hypervisor(hdl, hv[i]) || qc_parse_sthyi_guest(hdl->next, guest[i])) { -+ rc = -9; -+ goto out; - } - } - out: -@@ -508,15 +482,15 @@ static int qc_sthyi_open(struct qc_handle *hdl, char **buf) { - /* There is no way for us to check programmatically whether - we're in an LPAR or in a VM, so we simply try out both */ - if (qc_is_sthyi_available_vm(hdl)) { -- qc_debug(hdl, "Executing STHYI@VM\n"); -+ qc_debug(hdl, "Executing STHYI instruction\n"); - /* we assume we are not relocated at this spot, between STFLE and STHYI */ - if (qc_sthyi_vm(priv)) { -- qc_debug(hdl, "Error: STHYI@VM execution failed\n"); -+ qc_debug(hdl, "Error: STHYI instruction execution failed\n"); - rc = -3; - goto out; - } - } else { -- qc_debug(hdl, "STHYI@VM is not available\n"); -+ qc_debug(hdl, "STHYI instruction is not available\n"); - rc = qc_sthyi_lpar(hdl, priv); - } - } diff --git a/qclib.changes b/qclib.changes index 2b37ba8..778660b 100644 --- a/qclib.changes +++ b/qclib.changes @@ -1,20 +1,58 @@ ------------------------------------------------------------------- -Fri Dec 8 22:07:04 UTC 2017 - mpost@suse.com +Mon Apr 22 19:57:20 UTC 2019 - Mark Post -- Added qclib-sles15-fix-mismatch-case-with-STHYI.patch (bsc#1071687). +- Upgraded to version 1.4.1 (jsc#SLE-5908) + Version 1.4.1 + Bug fixes: + * qc_dump: Don't abort the dump in case qc_test fails. + * Attributes qc_cp_weight_capping and qc_ifl_weight_capping were set even + when initial capping was not set in the LPAR's activation profile. + Version 1.4.0 + Changes: + * Added SMT support by properly differentiating between cores and CPUs. + * Added new attributes qc_num_threads_cp and qc_num_threads_ifl to layers + CEC, LPAR and ZVM_HYPERVISOR. + * Deprecated attribute qc_mobility_eligible (remains valid for now) and + replaced with qc_mobility_enabled to match z/VM terminology. Likewise + switched QC_LAYER_TYPE_ZVM_CPU_POOL to QC_LAYER_TYPE_ZVM_RESOURCE_POOL. + * Moved build customization defines (e.g. CONFIG_V1_COMPATIBILITY) to + query_capacity.h. + * Don't build with textual hypfs per default anymore due to unrecoverable + issues (see section 'Bug fixes'). + Bug fixes: + * Added an exception to consistency check to ignore inconsistencies between + textual hypfs and STHYI for attributes qc_num_cp_total and + qc_num_ifl_total in the LPAR layer. + Version 1.3.1 + Bug fixes: + * Security: Fix PATH attack vulnerability when dumping (see QC_DEBUG=2) + * STHYI: Add fallback for pre-glibc 2.16 (not using getauxval()) + * Handle mismatching STHYI and /proc/sysinfo layer counts + * On LPAR, fix incomplete dump of binary hypfs when textual hypfs is mounted +- Dropped obsolete qclib-sles15-fix-mismatch-case-with-STHYI.patch. +- Updated qclib.makefile.libdir.patch to apply cleanly to the new version. +- Made numerous changes to the spec file based on the output from + spec-cleaner. +- Updated qclib-rpmlintrc file to catch all duplicate file messages + +------------------------------------------------------------------- +Thu Aug 9 23:14:55 UTC 2018 - mpost@suse.com + +- Added qclib-sles15-fix-mismatch-case-with-STHYI.patch + (bsc#1071687, bsc#1104304). ------------------------------------------------------------------- -Thu Nov 2 20:03:27 UTC 2017 - mpost@suse.com +Wed Aug 1 23:15:13 UTC 2018 - mpost@suse.com -- Upgraded to version 1.3.0 +- Upgraded to version 1.3.0 (Fate#325039) Changes: * Added STHYI support in LPAR * Added new env variable QC_DEBUG_FILE (see qc_open()) - Note: Failure to open a file for logging is now treated as a fatal error + Note: Failure to open a file for logging is now treated as a fatal error * Added script qc_dump to collect debug data in a standardized manner * Added attributes qc_layer_uuid and qc_layer_extended_name to LPAR layer * /proc/sysinfo parsing: Switch from "KVM/Linux" to the less strict "KVM" - to detect KVM systems + to detect KVM systems * Detect unregistered and closed handles * Makefile: Compile SONAME into shared library Bug fixes: diff --git a/qclib.makefile.libdir.patch b/qclib.makefile.libdir.patch index 34a1d77..8ebd446 100644 --- a/qclib.makefile.libdir.patch +++ b/qclib.makefile.libdir.patch @@ -1,6 +1,6 @@ --- qclib-1.0.0/Makefile 2015-10-26 07:46:09.000000000 +0100 +++ qclib-1.0.0/Makefile 2015-10-26 07:50:21.000000000 +0100 -@@ -61,10 +61,10 @@ +@@ -64,10 +64,10 @@ install: libqc.a libqc.so.$(VERSION) echo " INSTALL" diff --git a/qclib.spec b/qclib.spec index 4a4e177..cba9992 100644 --- a/qclib.spec +++ b/qclib.spec @@ -1,7 +1,7 @@ # # spec file for package qclib # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017, 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,24 +12,22 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: qclib -Version: 1.3.0 +Version: 1.4.1 Release: 0 Summary: Query Capacity library License: BSD-3-Clause Group: Development/Libraries/C and C++ -Url: http://www.ibm.com/developerworks/linux/linux390/qclib.html +URL: http://www.ibm.com/developerworks/linux/linux390/qclib.html Source: %{name}-%{version}.tgz Source1: %{name}-rpmlintrc Patch1: qclib.makefile.libdir.patch -Patch2: qclib-sles15-fix-mismatch-case-with-STHYI.patch BuildRequires: doxygen BuildRequires: gcc-c++ -BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: s390 s390x %if 0%{?suse_version} > 1300 BuildRequires: glibc-devel-static @@ -97,16 +95,15 @@ Systems. %prep %setup -q %patch1 -p1 -%patch2 -p1 %build MYCFLAGS=$(grep ^CFLAGS Makefile | cut -f2 -d=) -make all CFLAGS="${MYCFLAGS} %{optflags}" -make doc +make %{?_smp_mflags} all CFLAGS="${MYCFLAGS} %{optflags}" +make %{?_smp_mflags} doc %check -make test -make test-sh +make %{?_smp_mflags} test +make %{?_smp_mflags} test-sh %install %make_install LIBDIR=%{_lib} V=1