From cd52b56351873c7dee05e8775f14f15169234181310c024d5649c68b86da3dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Fri, 31 May 2024 15:47:14 +0200 Subject: [PATCH] Sync from SUSE:SLFO:Main powerpc-utils revision 69137ccc744bd2d679584c42e050d71d --- ...-multiple-dev-paths-for-a-nvme-boot-.patch | 169 ------------------ ...ative-values-seen-while-running-lpar.patch | 90 ---------- ...ffline-threads-uninitialized-entries.patch | 50 ------ lparstat-report-mixed-SMT-state.patch | 98 ---------- ...page-and-help-output-are-not-in-sync.patch | 52 ------ ...x-Segmentation-fault-issue-in-nvram-.patch | 56 ------ ...x-segmentation-fault-issue-in-print-.patch | 52 ------ powerpc-utils-1.3.11.tar.gz | 3 - powerpc-utils-1.3.12.tar.gz | 3 + ...ripts-ofpathname-handle-nsid-of-nvme.patch | 41 ----- powerpc-utils.changes | 37 ++++ powerpc-utils.spec | 28 +-- ...-up-sysfs-smt-control-error-handling.patch | 65 +++++++ ...ix-bad-report-when-non-continuous-CP.patch | 156 ---------------- ...he-large-negative-values-in-rtas_dbg.patch | 75 -------- 15 files changed, 113 insertions(+), 862 deletions(-) delete mode 100644 bootlist-Support-multiple-dev-paths-for-a-nvme-boot-.patch delete mode 100644 lparstat-Fix-negative-values-seen-while-running-lpar.patch delete mode 100644 lparstat-Fix-offline-threads-uninitialized-entries.patch delete mode 100644 lparstat-report-mixed-SMT-state.patch delete mode 100644 nvram-man-page-and-help-output-are-not-in-sync.patch delete mode 100644 powerpc-nvram-Fix-Segmentation-fault-issue-in-nvram-.patch delete mode 100644 powerpc-nvram-fix-segmentation-fault-issue-in-print-.patch delete mode 100644 powerpc-utils-1.3.11.tar.gz create mode 100644 powerpc-utils-1.3.12.tar.gz delete mode 100644 powerpc-utils-scripts-ofpathname-handle-nsid-of-nvme.patch create mode 100644 ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch delete mode 100644 ppc64_cpu-info-fix-bad-report-when-non-continuous-CP.patch delete mode 100644 rtas_dbg-Fix-the-large-negative-values-in-rtas_dbg.patch diff --git a/bootlist-Support-multiple-dev-paths-for-a-nvme-boot-.patch b/bootlist-Support-multiple-dev-paths-for-a-nvme-boot-.patch deleted file mode 100644 index 990b45d..0000000 --- a/bootlist-Support-multiple-dev-paths-for-a-nvme-boot-.patch +++ /dev/null @@ -1,169 +0,0 @@ -From 882335a30d04032d2684e165f70646b368a788b4 Mon Sep 17 00:00:00 2001 -From: Wen Xiong -Date: Tue, 30 Jan 2024 10:49:13 -0600 -Subject: [PATCH] bootlist: Support multiple dev paths for a nvme boot device - -Multipath splitter drawer is going to support two physical paths for -each nvme device. -This patch adds the support for multiple device/of paths for a nvme boot -device. - -For example, -#lsslot -c pci -U50EE.001.WZS000E-P3-C1-R1 U.2 PCI-E capable, Rev 4, 4x lanes with 2x -lanes connected 0581:10:00.0 -U50EE.001.WZS000E-P3-C1-R2 U.2 PCI-E capable, Rev 4, 4x lanes with 2x -lanes connected 0521:10:00.0 - -#nvme list-subsys -nvme-subsys1 - -NQN=nqn.1994-11.com.samsung:nvme:PM1735a:2.5-inch:S6RUNE0R900042 - hostnqn=nqn.2014-08.org.nvmexpress:uuid:3c6c1ace-e9b1-4a17-8ff0-6a84d3dd15f4 - iopolicy=numa -\ - +- nvme1 pcie 0523:20:00.0 live - +- nvme0 pcie 0583:20:00.0 live - -# bootlist -m normal nvme1n1 -# bootlist -m normal -o -nvme0 -nvme1n1 -#bootlist -m normal -r -/pci@800000020000583/pci1014,6bc@0/namespace@1 -/pci@800000020000523/pci1014,6bc@0/namespace@1 - -Signed-off-by: Wen Xiong -[tyreld: fixup whitespace errors] -Signed-off-by: Tyrel Datwyler ---- - scripts/bootlist | 80 +++++++++++++++++++++++++++++++++++++++--------- - 1 file changed, 66 insertions(+), 14 deletions(-) - -diff --git a/scripts/bootlist b/scripts/bootlist -index cc8718e..58c090f 100755 ---- a/scripts/bootlist -+++ b/scripts/bootlist -@@ -304,6 +304,21 @@ is_nvmf_device() - fi - } - -+# is_multipath_nvme_device -+# Check to see if this is a multipath nvme device -+# -+is_multipath_nvme_device() -+{ -+ local res -+ -+ res=`$FIND /sys/devices/virtual/nvme-subsystem -name $1 2>/dev/null` -+ if [[ ${#res} = 0 ]]; then -+ echo "no" -+ else -+ echo "yes" -+ fi -+} -+ - # get_link - # return the directory path that a link points to. - # The only parameter is the link name. -@@ -340,6 +355,32 @@ add_nvmf() - fi - } - -+add_multipath_nvme() -+{ -+ local DEVNAME=$1 -+ -+ ctrl_name=$DEVNAME -+ local startctr=$ctr -+ -+ local dir -+ for dir in `$FIND /sys/devices/virtual/nvme-subsystem -name "$ctrl_name"`; do -+ cd $dir -+ cd .. -+ for slave in `ls -d $PWD/nvme*`; do -+ slavedev=${slave##*/} -+ if [[ "$slavedev" != *nvme*n* ]] ; then -+ LOGICAL_NAMES[$ctr]=${slavedev} -+ ctr=$[$ctr + 1] -+ fi -+ done -+ done -+ -+ if [[ "$startctr" = "$ctr" ]] ; then -+ LOGICAL_NAMES[$ctr]=$1 -+ ctr=$[$ctr + 1] -+ fi -+} -+ - add_logical() - { - local DEVNAME=$1 -@@ -487,31 +528,40 @@ while [[ -n $1 ]]; do - if [[ "$1" == *"dm-"* ]] ; then - add_logical $1 - else -- if [[ "$1" == *"nvme-of"* ]]; then -+ if [[ "$1" == *"nvme-of"* ]] || [[ "$1" == *"namespace"* ]]; then - ctrl_name=`get_logical_device_name $1` -+ master_of_path=$1 - else - ctrl_name=$1 - ctrl_name=${ctrl_name##*/} -+ master_of_path=`get_of_device_name $1` - fi -+ -+ if [[ -z $master_of_path ]]; then -+ echo "Device $1 does not appear to be valid." >&2 -+ exit 1 -+ fi -+ - ctrl_name="${ctrl_name%n[0-9]*}" - is_nvmf=$(is_nvmf_device $ctrl_name) - if [[ $is_nvmf = "yes" ]]; then -- if [[ "$1" == *"nvme-of"* ]]; then -- master_of_path=$1 -- else -- master_of_path=`get_of_device_name $1` -- fi -- -- if [[ -z $master_of_path ]]; then -- echo "Device $1 does not appear to be valid." >&2 -- exit 1 -- fi -- - namespace_base=${master_of_path##*/} - DEVTYPE="nvme-of" - add_nvmf $ctrl_name - else -- add_logical $1 -+ is_multipath_nvme=$(is_multipath_nvme_device $ctrl_name) -+ if [[ $is_multipath_nvme = "yes" ]]; then -+ if [[ "$master_of_path" == *namespace* ]] ; then -+ namespace_base=${master_of_path##*/} -+ else -+ echo "Device $1 does not appear to be valid." >&2 -+ exit 1 -+ fi -+ DEVTYPE="multi-nvme" -+ add_multipath_nvme $ctrl_name -+ else -+ add_logical $1 -+ fi - fi - fi - fi -@@ -534,8 +584,10 @@ if [[ ${#LOGICAL_NAMES[*]} -ne 0 ]]; then - if [[ -z ${OF_DEVPATH[$ctr]} ]]; then - # See if this is an OF pathname - OF_DEVPATH[$ctr]=`get_of_device_name ${LOGICAL_NAMES[$ctr]}` -- if [[ $DEVTYPE = "nvme-of" ]]; then -+ if [[ $DEVTYPE = "nvme-of" ]] || [[ $DEVTYPE = "multi-nvme" ]]; then - OF_DEVPATH[$ctr]=${OF_DEVPATH[$ctr]}/$namespace_base -+ else -+ OF_DEVPATH[$ctr]=${OF_DEVPATH[$ctr]} - fi - else - OF_DEVPATH[$ctr]=${LOGICAL_NAMES[$ctr]} --- -2.43.0 - diff --git a/lparstat-Fix-negative-values-seen-while-running-lpar.patch b/lparstat-Fix-negative-values-seen-while-running-lpar.patch deleted file mode 100644 index 25af3c8..0000000 --- a/lparstat-Fix-negative-values-seen-while-running-lpar.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 73ba26c1240a25e7699449e82cfc09dad10fed80 Mon Sep 17 00:00:00 2001 -From: Sathvika Vasireddy -Date: Fri, 9 Dec 2022 15:26:46 +0530 -Subject: [PATCH 1/3] lparstat: Fix negative values seen while running lparstat - with -E option - -Negative values are seen while running lparstat with -E option. -This is because delta_purr value is less than delta_idle_purr. -Given that these values are read from different sources, a -small variation in the values is possible. So, in such cases, -round down delta_idle_purr to delta_purr. - -Without this patch: -===== -System Configuration -type=Dedicated mode=Capped smt=8 lcpu=240 mem=67033290112 kB cpus=0 -ent=240.00 - ----Actual--- -Normalized- -%busy %idle Frequency %busy %idle ------- ------ ------------- ------ ------ - -0.03 100.02 3.93GHz[111%] 0.01 110.97 - 0.00 100.00 3.93GHz[111%] 0.01 110.99 - -0.04 100.03 3.93GHz[111%] 0.01 110.98 - 0.06 99.95 3.93GHz[111%] 0.01 110.99 - 0.02 99.98 3.93GHz[111%] 0.01 110.99 -===== - -With this patch: -===== -System Configuration -type=Dedicated mode=Capped smt=8 lcpu=240 mem=67033290112 kB cpus=0 -ent=240.00 - ----Actual--- -Normalized- -%busy %idle Frequency %busy %idle ------- ------ ------------- ------ ------ - 0.03 99.96 3.93GHz[111%] 0.01 110.98 - 0.00 100.00 3.93GHz[111%] 0.01 110.99 - 0.03 99.97 3.93GHz[111%] 0.01 110.99 - 0.00 100.00 3.93GHz[111%] 0.01 110.99 - 0.09 99.90 3.93GHz[111%] 0.01 110.99 -===== - -Reported-by: Shirisha Ganta -Signed-off-by: Sathvika Vasireddy -Signed-off-by: Tyrel Datwyler ---- - src/lparstat.c | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/src/lparstat.c b/src/lparstat.c -index 31a4ee8..eebba1f 100644 ---- a/src/lparstat.c -+++ b/src/lparstat.c -@@ -492,6 +492,15 @@ void get_cpu_util_purr(struct sysentry *unused_se, char *buf) - delta_purr = get_delta_value("purr"); - delta_idle_purr = get_delta_value("idle_purr"); - -+ /* -+ * Given that these values are read from different -+ * sources (purr from lparcfg and idle_purr from sysfs), -+ * a small variation in the values is possible. -+ * In such cases, round down delta_idle_purr to delta_purr. -+ */ -+ if (delta_idle_purr > delta_purr) -+ delta_idle_purr = delta_purr; -+ - physc = (delta_purr - delta_idle_purr) / delta_tb; - physc *= 100.00; - -@@ -507,6 +516,15 @@ void get_cpu_idle_purr(struct sysentry *unused_se, char *buf) - delta_purr = get_delta_value("purr"); - delta_idle_purr = get_delta_value("idle_purr"); - -+ /* -+ * Given that these values are read from different -+ * sources (purr from lparcfg and idle_purr from sysfs), -+ * a small variation in the values is possible. -+ * In such cases, round down delta_idle_purr to delta_purr. -+ */ -+ if (delta_idle_purr > delta_purr) -+ delta_idle_purr = delta_purr; -+ - physc = (delta_purr - delta_idle_purr) / delta_tb; - idle = (delta_purr / delta_tb) - physc; - idle *= 100.00; --- -2.40.1 - diff --git a/lparstat-Fix-offline-threads-uninitialized-entries.patch b/lparstat-Fix-offline-threads-uninitialized-entries.patch deleted file mode 100644 index afc4e53..0000000 --- a/lparstat-Fix-offline-threads-uninitialized-entries.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 7a5625f2bc012fbbf0cd8384cb4e7761c5de3bb7 Mon Sep 17 00:00:00 2001 -From: Laurent Dufour -Date: Tue, 2 May 2023 19:59:27 +0200 -Subject: [PATCH 3/3] lparstat: Fix offline threads uninitialized entries - -When some threads are offline, lparstat -E is failing like that: - -$ ppc64_cpu --info # CPU 20 is offline -Core 0: 0* 1* 2* 3* 4* 5* 6* 7* -Core 1: 8* 9* 10* 11* 12* 13* 14* 15* -Core 2: 16* 17* 18* 19* 20 21* 22* 23* -Core 3: 24* 25* 26* 27* 28* 29* 30* 31* -Core 4: 32* 33* 34* 35* 36* 37* 38* 39* -Core 5: 40* 41* 42* 43* 44* 45* 46* 47* -$ lparstat -E -Failed to read /sys/devices/system/cpu/cpu0/spurr - -The message is complaining about CPU0 but the real issue is that in -parse_sysfs_values() the test cpu_sysfs_fds[i].spurr >= 0 is valid even if -the entry has not been initialized (cpu_sysfs_fds is alloc cleared). So -if the number of threads online seen in assign_cpu_sysfs_fds is lower than -threads_in_system, the loop in parse_sysfs_values() will read uninitialized -entry, where .cpu=0. - -To prevent that, unset entries in the cpu_sysfs_fds should have the spurr -fd set to -1. - -Signed-off-by: Laurent Dufour ---- - src/lparstat.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/lparstat.c b/src/lparstat.c -index a9e7bce..d2fdb3f 100644 ---- a/src/lparstat.c -+++ b/src/lparstat.c -@@ -163,6 +163,10 @@ static int assign_cpu_sysfs_fds(int threads_in_system) - cpu_idx++; - } - -+ /* Mark extra slots for offline threads unset, see parse_sysfs_values */ -+ for (; cpu_idx < threads_in_system; cpu_idx++) -+ cpu_sysfs_fds[cpu_idx].spurr = -1; -+ - return 0; - error: - fprintf(stderr, "Failed to open %s: %s\n", --- -2.40.1 - diff --git a/lparstat-report-mixed-SMT-state.patch b/lparstat-report-mixed-SMT-state.patch deleted file mode 100644 index f237f5a..0000000 --- a/lparstat-report-mixed-SMT-state.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 5d2e43bbf0804da52202f817f7f7fc5f18aafd11 Mon Sep 17 00:00:00 2001 -From: Laurent Dufour -Date: Tue, 2 May 2023 16:54:35 +0200 -Subject: [PATCH 2/3] lparstat: report mixed SMT state - -when SMT state is mixed like this one (CPU 4 is offline): - -$ ppc64_cpu --info -Core 0: 0* 1* 2* 3* 4 5* 6* 7* -Core 1: 8* 9* 10* 11* 12* 13* 14* 15* -Core 2: 16* 17* 18* 19* 20* 21* 22* 23* -Core 3: 24* 25* 26* 27* 28* 29* 30* 31* -Core 4: 32* 33* 34* 35* 36* 37* 38* 39* -Core 5: 40* 41* 42* 43* 44* 45* 46* 47* -$ ppc64_cpu --smt -SMT=7: 0 -SMT=8: 1-5 - -ppc64_cpu --smt is handling that nicely but lparstat failed reporting the -SMT state: -$ /usr/sbin/lparstat -Failed to get smt state - -System Configuration -type=Dedicated mode=Capped smt=Capped lcpu=6 mem=65969728 kB cpus=0 ent=6.00 - -%user %sys %wait %idle physc %entc lbusy app vcsw phint ------ ----- ----- ----- ----- ----- ----- ----- ----- ----- - 0.02 0.01 0.00 99.97 3.41 56.83 0.02 0.00 4061778 156 - -Makes lparstat reporting "smt=mixed" in that case. -__do_smt is now returning 0 when the SMT state is mixed instead of -1 which -is also reported when an error is detected. -This doesn't change the call made by ppc64_cpu which is using -print_smt_state=true and so is expecting a returned value equal to 0 or -1. - -With that patch applied, lparstat print that in the above case: -$lparstat - -System Configuration -type=Dedicated mode=Capped smt=Mixed lcpu=6 mem=65969728 kB cpus=0 ent=6.00 - -%user %sys %wait %idle physc %entc lbusy app vcsw phint ------ ----- ----- ----- ----- ----- ----- ----- ----- ----- - 0.01 0.01 0.00 99.97 3.43 57.17 0.02 0.00 4105654 156 - -Signed-off-by: Laurent Dufour ---- - src/common/cpu_info_helpers.c | 4 ++-- - src/lparstat.c | 4 +++- - 2 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/common/cpu_info_helpers.c b/src/common/cpu_info_helpers.c -index 925f220..c05d96d 100644 ---- a/src/common/cpu_info_helpers.c -+++ b/src/common/cpu_info_helpers.c -@@ -245,7 +245,7 @@ int __do_smt(bool numeric, int cpus_in_system, int threads_per_cpu, - if (smt_state == 0) - smt_state = thread + 1; - else if (smt_state > 0) -- smt_state = -1; /* mix of SMT modes */ -+ smt_state = 0; /* mix of SMT modes */ - } - } - -@@ -257,7 +257,7 @@ int __do_smt(bool numeric, int cpus_in_system, int threads_per_cpu, - printf("SMT=1\n"); - else - printf("SMT is off\n"); -- } else if (smt_state == -1) { -+ } else if (smt_state == 0) { - for (thread = 0; thread < threads_per_cpu; thread++) { - if (CPU_COUNT_S(cpu_state_size, - cpu_states[thread])) { -diff --git a/src/lparstat.c b/src/lparstat.c -index eebba1f..a9e7bce 100644 ---- a/src/lparstat.c -+++ b/src/lparstat.c -@@ -884,13 +884,15 @@ void get_smt_mode(struct sysentry *se, char *buf) - } - - smt_state = parse_smt_state(); -- if (smt_state < 0) { -+ if (smt_state == -1) { - fprintf(stderr, "Failed to get smt state\n"); - return; - } - - if (smt_state == 1) - sprintf(buf, "Off"); -+ else if (smt_state == 0) -+ sprintf(buf, "Mixed"); - else - sprintf(buf, "%d", smt_state); - } --- -2.40.1 - diff --git a/nvram-man-page-and-help-output-are-not-in-sync.patch b/nvram-man-page-and-help-output-are-not-in-sync.patch deleted file mode 100644 index ceb4bf3..0000000 --- a/nvram-man-page-and-help-output-are-not-in-sync.patch +++ /dev/null @@ -1,52 +0,0 @@ -From d604cc779741c29cbdc8da97cbfc1512fd21fc1b Mon Sep 17 00:00:00 2001 -From: Likhitha Korrapati -Date: Fri, 11 Aug 2023 00:41:14 -0500 -Subject: [PATCH] nvram man page and --help output are not in sync - -The nvram man page and the output from --help option are not in -sync and few of the options are missing in man page. - -The options that are missing are ascii, dump, nvram-size, zero. -These options are added through the commit ids [1], [2]. - -This patch adds the above missing options to the nvram. - -[1] https://github.com/ibm-power-utilities/powerpc-utils/commit/0e09f4e2898e7dea556479b018a7f4bf12108099 -[2] https://github.com/ibm-power-utilities/powerpc-utils/commit/976dbe9bb7b01b135cac3e7bbd1dce0cdc88636a - -Signed-off-by: Likhitha Korrapati -Signed-off-by: Tyrel Datwyler ---- - man/nvram.8 | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/man/nvram.8 b/man/nvram.8 -index 2938e34..6071712 100644 ---- a/man/nvram.8 -+++ b/man/nvram.8 -@@ -67,6 +67,22 @@ be more verbose. - \fB\--help - print usage information including other low level options useful for - debugging nvram. -+.TP -+\fB\--ascii \fIname -+print partition contents as ASCII text -+.TP -+\fB\--dump \fIname -+raw dump of partition (use --partitions to see names) -+.TP -+\fB\--nvram-size -+specify size of nvram data, must in multiples of 16 Bytes (for repair -+operations) -+.TP -+\fB\--unzip \fIname -+decompress and print compressed data from partition -+.TP -+\fB\--zero | 0 \fR -+terminate config pairs with a NULL character - .SH FILES - /dev/nvram - .SH AUTHOR --- -2.43.0 - diff --git a/powerpc-nvram-Fix-Segmentation-fault-issue-in-nvram-.patch b/powerpc-nvram-Fix-Segmentation-fault-issue-in-nvram-.patch deleted file mode 100644 index c02eb11..0000000 --- a/powerpc-nvram-Fix-Segmentation-fault-issue-in-nvram-.patch +++ /dev/null @@ -1,56 +0,0 @@ -From a6d31caf4eaa453d3ec879f02163b3a515789b85 Mon Sep 17 00:00:00 2001 -From: Likhitha Korrapati -Date: Mon, 11 Sep 2023 05:23:37 -0500 -Subject: [PATCH] powerpc/nvram: Fix Segmentation fault issue in nvram-size. - -nvram-size option results in segmentation fault when the user -specifies value larger than the default nvram size - -Without the patch: -[root@xxx ~]# nvram --nvram-size 1048592 -nvram: WARNING: expected 1048592 bytes, but only read 15360! -Segmentation fault (core dumped) - -Segmentation fault is caused because the phead->length is becoming 0. -And because of this the p_start doesn't get updated which makes the -while loop run infinitely resulting in segmentation fault. -This patch adds a condition check for phead->length to avoid infinite -while loop. - -With the patch: -[root@xxx src]# ./nvram --nvram-size 1048592 -./nvram: WARNING: expected 1048592 bytes, but only read 15360! -[root@xxx src]# ./nvram --nvram-size 268435456 -./nvram: WARNING: expected 268435456 bytes, but only read 15360! -[root@xxx src]# - -Reported-by: Shirisha Ganta -Signed-off-by: Likhitha Korrapati -[tyreld: fixed up else block] -Signed-off-by: Tyrel Datwyler ---- - src/nvram.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/nvram.c b/src/nvram.c -index 095e747..1987c3d 100644 ---- a/src/nvram.c -+++ b/src/nvram.c -@@ -460,8 +460,12 @@ nvram_parse_partitions(struct nvram *nvram) - c_sum = checksum(phead); - if (c_sum != phead->checksum) - warn_msg("this partition checksum should be %02x!\n", c_sum); -- phead->length = be16toh(phead->length); -- p_start += phead->length * NVRAM_BLOCK_SIZE; -+ if (phead->length != 0) { -+ phead->length = be16toh(phead->length); -+ p_start += phead->length * NVRAM_BLOCK_SIZE; -+ } else { -+ break; -+ } - } - - if (verbose) --- -2.43.0 - diff --git a/powerpc-nvram-fix-segmentation-fault-issue-in-print-.patch b/powerpc-nvram-fix-segmentation-fault-issue-in-print-.patch deleted file mode 100644 index 56025de..0000000 --- a/powerpc-nvram-fix-segmentation-fault-issue-in-print-.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 3f72b8326a2fc9a9dffb4b31d0ce3abf12e24751 Mon Sep 17 00:00:00 2001 -From: Likhitha Korrapati -Date: Thu, 25 Jan 2024 15:44:02 +0530 -Subject: [PATCH] powerpc/nvram: fix segmentation fault issue in print-config - -print-config option in nvram results in segmentation fault when the -user provides a very large value. - -without the patch: -[root@xxx powerpc-utils]# nvram --print-config=real-mode? -true -[root@xxx powerpc-utils]# nvram --print-config=$(perl -e 'p -rint "A"x1000000') -Segmentation fault (core dumped) - -The Segmentation fault occurs because the code tries to access memory -beyond the bounds of the data at index varlen. varlen is the length of -the string provided by the user. - -This patch adds a condition to check whether the length of the data is -greater than varlen to prevent accessing out of bounds. - -with the patch: -[root@xxx powerpc-utils]# ./src/nvram --print-config=real-m -ode? -true -[root@xxx powerpc-utils]# ./src/nvram --print-config=$(perl - -e 'print "A"x1000000') - -Reported-by: Shirisha Ganta -Signed-off-by: Likhitha Korrapati -Signed-off-by: Tyrel Datwyler ---- - src/nvram.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/nvram.c b/src/nvram.c -index f051e9c..095e747 100644 ---- a/src/nvram.c -+++ b/src/nvram.c -@@ -1280,7 +1280,7 @@ print_of_config(struct nvram *nvram, char *config_var, char *pname, - - data = (char *)phead + sizeof(*phead); - while (*data != '\0') { -- if ((data[varlen] == '=') && -+ if (strlen(data) > varlen && (data[varlen] == '=') && - strncmp(config_var, data, varlen) == 0) { - printf("%s%c", data + varlen + 1, terminator); - rc = 0; --- -2.43.0 - diff --git a/powerpc-utils-1.3.11.tar.gz b/powerpc-utils-1.3.11.tar.gz deleted file mode 100644 index 5e9fffa..0000000 --- a/powerpc-utils-1.3.11.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6bb16078068d8b889afdd78927d2f061702ef155e57fc548ae573e2b0b90ca13 -size 397192 diff --git a/powerpc-utils-1.3.12.tar.gz b/powerpc-utils-1.3.12.tar.gz new file mode 100644 index 0000000..9f715b2 --- /dev/null +++ b/powerpc-utils-1.3.12.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3f62f63fb856bbd70eee997ecd3d870eca2220103fbf00d8e3d7ee414f5c7e7 +size 404431 diff --git a/powerpc-utils-scripts-ofpathname-handle-nsid-of-nvme.patch b/powerpc-utils-scripts-ofpathname-handle-nsid-of-nvme.patch deleted file mode 100644 index 069b2fb..0000000 --- a/powerpc-utils-scripts-ofpathname-handle-nsid-of-nvme.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 8a7aa61c5f520df03e53e6f7e1d63b7d5c432376 Mon Sep 17 00:00:00 2001 -From: Wen Xiong -Date: Wed, 15 Nov 2023 14:37:43 -0600 -Subject: [PATCH] powerpc-utils/scripts/ofpathname: handle nsid of nvme device - as hex number - -Git-commit: 8a7aa61c5f520df03e53e6f7e1d63b7d5c432376 - -Installation fails if nsid of nvme device is greater than 10. - -The patch fixes the issue and handle nsid of nvme ad a hex number. - -Signed-off-by: Wen Xiong -Signed-off-by: Tyrel Datwyler ---- - scripts/ofpathname | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/scripts/ofpathname b/scripts/ofpathname -index 3abe4d1..833d03f 100755 ---- a/scripts/ofpathname -+++ b/scripts/ofpathname -@@ -722,6 +722,7 @@ l2of_nvme() - err $ERR_NO_OFPATH - fi - -+ devnsid=$(printf "%x" $devnsid) - OF_PATH="$OF_PATH/$devtype@$devnsid" - - # No partition (pZ) specified. -@@ -1798,6 +1799,7 @@ of2l_nvme() - cd $dir - - local devnsid=`$CAT ./nsid 2>/dev/null` -+ devnsid=$(printf "%x" $devnsid) - if [[ $devnsid = $nsid ]]; then - LOGICAL_DEVNAME="${dir##*/}" - break --- -2.43.0 - diff --git a/powerpc-utils.changes b/powerpc-utils.changes index 1c5de3a..1f8512f 100644 --- a/powerpc-utils.changes +++ b/powerpc-utils.changes @@ -1,3 +1,40 @@ +------------------------------------------------------------------- +Tue Apr 2 08:25:42 UTC 2024 - Michal Suchanek + +- Fix SMT control on powernv with the new kernel interface (bsc#1222163) + * Refresh ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch + +------------------------------------------------------------------- +Fri Feb 9 12:21:41 UTC 2024 - Michal Suchanek + +- Do not print an error when the kernel does not support sysfs smt interface + * ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch + +------------------------------------------------------------------- +Thu Feb 8 09:43:47 UTC 2024 - Michal Suchanek + +- Update to version 1.3.12 + * Add drmgr CPU DLPAR hooks + * Fix lsslot output (bsc#1219716 ltc#204541) +- Drop upstreamed patches + * lparstat-Fix-negative-values-seen-while-running-lpar.patch + * lparstat-report-mixed-SMT-state.patch + * lparstat-Fix-offline-threads-uninitialized-entries.patch + * powerpc-utils-scripts-ofpathname-handle-nsid-of-nvme.patch + * bootlist-Support-multiple-dev-paths-for-a-nvme-boot-.patch + * rtas_dbg-Fix-the-large-negative-values-in-rtas_dbg.patch + * powerpc-nvram-fix-segmentation-fault-issue-in-print-.patch + * powerpc-nvram-Fix-Segmentation-fault-issue-in-nvram-.patch + * nvram-man-page-and-help-output-are-not-in-sync.patch + * ppc64_cpu-info-fix-bad-report-when-non-continuous-CP.patch + * hcn-init-Split-services-per-connection-manager.patch + +------------------------------------------------------------------- +Mon Feb 5 15:30:16 UTC 2024 - Michal Suchanek + +- Use separate hcn-init service for wicked and NM (bsc#1200731 ltc#198485) + * hcn-init-Split-services-per-connection-manager.patch + ------------------------------------------------------------------- Thu Feb 1 09:17:33 UTC 2024 - Michal Suchanek diff --git a/powerpc-utils.spec b/powerpc-utils.spec index 77a87fa..ba14acd 100644 --- a/powerpc-utils.spec +++ b/powerpc-utils.spec @@ -17,7 +17,7 @@ Name: powerpc-utils -Version: 1.3.11 +Version: 1.3.12 Release: 0 Summary: Utilities for PowerPC Hardware License: GPL-2.0-or-later @@ -29,17 +29,8 @@ Patch1: powerpc-utils-lsprop.patch Patch2: ofpathname_powernv.patch Patch3: fix_kexec_service_name_for_suse.patch Patch4: libvirt-service-dep.patch -Patch5: lparstat-Fix-negative-values-seen-while-running-lpar.patch -Patch6: lparstat-report-mixed-SMT-state.patch -Patch7: lparstat-Fix-offline-threads-uninitialized-entries.patch Patch8: ppc64_cpu-Support-partial-SMT-level-through-SYS-FS-s.patch -Patch9: powerpc-utils-scripts-ofpathname-handle-nsid-of-nvme.patch -Patch10: bootlist-Support-multiple-dev-paths-for-a-nvme-boot-.patch -Patch11: rtas_dbg-Fix-the-large-negative-values-in-rtas_dbg.patch -Patch12: powerpc-nvram-fix-segmentation-fault-issue-in-print-.patch -Patch13: powerpc-nvram-Fix-Segmentation-fault-issue-in-nvram-.patch -Patch14: nvram-man-page-and-help-output-are-not-in-sync.patch -Patch15: ppc64_cpu-info-fix-bad-report-when-non-continuous-CP.patch +Patch9: ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: libnuma-devel @@ -96,24 +87,20 @@ ln -sf drmgr %{buildroot}%{_sbindir}/drmig_chrp_pmig ln -s service %{buildroot}%{_sbindir}/rcsmt_off -install -m 644 systemd/hcn-init.service.suse %{buildroot}%{_unitdir}/hcn-init.service -mkdir -p %{buildroot}/usr/lib/powerpc-utils -install -m 644 scripts/functions.suse %{buildroot}/usr/lib/powerpc-utils/functions.suse - # remove docu installed by make_install as we hand-install them in %%files rm -rf %{buildroot}%{_docdir}/%{name}/* %pre -%service_add_pre hcn-init.service smt_off.service smtstate.service +%service_add_pre hcn-init-wicked.service hcn-init-NetworkManager.service smt_off.service smtstate.service %post -%service_add_post hcn-init.service smt_off.service smtstate.service +%service_add_post hcn-init-wicked.service hcn-init-NetworkManager.service smt_off.service smtstate.service %preun -%service_del_preun hcn-init.service smt_off.service smtstate.service +%service_del_preun hcn-init-wicked.service hcn-init-NetworkManager.service smt_off.service smtstate.service %postun -%service_del_postun hcn-init.service smt_off.service smtstate.service +%service_del_postun hcn-init-wicked.service hcn-init-NetworkManager.service smt_off.service smtstate.service %files %license COPYING @@ -128,7 +115,8 @@ rm -rf %{buildroot}%{_docdir}/%{name}/* %config(noreplace) %{_localstatedir}/lib/powerpc-utils/smt.state %dir /usr/lib/powerpc-utils /usr/lib/powerpc-utils/functions.suse -%{_unitdir}/hcn-init.service +%{_unitdir}/hcn-init-wicked.service +%{_unitdir}/hcn-init-NetworkManager.service %{_unitdir}/smt_off.service %{_unitdir}/smtstate.service diff --git a/ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch b/ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch new file mode 100644 index 0000000..4bac15d --- /dev/null +++ b/ppc64_cpu-Clean-up-sysfs-smt-control-error-handling.patch @@ -0,0 +1,65 @@ +From 8d613e0e81561ce0b1d6ea834b07c73f5f9251a1 Mon Sep 17 00:00:00 2001 +From: Michal Suchanek +Date: Fri, 9 Feb 2024 13:12:33 +0100 +Subject: [PATCH] ppc64_cpu: Clean up sysfs smt/control error handling + +When the kernel does not support the sysfs intercface do not report an +arror, fall back to the old method silently. + +Suggested-by: Nathan Lynch +Signed-off-by: Michal Suchanek +--- +v3: retry is needed on ENODEV to support powernv +--- + src/ppc64_cpu.c | 24 +++++++++++++++++++----- + 1 file changed, 19 insertions(+), 5 deletions(-) + +diff --git a/src/ppc64_cpu.c b/src/ppc64_cpu.c +index c318928..688152b 100644 +--- a/src/ppc64_cpu.c ++++ b/src/ppc64_cpu.c +@@ -364,14 +364,28 @@ static int is_dscr_capable(void) + + /* + * Depends on kernel's CONFIG_HOTPLUG_CPU ++ * Return -1 for fatal error, -2 to retry. + */ + static int set_smt_control(int smt_state) + { + if (set_attribute(SYS_SMT_CONTROL, "%d", smt_state)) { +- /* Silently ignore kernel not supporting this feature */ +- if (errno != ENODEV) +- perror(SYS_SMT_CONTROL); +- return -1; ++ switch (errno) { ++ case ENOENT: ++ /* ++ * The kernel does not have the interface. ++ * Try the old method. ++ */ ++ return -2; ++ case ENODEV: ++ /* ++ * Setting SMT state not supported by this interface. ++ * eg. powernv ++ */ ++ return -2; ++ default: ++ perror(SYS_SMT_CONTROL); ++ return -1; ++ } + } + return 0; + } +@@ -405,7 +419,7 @@ static int do_smt(char *state, bool numeric) + } + + /* Try using smt/control if failing, fall back to the legacy way */ +- if (set_smt_control(smt_state)) ++ if ((rc = set_smt_control(smt_state)) == -2) + rc = set_smt_state(smt_state); + } + +-- +2.44.0 + diff --git a/ppc64_cpu-info-fix-bad-report-when-non-continuous-CP.patch b/ppc64_cpu-info-fix-bad-report-when-non-continuous-CP.patch deleted file mode 100644 index d7c427d..0000000 --- a/ppc64_cpu-info-fix-bad-report-when-non-continuous-CP.patch +++ /dev/null @@ -1,156 +0,0 @@ -From f1a8ed892e18b83cb0483e8f8f8cbc512fa8510c Mon Sep 17 00:00:00 2001 -From: Laurent Dufour -Date: Thu, 10 Aug 2023 11:47:07 +0200 -Subject: [PATCH] ppc64_cpu/info: fix bad report when non continuous CPU ids - -When CPU ids are not continuous, let say that the kernel didn't reuse a set -of CPU ids already used on a different nodes, the output of ppc64_cpu ---info is not correct. - -For instance, in the example below the CPU id 48 to 55 haven't been reused -by the kernel when a CPU has been added after a LPM operation. -Note that the system is running in SMT=4. - -The numactl -H command is providing the correct set of CPU: -ltczep3-lp4:~ # numactl -H -available: 2 nodes (0-1) -node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 64 65 66 67 68 69 70 71 -node 0 size: 7177 MB -node 0 free: 4235 MB -node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 -node 1 size: 24508 MB -node 1 free: 23539 MB -node distances: -node 0 1 - 0: 10 40 - 1: 40 10 - -But ppc64_cpu --info is reporting the CPUs 48 to 55 offlined while not -reporting at all the CPU 65 to 71: -ltczep3-lp4:~ # ppc64_cpu --info -Core 0: 0* 1* 2* 3* 4* 5* 6* 7* -Core 1: 8* 9* 10* 11* 12* 13* 14* 15* -Core 2: 16* 17* 18* 19* 20* 21* 22* 23* -Core 3: 24* 25* 26* 27* 28* 29* 30* 31* -Core 4: 32* 33* 34* 35* 36* 37* 38* 39* -Core 5: 40* 41* 42* 43* 44* 45* 46* 47* -Core 6: 48 49 50 51 52 53 54 55 - -This is because it is considering that the CPU id are continuous which is -not the case here. - -To prevent that, when looking for a core, it is now first checking that the -physical_id of the first thread in that core is defined (not -1). If that -the case this means that CPU/core is present. - -With that patch applied, ppc64_cpu --info is reporting: -ltczep3-lp4:~ # pc64_cpu --info -Core 0: 0* 1* 2* 3* 4 5 6 7 -Core 1: 8* 9* 10* 11* 12 13 14 15 -Core 2: 16* 17* 18* 19* 20 21 22 23 -Core 3: 24* 25* 26* 27* 28 29 30 31 -Core 4: 32* 33* 34* 35* 36 37 38 39 -Core 5: 40* 41* 42* 43* 44 45 46 47 -Core 6: 64* 65* 66* 67* 68 69 70 71 - -Signed-off-by: Laurent Dufour -Signed-off-by: Tyrel Datwyler ---- - src/common/cpu_info_helpers.c | 14 ++++++++++++++ - src/common/cpu_info_helpers.h | 1 + - src/ppc64_cpu.c | 25 +++++++++++++++++-------- - 3 files changed, 32 insertions(+), 8 deletions(-) - -diff --git a/src/common/cpu_info_helpers.c b/src/common/cpu_info_helpers.c -index c05d96d..8c57db8 100644 ---- a/src/common/cpu_info_helpers.c -+++ b/src/common/cpu_info_helpers.c -@@ -83,6 +83,20 @@ int __sysattr_is_writeable(char *attribute, int threads_in_system) - return test_sysattr(attribute, W_OK, threads_in_system); - } - -+int cpu_physical_id(int thread) -+{ -+ char path[SYSFS_PATH_MAX]; -+ int rc, physical_id; -+ -+ sprintf(path, SYSFS_CPUDIR"/physical_id", thread); -+ rc = get_attribute(path, "%d", &physical_id); -+ -+ /* This attribute does not exist in kernels without hotplug enabled */ -+ if (rc && errno == ENOENT) -+ return -1; -+ return physical_id; -+} -+ - int cpu_online(int thread) - { - char path[SYSFS_PATH_MAX]; -diff --git a/src/common/cpu_info_helpers.h b/src/common/cpu_info_helpers.h -index 8f09d79..c063fff 100644 ---- a/src/common/cpu_info_helpers.h -+++ b/src/common/cpu_info_helpers.h -@@ -32,6 +32,7 @@ - - extern int __sysattr_is_readable(char *attribute, int threads_in_system); - extern int __sysattr_is_writeable(char *attribute, int threads_in_system); -+extern int cpu_physical_id(int thread); - extern int cpu_online(int thread); - extern int is_subcore_capable(void); - extern int num_subcores(void); -diff --git a/src/ppc64_cpu.c b/src/ppc64_cpu.c -index 5fdf86a..ad9f4dc 100644 ---- a/src/ppc64_cpu.c -+++ b/src/ppc64_cpu.c -@@ -1251,31 +1251,40 @@ static int do_cores_on(char *state) - return 0; - } - -+static bool core_is_online(int core) -+{ -+ return cpu_physical_id(core * threads_per_cpu) != -1; -+} -+ - static int do_info(void) - { - int i, j, thread_num; - char online; -- int subcores = 0; -+ int core, subcores = 0; - - if (is_subcore_capable()) - subcores = num_subcores(); - -- for (i = 0; i < cpus_in_system; i++) { -+ for (i = 0, core = 0; core < cpus_in_system; i++) { -+ -+ if (!core_is_online(i)) -+ continue; - - if (subcores > 1) { -- if (i % subcores == 0) -- printf("Core %3d:\n", i/subcores); -- printf(" Subcore %3d: ", i); -+ if (core % subcores == 0) -+ printf("Core %3d:\n", core/subcores); -+ printf(" Subcore %3d: ", core); - } else { -- printf("Core %3d: ", i); -+ printf("Core %3d: ", core); - } - -- for (j = 0; j < threads_per_cpu; j++) { -- thread_num = i*threads_per_cpu + j; -+ thread_num = i * threads_per_cpu; -+ for (j = 0; j < threads_per_cpu; j++, thread_num++) { - online = cpu_online(thread_num) ? '*' : ' '; - printf("%4d%c ", thread_num, online); - } - printf("\n"); -+ core++; - } - return 0; - } --- -2.43.0 - diff --git a/rtas_dbg-Fix-the-large-negative-values-in-rtas_dbg.patch b/rtas_dbg-Fix-the-large-negative-values-in-rtas_dbg.patch deleted file mode 100644 index 5dafc67..0000000 --- a/rtas_dbg-Fix-the-large-negative-values-in-rtas_dbg.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 9caa77e4477a73064a6deea253fd3faea32648fb Mon Sep 17 00:00:00 2001 -From: Likhitha Korrapati -Date: Fri, 17 Nov 2023 01:42:29 -0500 -Subject: [PATCH] rtas_dbg: Fix the large negative values in rtas_dbg - -without the patch: -[root@xxx powerpc-utils]# rtas_dbg -l ibm,rks-hcalls -Could not get rtas token for ibm,indicator-0002 -Could not get rtas token for ibm,integrated-stop-self -Could not get rtas token for ibm,indicator-9005 -Could not get rtas token for ibm,extended-os-term -Could not get rtas token for ibm,indicator-0001 -Could not get rtas token for ibm,sensor-0009 -Could not get rtas token for ibm,recoverable-epow3 -Could not get rtas token for ibm,sensor-9005 -Could not get rtas token for ibm,change-msix-capable -Could not get rtas token for ibm,sensor-0005 -Could not get rtas token for ibm,sensor-0001 -ibm,rks-hcalls -536870912 - -The large negatives values are due to incompatible format(%d). -The data type of the token variable is uint32_t.This patch -modifies the format(%u) to align with its data type(uint32_t). - -with the patch: -[root@xxx powerpc-utils]# ./src/rtas_dbg -l ibm,rks-hcalls -Could not get rtas token for ibm,indicator-0002 -Could not get rtas token for ibm,integrated-stop-self -Could not get rtas token for ibm,indicator-9005 -Could not get rtas token for ibm,extended-os-term -Could not get rtas token for ibm,indicator-0001 -Could not get rtas token for ibm,sensor-0009 -Could not get rtas token for ibm,recoverable-epow3 -Could not get rtas token for ibm,sensor-9005 -Could not get rtas token for ibm,change-msix-capable -Could not get rtas token for ibm,sensor-0005 -Could not get rtas token for ibm,sensor-0001 -ibm,rks-hcalls 3758096384 - -Reported-by: Shirisha Ganta -Signed-off-by: Likhitha Korrapati -Signed-off-by: Tyrel Datwyler ---- - src/rtas_dbg.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/rtas_dbg.c b/src/rtas_dbg.c -index ebc7474..6c7854a 100644 ---- a/src/rtas_dbg.c -+++ b/src/rtas_dbg.c -@@ -200,10 +200,10 @@ void print_rtas_tokens(struct rtas_token *tok, struct rtas_token *tok_list) - struct rtas_token *t; - - if (tok) -- printf("%-40s%d\n", tok->name, tok->token); -+ printf("%-40s%u\n", tok->name, tok->token); - else { - for (t = tok_list; t; t = t->next) -- printf("%-40s%d\n", t->name, t->token); -+ printf("%-40s%u\n", t->name, t->token); - } - } - -@@ -217,7 +217,7 @@ int set_rtas_dbg(struct rtas_token *tok) - args.nret = htobe32(1); - args.args[0] = htobe32(tok->token); - -- printf("Enabling rtas debug for %s (%d)\n", tok->name, tok->token); -+ printf("Enabling rtas debug for %s (%u)\n", tok->name, tok->token); - - rc = rtas(&args); - --- -2.43.0 -