Accepting request 699777 from home:markkp:branches:hardware

- 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
 
- Added qclib-sles15-fix-mismatch-case-with-STHYI.patch
  (bsc#1071687, bsc#1104304).

OBS-URL: https://build.opensuse.org/request/show/699777
OBS-URL: https://build.opensuse.org/package/show/hardware/qclib?expand=0&rev=15
This commit is contained in:
Mark Post 2019-04-30 21:40:06 +00:00 committed by Git OBS Bridge
parent 9987af121b
commit c687f28dfd
7 changed files with 58 additions and 170 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4b5ef6e9ddccb13fc6f9d94fdcf098a75987ff6744c93fe5cf8d2eb7930f86ac
size 74070

3
qclib-1.4.1.tgz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4bbce5648cc26ac6469fd60ef477204d0352e187773164d5e77f1296a0bdb500
size 77198

View File

@ -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")

View File

@ -1,147 +0,0 @@
commit 13d7aafb0cb8946880abbb73725b0340bec1cd3a
Author: Stefan Raspl <stefan.raspl@de.ibm.com>
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);
}
}

View File

@ -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 <mpost@suse.com>
- 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:

View File

@ -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"

View File

@ -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