From ca847484225aaa8b1ecae8855ee90651402f0ad7 Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Tue, 3 Dec 2024 13:58:43 +0100 Subject: [PATCH] - Resolves: RHEL-30880, multipath - drmgr support - Resolces: RHEL-61089, lparstat -E Fails to Display Correct Values for %Busy and %Idle States --- .gitignore | 1 + ...-Support-multiple-dev-paths-for-a-nv.patch | 171 -------------- powerpc-utils-1.3.10-distro.patch | 11 - ...ffline-threads-uninitialized-entries.patch | 46 ---- ...3.10-lparstat-report-mixed-SMT-state.patch | 93 -------- powerpc-utils-1.3.10-nvram-manpage.patch | 47 ---- ...tils-1.3.10-nvram-print-config-crash.patch | 47 ---- powerpc-utils-1.3.10-nvram-size-crash.patch | 51 ---- ...6f8ab7c27095be90eb2e69ae57e8b43eccbe.patch | 34 --- ...fbd7c-add_NVMf-FC_boot_support_part2.patch | 110 --------- ...99ed28d65a79d4c3b3405a8e04034eb58e09.patch | 79 ------- ...-73ba26-lparstat-fix_negative_values.patch | 36 --- ...adc945372e901c2bc3f7066a5a1c219bf1d8.patch | 120 ---------- ...a61c5f520df03e53e6f7e1d63b7d5c432376.patch | 33 --- powerpc-utils-b1b9e7-LMB_size_4GB.patch | 98 -------- ...01580-add_NVMf-FC_boot_support_part1.patch | 131 ----------- ...3040ea9ed49345756136d61eb402e32402e8.patch | 36 --- ...79aedaf76eff09a5d1f399da09561a4d4d7d.patch | 93 -------- ...8dc5e5375591a4cff6ffabc6063771288f59.patch | 219 ------------------ ...ls-e1f1de-lmb_address_in_hexadecimal.patch | 29 --- ...619ef6be747f53e5f631f8b23b5edb9bb023.patch | 47 ---- ...ode_for_dedicated_donating_partition.patch | 55 ----- ...setting_primary_slave_across_reboots.patch | 27 --- ...c-utils-git04e5c9-handle_nsid_as_hex.patch | 40 ---- ...ple_dev_paths_for_a_nvmf_boot_device.patch | 118 ---------- ...-utils-rtas_dbg_return_negativ_value.patch | 70 ------ ...ort_partial_SMT_level_through_SYS_FS.patch | 65 ------ powerpc-utils.spec | 74 ++---- sources | 2 +- 29 files changed, 18 insertions(+), 1965 deletions(-) delete mode 100644 0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch delete mode 100644 powerpc-utils-1.3.10-distro.patch delete mode 100644 powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch delete mode 100644 powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch delete mode 100644 powerpc-utils-1.3.10-nvram-manpage.patch delete mode 100644 powerpc-utils-1.3.10-nvram-print-config-crash.patch delete mode 100644 powerpc-utils-1.3.10-nvram-size-crash.patch delete mode 100644 powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch delete mode 100644 powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch delete mode 100644 powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch delete mode 100644 powerpc-utils-73ba26-lparstat-fix_negative_values.patch delete mode 100644 powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch delete mode 100644 powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch delete mode 100644 powerpc-utils-b1b9e7-LMB_size_4GB.patch delete mode 100644 powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch delete mode 100644 powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch delete mode 100644 powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch delete mode 100644 powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch delete mode 100644 powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch delete mode 100644 powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch delete mode 100644 powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch delete mode 100644 powerpc-utils-fix_setting_primary_slave_across_reboots.patch delete mode 100644 powerpc-utils-git04e5c9-handle_nsid_as_hex.patch delete mode 100644 powerpc-utils-git3847a1-support_multiple_dev_paths_for_a_nvmf_boot_device.patch delete mode 100644 powerpc-utils-rtas_dbg_return_negativ_value.patch delete mode 100644 powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch diff --git a/.gitignore b/.gitignore index c09bda4..c440272 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ powerpc-utils-1.2.2.tar.gz /powerpc-utils-1.3.8.tar.gz /powerpc-utils-1.3.9.tar.gz /powerpc-utils-1.3.10.tar.gz +/powerpc-utils-1.3.13.tar.gz diff --git a/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch b/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch deleted file mode 100644 index 428edc6..0000000 --- a/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch +++ /dev/null @@ -1,171 +0,0 @@ -From edf7ee0e03e60140bcbe34ec458e1361678a5dd2 Mon Sep 17 00:00:00 2001 -From: Wen Xiong -Date: Thu, 25 Jan 2024 23:49:21 -0500 -Subject: [PATCH] scripts/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, - -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-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 - -Node Generic SN Model -Namespace Usage Format FW Rev ---------------------- --------------------- -------------------- ----------------------------------------- ---------- --------------------------- ---------------- -------- -/dev/nvme1n1 /dev/ng1n1 S6RUNE0R900042 1.6TB -NVMe Gen4 U.2 SSD III 0x1 1.60 TB / 1.60 TB -4 KiB + 0 B REV.SN66 -nvme0 -nvme1n1 -/pci@800000020000583/pci1014,6bc@0/namespace@1 -/pci@800000020000523/pci1014,6bc@0/namespace@1 - -Signed-off-by: Wen Xiong ---- - scripts/bootlist | 80 +++++++++++++++++++++++++++++++++++++++--------- - 1 file changed, 66 insertions(+), 14 deletions(-) - -diff --git a/scripts/bootlist b/scripts/bootlist -index cc8718e..dcb5c00 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.35.3 diff --git a/powerpc-utils-1.3.10-distro.patch b/powerpc-utils-1.3.10-distro.patch deleted file mode 100644 index 84f8aa8..0000000 --- a/powerpc-utils-1.3.10-distro.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up powerpc-utils-1.3.10/Makefile.am.me powerpc-utils-1.3.10/Makefile.am ---- powerpc-utils-1.3.10/Makefile.am.me 2022-06-03 12:35:01.335312481 +0200 -+++ powerpc-utils-1.3.10/Makefile.am 2022-06-03 14:11:58.453820076 +0200 -@@ -229,7 +229,6 @@ install-data-hook: - $(INSTALL_DATA) systemd/smtstate.service $(DESTDIR)${systemd_unit_dir}/ - $(INSTALL_DATA) systemd/hcn-init.service $(DESTDIR)${systemd_unit_dir}/ - $(INSTALL_DATA) var/lib/powerpc-utils/smt.state $(DESTDIR)/var/lib/@PACKAGE@/ -- $(INSTALL_SCRIPT) scripts/functions.suse $(DESTDIR)/usr/lib/@PACKAGE@/ - $(INSTALL_SCRIPT) scripts/smtstate $(DESTDIR)@sbindir@ - sed -i -e 's,$${exec_prefix},@prefix@,g' $(DESTDIR)${systemd_unit_dir}/smt_off.service - sed -i -e 's,$${exec_prefix},@prefix@,g' $(DESTDIR)${systemd_unit_dir}/smtstate.service diff --git a/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch b/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch deleted file mode 100644 index 0d1ec77..0000000 --- a/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch +++ /dev/null @@ -1,46 +0,0 @@ -commit dee15756bcb287ccf39a904be07c90107b13844b -Author: Laurent Dufour -Date: Wed May 3 10:50:15 2023 +0200 - - 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 - Signed-off-by: Tyrel Datwyler - -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", diff --git a/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch b/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch deleted file mode 100644 index d7717dc..0000000 --- a/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch +++ /dev/null @@ -1,93 +0,0 @@ -commit b2672fa3d462217ccd057a2cd307af2448e78757 -Author: Laurent Dufour -Date: Wed May 3 10:50:14 2023 +0200 - - 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 - Signed-off-by: Tyrel Datwyler - -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); - } diff --git a/powerpc-utils-1.3.10-nvram-manpage.patch b/powerpc-utils-1.3.10-nvram-manpage.patch deleted file mode 100644 index fb82723..0000000 --- a/powerpc-utils-1.3.10-nvram-manpage.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit d604cc779741c29cbdc8da97cbfc1512fd21fc1b -Author: Likhitha Korrapati -Date: Fri Aug 11 00:41:14 2023 -0500 - - 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 - -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 diff --git a/powerpc-utils-1.3.10-nvram-print-config-crash.patch b/powerpc-utils-1.3.10-nvram-print-config-crash.patch deleted file mode 100644 index 8764e50..0000000 --- a/powerpc-utils-1.3.10-nvram-print-config-crash.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit 3f72b8326a2fc9a9dffb4b31d0ce3abf12e24751 -Author: Likhitha Korrapati -Date: Thu Jan 25 15:44:02 2024 +0530 - - 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 - -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; diff --git a/powerpc-utils-1.3.10-nvram-size-crash.patch b/powerpc-utils-1.3.10-nvram-size-crash.patch deleted file mode 100644 index cee837e..0000000 --- a/powerpc-utils-1.3.10-nvram-size-crash.patch +++ /dev/null @@ -1,51 +0,0 @@ -commit a6d31caf4eaa453d3ec879f02163b3a515789b85 -Author: Likhitha Korrapati -Date: Mon Sep 11 05:23:37 2023 -0500 - - 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 - -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) diff --git a/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch b/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch deleted file mode 100644 index 8fe4809..0000000 --- a/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch +++ /dev/null @@ -1,34 +0,0 @@ -commit 1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe -Author: Laurent Dufour -Date: Fri Sep 16 18:39:13 2022 +0200 - - drmgr/pmig: remove deprecated call to refrsrc IBM.ManagementServer - - As Nathan reported while reviewing this series: - - This RSCT doc indicates that the IBM.ManagementServer resource class has - been superseded: - - https://www.ibm.com/docs/en/rsct/3.2?topic=security-management-domain-configuration - - Removing that deprecated call in this series because it is conflicting with - a following patch. The system returned value is stored in rc to prevent - compilation error (due to warning if system returned value is not read). - - Suggested-by: Nathan Lynch - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/drmig_chrp_pmig.c b/src/drmgr/drmig_chrp_pmig.c -index 94cb49a..f78ff15 100644 ---- a/src/drmgr/drmig_chrp_pmig.c -+++ b/src/drmgr/drmig_chrp_pmig.c -@@ -753,8 +753,5 @@ int drmig_chrp_pmig(void) - - post_mobility_update(); - -- say(DEBUG, "Refreshing RMC via refrsrc\n"); -- rc = system("/usr/sbin/rsct/bin/refrsrc IBM.ManagementServer"); -- - return 0; - } diff --git a/powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch b/powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch deleted file mode 100644 index 0b602c2..0000000 --- a/powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch +++ /dev/null @@ -1,110 +0,0 @@ -commit 2fbd7c1ff428e534d80f60e03501d625ab594eca -Author: Wen Xiong -Date: Wed Jun 15 13:05:51 2022 -0500 - - ofpathname: Fix several issues in nvmf boot/install support - - This patch fixes several issues in boot/install over nvme-over-fc - device support. - - - change cntlid to ffff - - add devnisd from sysfs - - add subsysnqn - - Signed-off-by: Wen Xiong - Signed-off-by: Tyrel Datwyler - -diff --git a/scripts/ofpathname b/scripts/ofpathname -index b1d6b09..33d7702 100755 ---- a/scripts/ofpathname -+++ b/scripts/ofpathname -@@ -773,8 +773,7 @@ l2of_nvmf() - t_wwpn="${t_wwpn#0x}" - t_wwpn="${t_wwpn%,*}" - nqn=`$CAT $PWD/subsysnqn` -- cntlid_dec=`$CAT $PWD/cntlid` -- cntlid=`echo "obase=16; $cntlid_dec" |bc` -+ cntlid=`echo ffff` - if [[ -n $h_wwpn ]]; then - for f in `$FIND /sys/devices -name "port_name"`; do - sys_wwpn=`$CAT $f 2>/dev/null` -@@ -808,6 +807,9 @@ l2of_nvmf() - if [[ ${#res} = 0 ]]; then - OF_PATH="" - else -+ goto_dir $res -+ devnsid=`$CAT $PWD/nsid | tr -d '\000'` -+ devnsid=`echo "obase=16; $devnsid" |bc` - OF_PATH="$OF_PATH/namespace@$devnsid" - fi - fi -@@ -818,6 +820,8 @@ l2of_nvmf() - if [[ ${#res} = 0 ]]; then - OF_PATH="" - else -+ goto_dir $res -+ devpart=`$CAT $PWD/partition | tr -d '\000'` - OF_PATH="${OF_PATH}:${devpart}" - fi - fi -@@ -1826,8 +1830,7 @@ of2l_nvmf() - ctrl_name=`echo $DEVNAME | cut -d "/" -f 5` - OF_WWPN=${ctrl_name%,*} - OF_WWPN=${OF_WWPN#*@} -- of_cntlid=${ctrl_name%%:*} -- of_cntlid=${of_cntlid#*,} -+ OF_NQN=`echo $ctrl_name | cut -d "=" -f 2` - # set partition number only if ':' is present - case "${nsid_part}" in - *:*) -@@ -1835,6 +1838,7 @@ of2l_nvmf() - ;; - esac - local dir -+ local found=0 - - for dir in `$FIND /sys/devices/virtual/nvme-fabrics -name "nvme[0-9]*"`; do - cd $dir -@@ -1844,10 +1848,9 @@ of2l_nvmf() - t_wwpn="${t_wwpn%,*}" - h_wwpn=`$CAT $PWD/address | cut -f 5 -d "-"` - h_wwpn="${h_wwpn#0x}" -- cntlid_dec=`$CAT $PWD/cntlid 2>/dev/null` -- cntlid=`echo "obase=16; $cntlid_dec" |bc` -+ nqn=`$CAT $PWD/subsysnqn` - if [[ $t_wwpn = $OF_WWPN ]] && \ -- [[ $cntlid == $of_cntlid ]]; then -+ [[ $nqn == $OF_NQN ]]; then - for f in `$FIND /sys/devices -name "port_name"`; do - sys_wwpn=`$CAT $f 2>/dev/null` - sys_wwpn="${sys_wwpn#0x}" -@@ -1871,14 +1874,23 @@ of2l_nvmf() - fi - fi - done -+ - if [[ -n $LOGICAL_DEVNAME ]] && \ - [[ -n $nsid ]]; then -- res=`$FIND /sys/devices/virtual -name ${LOGICAL_DEVNAME}n${nsid}` -- if [[ ${#res} = 0 ]]; then -- LOGICAL_DEVNAME='' -- else -- LOGICAL_DEVNAME="${LOGICAL_DEVNAME}n${nsid}" -- fi -+ for dir in `$FIND /sys/block -name "${LOGICAL_DEVNAME}n[0-9]*"`; do -+ cd $dir -+ -+ local devnsid=`$CAT ./nsid 2>/dev/null` -+ devnsid=`echo "obase=16; $devnsid" |bc` -+ if [[ $devnsid = $nsid ]]; then -+ found=1 -+ LOGICAL_DEVNAME="${dir##*/}" -+ break -+ fi -+ done -+ if [[ $found -eq 0 ]]; then -+ LOGICAL_DEVNAME="" -+ fi - fi - - if [[ -n $LOGICAL_DEVNAME ]] && \ diff --git a/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch b/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch deleted file mode 100644 index 016ba52..0000000 --- a/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch +++ /dev/null @@ -1,79 +0,0 @@ -commit 372599ed28d65a79d4c3b3405a8e04034eb58e09 -Author: Laurent Dufour -Date: Fri Sep 16 18:39:15 2022 +0200 - - drmgr: introduce a DRC type name table - - So that there is only one place to convert the name of the drc to the type - of drc and vice versa. - - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/common.c b/src/drmgr/common.c -index 622cfaf..12af756 100644 ---- a/src/drmgr/common.c -+++ b/src/drmgr/common.c -@@ -52,6 +52,21 @@ char *remove_slot_fname = REMOVE_SLOT_FNAME; - static int dr_lock_fd = 0; - static long dr_timeout; - -+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -+ -+static char *drc_type_str[] = { -+ [DRC_TYPE_NONE] = "unknwon", -+ [DRC_TYPE_PCI] = "pci", -+ [DRC_TYPE_SLOT] = "slot", -+ [DRC_TYPE_PHB] = "phb", -+ [DRC_TYPE_CPU] = "cpu", -+ [DRC_TYPE_MEM] = "mem", -+ [DRC_TYPE_PORT] = "port", -+ [DRC_TYPE_HIBERNATE] = "phib", -+ [DRC_TYPE_MIGRATION] = "pmig", -+ [DRC_TYPE_ACC] = "acc", -+}; -+ - /** - * set_output level - * @brief Common routine to set the output level -@@ -1521,35 +1536,12 @@ int do_kernel_dlpar_common(const char *cmd, int cmdlen, int silent_error) - - enum drc_type to_drc_type(const char *arg) - { -- if (!strncmp(arg, "pci", 3)) -- return DRC_TYPE_PCI; -- -- if (!strncmp(arg, "slot", 4)) -- return DRC_TYPE_SLOT; -- -- if (!strncmp(arg, "phb", 3)) -- return DRC_TYPE_PHB; -- -- if (!strncmp(arg, "cpu", 3)) -- return DRC_TYPE_CPU; -- -- if (!strncmp(arg, "mem", 3)) -- return DRC_TYPE_MEM; -+ enum drc_type i; - -- if (!strncmp(arg, "port", 4)) -- return DRC_TYPE_PORT; -- -- if (!strncmp(arg, "phib", 4)) -- return DRC_TYPE_HIBERNATE; -- -- if (!strncmp(arg, "pmig", 4)) -- return DRC_TYPE_MIGRATION; -- -- /* -- * Accelerator -- */ -- if (!strncmp(arg, "acc", 3)) -- return DRC_TYPE_ACC; -+ for (i = DRC_TYPE_NONE + 1; i < ARRAY_SIZE(drc_type_str); i++) { -+ if (!strcmp(arg, drc_type_str[i])) -+ return i; -+ } - - return DRC_TYPE_NONE; - } diff --git a/powerpc-utils-73ba26-lparstat-fix_negative_values.patch b/powerpc-utils-73ba26-lparstat-fix_negative_values.patch deleted file mode 100644 index 692a7fc..0000000 --- a/powerpc-utils-73ba26-lparstat-fix_negative_values.patch +++ /dev/null @@ -1,36 +0,0 @@ -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; diff --git a/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch b/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch deleted file mode 100644 index 1984187..0000000 --- a/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch +++ /dev/null @@ -1,120 +0,0 @@ -commit 7698adc945372e901c2bc3f7066a5a1c219bf1d8 -Author: Laurent Dufour -Date: Fri Sep 16 18:39:18 2022 +0200 - - drmgr: add the drmgr-hooks man file. - - This man page describe the various drmgr's hooks. - - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/Makefile.am b/Makefile.am -index ba7a3c5..5c0ca3c 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -48,6 +48,7 @@ man_MANS = \ - man/vcpustat.8 \ - man/rtas_dbg.8 \ - man/drmgr.8 \ -+ man/drmgr-hooks.8 \ - man/lparnumascore.8 - - EXTRA_DIST += $(bin_SCRIPTS) $(sbin_SCRIPTS) $(man_MANS) -diff --git a/man/drmgr-hooks.8 b/man/drmgr-hooks.8 -new file mode 100644 -index 0000000..621e4f0 ---- /dev/null -+++ b/man/drmgr-hooks.8 -@@ -0,0 +1,82 @@ -+.\" -+.\" Copyright (C) 2022 International Business Machines -+.\" -+.TH DRMGR-HOOKS 8 "May 24, 2022" Linux "Linux on Power Service Tools" -+.SH NAME -+drmgr\-hooks \- Hooks run by drmgr -+.SH DESCRIPTION -+When -+.B drmgr -+is run to perform PowerVM Dynamic Logical Partitioning (DLPAR) operations, -+a set of hooks may be triggered to validate, and, or be aware of the incoming operation. -+.P -+Not all the DLPAR operations are providing hook calls. -+Currently only the LPAR Migration operation (LPM) is concerned. -+.P -+The hooks are executable files stored in a directory named "DRC TYPE" in -+.IR /etc/drmgr.d/ . -+For instance, hooks run when a LPAR migration is done are stored in -+.IR /etc/drmgr.d/pmig . -+.P -+Hook files can be symbolic links to executable files. All the hooks can be stored in -+.IR /etc/drmgr.d -+and linked into multiple directories to provide multiple DRC type's hooks. -+.SH ARGUMENTS -+.P -+Hooks are called without any arguments but with at least these 2 environment variable set: -+.TP -+.BI "DRC_TYPE" -+The Dynamic reconfiguration connector type to act upon from the following list: -+.BR pmig ", " pci ", " cpu ", " mem ", " port ", " slot ", " phb "." -+.TP -+.BI "PHASE" -+The phase of the operation from the following list: -+.BR check ", " undocheck ", " pre ", " post "." -+.SH LPAR MIGRATION -+.P -+When a LPAR migration is initiated the -+.B check -+phase is first triggered. Hooks called at check phase may returned a non zero value to prevent the migration operation to happen. -+The error messages displayed in -+.BR STDOUT " or " STDERR -+would be reported to the end user through the HMC. -+.P -+If the -+.B check -+phase has failed, because at least one hook has returned a non null value, the -+.B undocheck -+phase is launched. Return value for the -+.B -+undocheck -+phase is ignored. -+.P -+If the -+.B check -+phase succeeded, the -+.BR pre " and later " post -+phases are triggered. Returned values for these 2 phases are ignored, and the -+.B post -+phase is triggered even if the LPM operation has failed. -+.SH ENVIRONMENT -+.P -+The drmgr's hooks are called while holding the DLPAR lock, so any other -+DLPAR operation initiated from a hook is expected to fail. -+.P -+The hooks standard input -+.B STDIN -+is redirected to -+.I /dev/null -+while STDOUT and STDERR are redirected to pipes. -+The outputs done in these pipes are reported to the end user when a hook has returned an error value and that error value is not ignored (e.g in the LPM, the -+.B check -+phase but not the -+.BR pre "or " post -+phase) -+.P -+Except the variables specified in the ARGUMENTS section, all the environment variables are unset before calling the hook. -+.SH FILES -+.IR /etc/drmgr.d/pmig/ -+.SH AUTHOR -+Laurent Dufour -+.SH SEE ALSO -+.BR drmgr (8) -diff --git a/man/drmgr.8 b/man/drmgr.8 -index 09944bd..f40136b 100644 ---- a/man/drmgr.8 -+++ b/man/drmgr.8 -@@ -158,3 +158,4 @@ was written by IBM Corporation - - .SH SEE ALSO - .BR lsslot "(8)" -+.BR drmgr-hooks "(8)" diff --git a/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch b/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch deleted file mode 100644 index 90eaa05..0000000 --- a/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit 8a7aa61c5f520df03e53e6f7e1d63b7d5c432376 -Author: Wen Xiong -Date: Wed Nov 15 14:37:43 2023 -0600 - - powerpc-utils/scripts/ofpathname: handle nsid of nvme device as hex number - - 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 - -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 diff --git a/powerpc-utils-b1b9e7-LMB_size_4GB.patch b/powerpc-utils-b1b9e7-LMB_size_4GB.patch deleted file mode 100644 index d700293..0000000 --- a/powerpc-utils-b1b9e7-LMB_size_4GB.patch +++ /dev/null @@ -1,98 +0,0 @@ -commit b1b9e76de0f3ab1dfcd9426779fa20fd77cd5625 -Author: Luciano Chavez -Date: Wed Aug 24 21:11:32 2022 -0500 - - lsslot: Fix lsslot -c mem output when using 4GB LMB size - - When using a LMB size of 4GB, the output of lsslot -c mem would get - reported incorrectly as: - - Dynamic Reconfiguration Memory (LMB size 0x0) - : - DRC Index: 80000001 Address: 100000000 - Removable: No Associativity: (index: 1) 0 1 4 9 - Section(s): - - This patch changes the declaration of the _node_u._smem._lmb_size from - a uint32_t to uint64_t to store the value properly. Any variables that - store the lmb_size are also declared as uint64_t. In addition, we - use the PRIx64 macro in printf statements to properly print the - lmb_size value. - - The patch also includes a necessary change to declare the global - variable block_sz_bytes as a uint64_t to fix an infinite loop in - the function get_mem_scns() when the above changes were introduced. - - Signed-off-by: Luciano Chavez - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/drmem.h b/src/drmgr/drmem.h -index db5a47f..48108c5 100644 ---- a/src/drmgr/drmem.h -+++ b/src/drmgr/drmem.h -@@ -58,7 +58,7 @@ struct drconf_mem_v2 { - #define LMB_REVERSE_SORT 1 - #define LMB_RANDOM_SORT 2 - --extern int block_sz_bytes; -+extern uint64_t block_sz_bytes; - - struct lmb_list_head *get_lmbs(unsigned int); - void free_lmbs(struct lmb_list_head *); -diff --git a/src/drmgr/drslot_chrp_mem.c b/src/drmgr/drslot_chrp_mem.c -index 3b78723..d37ee80 100644 ---- a/src/drmgr/drslot_chrp_mem.c -+++ b/src/drmgr/drslot_chrp_mem.c -@@ -33,7 +33,7 @@ - #include "drmem.h" - #include "common_numa.h" - --int block_sz_bytes = 0; -+uint64_t block_sz_bytes = 0; - static char *state_strs[] = {"offline", "online"}; - - static char *usagestr = "-c mem {-a | -r} {-q -p {variable_weight | ent_capacity} | {-q | -s [ | ]}}"; -@@ -118,7 +118,7 @@ free_lmbs(struct lmb_list_head *lmb_list) - static int - get_mem_scns(struct dr_node *lmb) - { -- uint32_t lmb_sz = lmb->lmb_size; -+ uint64_t lmb_sz = lmb->lmb_size; - uint64_t phys_addr = lmb->lmb_address; - uint32_t mem_scn; - int rc = 0; -diff --git a/src/drmgr/lsslot.c b/src/drmgr/lsslot.c -index 87f876e..83e9e85 100644 ---- a/src/drmgr/lsslot.c -+++ b/src/drmgr/lsslot.c -@@ -741,7 +741,7 @@ int print_drconf_mem(struct lmb_list_head *lmb_list) - if (usr_drc_name) - drc_index = strtol(usr_drc_name, NULL, 0); - -- printf("Dynamic Reconfiguration Memory (LMB size 0x%x)\n", -+ printf("Dynamic Reconfiguration Memory (LMB size 0x%"PRIx64")\n", - lmb_list->lmbs->lmb_size); - - for (lmb = lmb_list->lmbs; lmb; lmb = lmb->next) { -@@ -808,7 +808,7 @@ int lsslot_chrp_mem(void) - if (lmb_list->drconf_buf) { - print_drconf_mem(lmb_list); - } else { -- printf("lmb size: 0x%x\n", lmb_list->lmbs->lmb_size); -+ printf("lmb size: 0x%"PRIx64"\n", lmb_list->lmbs->lmb_size); - printf("%-20s %-5s %c %s\n", "Memory Node", "Name", 'R', - "Sections"); - printf("%-20s %-5s %c %s\n", "-----------", "----", '-', -diff --git a/src/drmgr/ofdt.h b/src/drmgr/ofdt.h -index 26c943a..bd90810 100644 ---- a/src/drmgr/ofdt.h -+++ b/src/drmgr/ofdt.h -@@ -94,7 +94,7 @@ struct dr_node { - union { - struct mem_info { - uint64_t _address; -- uint32_t _lmb_size; -+ uint64_t _lmb_size; - uint32_t _lmb_aa_index; - struct mem_scn *_mem_scns; - struct of_node *_of_node; diff --git a/powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch b/powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch deleted file mode 100644 index 40b41aa..0000000 --- a/powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch +++ /dev/null @@ -1,131 +0,0 @@ -commit c015807d5bef0ebdeaf99883793173f2b636e740 -Author: Wen Xiong -Date: Wed Jun 15 13:05:18 2022 -0500 - - bootlist: Add install/boot support for nvmf devices - - This patch adds the boot/installation support for nvme-over-fc devices. - It can set nvmf device as boot device in both of logical device name - and open firmware device path name. - - Signed-off-by: Wen Xiong - Signed-off-by: Tyrel Datwyler - -diff --git a/scripts/bootlist b/scripts/bootlist -index b5cfbd9..1929f65 100755 ---- a/scripts/bootlist -+++ b/scripts/bootlist -@@ -22,6 +22,7 @@ - - OFPATHNAME=/usr/sbin/ofpathname - NVRAM=/usr/sbin/nvram -+FIND=/usr/bin/find - PSERIES_PLATFORM=$(dirname $0)/pseries_platform - - # -@@ -288,6 +289,63 @@ dm_to_part() - done - } - -+# is_nvmf_device -+# Check to see if this is a nvmf device -+# -+is_nvmf_device() -+{ -+ local res -+ -+ res=`$FIND /sys/devices/virtual/nvme-fabrics -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. -+# -+get_link() -+{ -+ local ln_name=$1; -+ -+ echo `ls -l $ln_name 2>/dev/null | awk -F"->" '{print $2}'` -+} -+ -+add_nvmf() -+{ -+ local DEVNAME=$1 -+ -+ ctrl_name=$DEVNAME -+ local startctr=$ctr -+ -+ local dir -+ for dir in `$FIND /sys/devices/virtual/nvme-fabrics -name "$ctrl_name"`; do -+ cd $dir -+ link=`get_link "device"` -+ cd $link -+ for slave in $PWD/*; do -+ slavedev=${slave##*/} -+ if [[ "$slavedev" == nvme[0-9]* ]] ; then -+ cd $slave -+ res=`$FIND . -name "${ctrl_name}*"` -+ if [[ ${#res} != 0 ]]; then -+ LOGICAL_NAMES[$ctr]=${slavedev} -+ ctr=$[$ctr + 1] -+ fi -+ fi -+ done -+ done -+ -+ if [[ "$startctr" = "$ctr" ]] ; then -+ LOGICAL_NAMES[$ctr]=$1 -+ ctr=$[$ctr + 1] -+ fi -+} -+ - add_logical() - { - local DEVNAME=$1 -@@ -432,7 +490,30 @@ while [[ -n $1 ]]; do - exit -1 - else - # add this element to the array -- add_logical $1 -+ if [[ "$1" == *"dm-"* ]] ; then -+ add_logical $1 -+ else -+ if [[ "$1" == *"nvme-of"* ]]; then -+ ctrl_name=`get_logical_device_name $1` -+ else -+ ctrl_name=$1 -+ ctrl_name=${ctrl_name##*/} -+ 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 -+ namespace_base=${master_of_path##*/} -+ DEVTYPE="nvme-of" -+ add_nvmf $ctrl_name -+ else -+ add_logical $1 -+ fi -+ fi - fi - - shift -@@ -453,6 +534,9 @@ 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 -+ OF_DEVPATH[$ctr]=${OF_DEVPATH[$ctr]}/$namespace_base -+ fi - else - OF_DEVPATH[$ctr]=${LOGICAL_NAMES[$ctr]} - fi diff --git a/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch b/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch deleted file mode 100644 index 618cdc5..0000000 --- a/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch +++ /dev/null @@ -1,36 +0,0 @@ -commit c3ce3040ea9ed49345756136d61eb402e32402e8 -Author: Laurent Dufour -Date: Fri Sep 16 18:39:12 2022 +0200 - - drmgr/pmig: remove unused code - - The original system id is read but never used, so remove that useless code. - Remove also an unjustified sleep(5) call. - - Reviewed-by: Nathan Lynch - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/drmig_chrp_pmig.c b/src/drmgr/drmig_chrp_pmig.c -index 569eeb6..94cb49a 100644 ---- a/src/drmgr/drmig_chrp_pmig.c -+++ b/src/drmgr/drmig_chrp_pmig.c -@@ -695,7 +695,6 @@ void post_mobility_update(void) - int drmig_chrp_pmig(void) - { - int rc; -- char sys_src[20]; - uint64_t stream_val; - - /* Ensure that this partition is migratable/mobile */ -@@ -732,10 +731,6 @@ int drmig_chrp_pmig(void) - say(ERROR, "Invalid streamid specified: %s\n", strerror(errno)); - return -1; - } -- -- /* Get the ID of the original system, for later logging */ -- get_str_attribute(OFDT_BASE, "system-id", sys_src, 20); -- sleep(5); - - /* Now do the actual migration */ - do { diff --git a/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch b/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch deleted file mode 100644 index a195207..0000000 --- a/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch +++ /dev/null @@ -1,93 +0,0 @@ -commit d0bc79aedaf76eff09a5d1f399da09561a4d4d7d -Author: Laurent Dufour -Date: Fri Sep 16 18:39:17 2022 +0200 - - drmgr: introducing the LPM hooks - - There are 3 hooks run when an LPM is performed: - 1. check before the LPM is really initiated - 1 bis. undocheck if check failed. - 2. pre just before entering the switch over - 3. post at the end of the LPM operation - - Only the check hook's return status is taken in account. If the check hook - return value is different from 0, the LPM is aborted and the outputs of the - check hook are reported to the end user through the HMC. - - In the case at least one check hook returned a non zero status, the - undocheck event is run (for all the hooks), and the pre and post events are - not triggered. - - The post event is triggered even if the LPM operation has failed. - - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/drmig_chrp_pmig.c b/src/drmgr/drmig_chrp_pmig.c -index f78ff15..f169fa5 100644 ---- a/src/drmgr/drmig_chrp_pmig.c -+++ b/src/drmgr/drmig_chrp_pmig.c -@@ -691,11 +691,15 @@ void post_mobility_update(void) - devtree_update(); - } - } -- -+ - int drmig_chrp_pmig(void) - { - int rc; - uint64_t stream_val; -+ enum drc_type drc_type = DRC_TYPE_NONE; -+ -+ if (usr_action == MIGRATE) -+ drc_type = DRC_TYPE_MIGRATION; - - /* Ensure that this partition is migratable/mobile */ - if (! pmig_capable()) { -@@ -704,14 +708,11 @@ int drmig_chrp_pmig(void) - return -1; - } - -- /* Today we do no pre-checks for migratability. The only check -- * we could do is whether the "ibm,suspend-me" RTAS call exists. -- * But if it doesn't, the firmware level doesn't support migration, -- * in which case why the heck are we being invoked anyways. -- */ -- if (strcmp(usr_p_option, "check") == 0) { -- say(DEBUG, "check: Nothing to do...\n"); -- return 0; -+ if (usr_action == MIGRATE && (strcmp(usr_p_option, "check") == 0)) { -+ rc = run_hooks(drc_type, HOOK_CHECK); -+ if (rc) -+ run_hooks(drc_type, HOOK_UNDOCHECK); -+ return rc; - } - - /* The only other command is pre, any other command is invalid */ -@@ -734,6 +735,9 @@ int drmig_chrp_pmig(void) - - /* Now do the actual migration */ - do { -+ if (usr_action == MIGRATE) -+ run_hooks(drc_type, HOOK_PRE); -+ - if (usr_action == MIGRATE) - rc = do_migration(stream_val); - else if (usr_action == HIBERNATE) -@@ -748,10 +752,12 @@ int drmig_chrp_pmig(void) - - syslog(LOG_LOCAL0 | LOG_INFO, "drmgr: %s rc %d\n", - (usr_action == MIGRATE ? "migration" : "hibernation"), rc); -- if (rc) -- return rc; - -- post_mobility_update(); -+ if (!rc) -+ post_mobility_update(); - -- return 0; -+ /* Post hook is called even if the migration has failed */ -+ if (usr_action == MIGRATE) -+ run_hooks(drc_type, HOOK_POST); -+ return rc; - } diff --git a/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch b/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch deleted file mode 100644 index 64592a9..0000000 --- a/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch +++ /dev/null @@ -1,219 +0,0 @@ -commit e0928dc5e5375591a4cff6ffabc6063771288f59 -Author: Laurent Dufour -Date: Fri Sep 16 18:39:16 2022 +0200 - - drmgr: introducing the hook framework - - The hook framework run in a sequence any executable file found in the - relevant directory (/etc/drmgr.d//) - - The hook are run according to the versionsort()'s output order. - - The hook inherits from drmgr its standard I/O streams. All others file - descriptor should have the close on exec flag set to ensure they will be - closed when executing an hook. - - The hooks are run with no arguments, arguments are passed through - environment variable. - - The inherited environment is cleaned and 2 environment variables - are set: - - DRC_TYPE containing the DRC type string - - PHASE containing the current phase - - There are 4 known phases: check, undocheck, pre and post. - - The hook's run is recorded in the drmgr's log, so blocking hook could be - identified. - - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/common.c b/src/drmgr/common.c -index 12af756..9cd91d1 100644 ---- a/src/drmgr/common.c -+++ b/src/drmgr/common.c -@@ -49,6 +49,8 @@ char *remove_slot_fname = REMOVE_SLOT_FNAME; - - #define SYSFS_DLPAR_FILE "/sys/kernel/dlpar" - -+#define DR_SCRIPT_DIR "/etc/drmgr.d" -+ - static int dr_lock_fd = 0; - static long dr_timeout; - -@@ -67,6 +69,13 @@ static char *drc_type_str[] = { - [DRC_TYPE_ACC] = "acc", - }; - -+static char *hook_phase_name[] = { -+ [HOOK_CHECK] = "check", -+ [HOOK_UNDOCHECK] = "undocheck", -+ [HOOK_PRE] = "pre", -+ [HOOK_POST] = "post", -+}; -+ - /** - * set_output level - * @brief Common routine to set the output level -@@ -1546,3 +1555,138 @@ enum drc_type to_drc_type(const char *arg) - return DRC_TYPE_NONE; - } - -+static int run_one_hook(enum drc_type drc_type, enum hook_phase phase, -+ const char *name) -+{ -+ int rc; -+ pid_t child; -+ -+ fflush(NULL); -+ child = fork(); -+ if (child == -1) { -+ say(ERROR, "Can't fork to run a hook: %s\n", strerror(errno)); -+ return -1; -+ } -+ -+ if (child) { -+ /* Father side */ -+ while (waitpid(child, &rc, 0) == -1) { -+ if (errno == EINTR) -+ continue; -+ say(ERROR, "waitpid error: %s\n", strerror(errno)); -+ return -1; -+ } -+ -+ if (WIFSIGNALED(rc)) { -+ say(INFO, "hook '%s' terminated by signal %d\n", -+ name, WTERMSIG(rc)); -+ rc = 1; -+ } else { -+ rc = WEXITSTATUS(rc); -+ say(INFO, "hook '%s' exited with status %d\n", -+ name, rc); -+ } -+ return rc; -+ } -+ -+ -+ /* Child side */ -+ say(DEBUG, "Running hook '%s' for phase %s (PID=%d)\n", -+ name, hook_phase_name[phase], getpid()); -+ -+ if (chdir("/")) { -+ say(ERROR, "Can't change working directory to / : %s\n", -+ strerror(errno)); -+ exit(255); -+ } -+ -+ if (clearenv() || -+ setenv("DRC_TYPE", drc_type_str[drc_type], 1) || -+ setenv("PHASE", hook_phase_name[phase], 1)) { -+ say(ERROR, "Can't set environment variables: %s\n", -+ strerror(errno)); -+ exit(255); -+ } -+ -+ execl(name, name, (char *)NULL); -+ say(ERROR, "Can't exec hook %s : %s\n", strerror(errno)); -+ exit(255); -+} -+ -+static int is_file_or_link(const struct dirent *entry) -+{ -+ if ((entry->d_type == DT_REG) || (entry->d_type == DT_LNK)) -+ return 1; -+ return 0; -+} -+ -+/* -+ * Run all executable hooks found in a given directory. -+ * Return 0 if all run script have returned 0 status. -+ */ -+int run_hooks(enum drc_type drc_type, enum hook_phase phase) -+{ -+ int rc = 0, fdd, num, i; -+ DIR *dir; -+ struct dirent **entries = NULL; -+ -+ /* Sanity check */ -+ if (drc_type <= DRC_TYPE_NONE || drc_type >= ARRAY_SIZE(drc_type_str)) { -+ say(ERROR, "Invalid DRC TYPE detected (%d)\n", drc_type); -+ return -1; -+ } -+ -+ if (phase < HOOK_CHECK || phase > HOOK_POST) { -+ say(ERROR, "Invalid hook phase %d\n", phase); -+ return -1; -+ } -+ -+ dir = opendir(DR_SCRIPT_DIR); -+ if (dir == NULL) { -+ if (errno == ENOENT) -+ return 0; -+ say(ERROR, "Can't open %s: %s\n", DR_SCRIPT_DIR, -+ strerror(errno)); -+ return -1; -+ } -+ -+ fdd = dirfd(dir); -+ num = scandirat(fdd, drc_type_str[drc_type], &entries, -+ is_file_or_link, versionsort); -+ closedir(dir); -+ -+ for (i = 0; i < num; i++) { -+ struct stat st; -+ struct dirent *entry = entries[i]; -+ char *name; -+ -+ if (asprintf(&name, "%s/%s/%s", DR_SCRIPT_DIR, -+ drc_type_str[drc_type], entry->d_name) == -1) { -+ say(ERROR, -+ "Can't allocate filename string (%zd bytes)\n", -+ strlen(DR_SCRIPT_DIR) + 1 + -+ strlen(drc_type_str[drc_type]) + 1 + -+ strlen(entry->d_name) + 1); -+ rc = 1; -+ free(entry); -+ continue; -+ } -+ -+ /* -+ * Report error only in the case the hook itself fails. -+ * Any other error (file is not executable etc.) is ignored. -+ */ -+ if (stat(name, &st)) -+ say(WARN, "Can't stat file %s: %s\n", -+ name, strerror(errno)); -+ else if (S_ISREG(st.st_mode) && (st.st_mode & S_IXUSR) && -+ run_one_hook(drc_type, phase, name)) -+ rc = 1; -+ -+ free(name); -+ free(entry); -+ } -+ -+ free(entries); -+ return rc; -+} -diff --git a/src/drmgr/dr.h b/src/drmgr/dr.h -index 58fdb5c..5526c29 100644 ---- a/src/drmgr/dr.h -+++ b/src/drmgr/dr.h -@@ -70,6 +70,8 @@ enum drc_type {DRC_TYPE_NONE, DRC_TYPE_PCI, DRC_TYPE_SLOT, DRC_TYPE_PHB, - DRC_TYPE_CPU, DRC_TYPE_MEM, DRC_TYPE_PORT, - DRC_TYPE_HIBERNATE, DRC_TYPE_MIGRATION, DRC_TYPE_ACC}; - -+enum hook_phase {HOOK_CHECK, HOOK_UNDOCHECK, HOOK_PRE, HOOK_POST}; -+ - extern enum drmgr_action usr_action; - extern int display_capabilities; - extern int usr_slot_identification; -@@ -133,6 +135,8 @@ void print_dlpar_capabilities(void); - - void set_output_level(int); - -+int run_hooks(enum drc_type drc_type, enum hook_phase phase); -+ - #define DR_BUF_SZ 256 - - int drslot_chrp_slot(void); diff --git a/powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch b/powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch deleted file mode 100644 index 6aedbcc..0000000 --- a/powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch +++ /dev/null @@ -1,29 +0,0 @@ -commit e1f1deb06d9168a95a381a2236e1d8c693d3d229 -Author: Luciano Chavez -Date: Wed Aug 24 21:17:54 2022 -0500 - - lsslot: Explicity declare that lmb_address be displayed in hexadecimal - - A printf statement used is lsslot.c was specifying the macro PRIu64 to - display the lmb_address. Depending on the compilation, this would - either display as a hexadecimal or decimal value. - - This patch replaces PRIu64 with PRIx64 to explicitly declare to print - the value as hexadecimal as that was is normally expected of an address. - - Signed-off-by: Luciano Chavez - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/lsslot.c b/src/drmgr/lsslot.c -index 7ea0f8b..87f876e 100644 ---- a/src/drmgr/lsslot.c -+++ b/src/drmgr/lsslot.c -@@ -756,7 +756,7 @@ int print_drconf_mem(struct lmb_list_head *lmb_list) - printf("%s: %s\n", lmb->drc_name, - lmb->is_owned ? "" : "Not Owned"); - -- printf(" DRC Index: %x Address: %"PRIu64"\n", -+ printf(" DRC Index: %x Address: %"PRIx64"\n", - lmb->drc_index, lmb->lmb_address); - printf(" Removable: %s Associativity: ", - lmb->is_removable ? "Yes" : "No "); diff --git a/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch b/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch deleted file mode 100644 index dc5e1aa..0000000 --- a/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit f2a4619ef6be747f53e5f631f8b23b5edb9bb023 -Author: Laurent Dufour -Date: Fri Sep 16 18:39:14 2022 +0200 - - drmgr: prevent file descriptor to be inherited when execing a child - - When a file descriptor is opened and remain opened, the O_CLOEXEC should be - set so execed children are not inheriting it. - - There is no need for file descriptor opened and closed immediately, like in - probe_cpu(). - - Reviewed-by: Nathan Lynch - Signed-off-by: Laurent Dufour - Signed-off-by: Tyrel Datwyler - -diff --git a/src/drmgr/common.c b/src/drmgr/common.c -index 393a997..622cfaf 100644 ---- a/src/drmgr/common.c -+++ b/src/drmgr/common.c -@@ -174,7 +174,7 @@ inline int dr_init(void) - } - - -- log_fd = open(DR_LOG_PATH, O_RDWR | O_CREAT | O_APPEND, -+ log_fd = open(DR_LOG_PATH, O_RDWR | O_CREAT | O_APPEND | O_CLOEXEC, - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (log_fd == -1) { - log_fd = 0; -@@ -314,7 +314,7 @@ int dr_lock(void) - mode_t old_mode; - - old_mode = umask(0); -- dr_lock_fd = open(DR_LOCK_FILE, O_RDWR | O_CREAT, -+ dr_lock_fd = open(DR_LOCK_FILE, O_RDWR | O_CREAT | O_CLOEXEC, - S_IRUSR | S_IRGRP | S_IROTH); - if (dr_lock_fd < 0) - return -1; -@@ -1496,7 +1496,7 @@ int do_kernel_dlpar_common(const char *cmd, int cmdlen, int silent_error) - - /* write to file */ - if (fd == -1) { -- fd = open(SYSFS_DLPAR_FILE, O_WRONLY); -+ fd = open(SYSFS_DLPAR_FILE, O_WRONLY | O_CLOEXEC); - if (fd < 0) { - say(ERROR, - "Could not open %s to initiate DLPAR request\n", diff --git a/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch b/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch deleted file mode 100644 index 5920886..0000000 --- a/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/src/lparstat.c b/src/lparstat.c -index 0b30fc9..e998e8c 100644 ---- a/src/lparstat.c -+++ b/src/lparstat.c -@@ -718,6 +718,16 @@ void get_capped_mode(struct sysentry *se, char *buf) - sprintf(buf, "%s", value); - } - -+void get_dedicated_mode(struct sysentry *se, char *buf) -+{ -+ const char *value = "Capped"; -+ -+ if (se->value[0] == '1') -+ value = "Donating"; -+ -+ sprintf(buf, "%s", value); -+} -+ - void get_percent_entry(struct sysentry *se, char *buf) - { - float value; -@@ -1057,7 +1067,10 @@ void print_system_configuration(void) - get_sysdata("shared_processor_mode", &descr, value); - offset = sprintf(buf, "type=%s ", value); - sprintf(type, "%s", value); -- get_sysdata("capped", &descr, value); -+ if (!strcmp(value, "Dedicated")) -+ get_sysdata("DedDonMode", &descr, value); -+ else -+ get_sysdata("capped", &descr, value); - offset += sprintf(buf + offset, "mode=%s ", value); - get_sysdata("smt_state", &descr, value); - offset += sprintf(buf + offset, "smt=%s ", value); -diff --git a/src/lparstat.h b/src/lparstat.h -index 26ed4ba..b7c88e9 100644 ---- a/src/lparstat.h -+++ b/src/lparstat.h -@@ -47,6 +47,7 @@ typedef struct cpu_sysfs_file_desc cpu_sysfs_fd; - - extern void get_smt_state(struct sysentry *, char *); - extern void get_capped_mode(struct sysentry *, char *); -+extern void get_dedicated_mode(struct sysentry *, char *); - extern void get_memory_mode(struct sysentry *, char *); - extern void get_percent_entry(struct sysentry *, char *); - extern void get_phys_cpu_percentage(struct sysentry *, char *); -@@ -110,7 +111,8 @@ struct sysentry system_data[] = { - {.name = "DesVarCapWt", - .descr = "Desired Variable Capacity Weight"}, - {.name = "DedDonMode", -- .descr = "Dedicated Donation Mode"}, -+ .descr = "Dedicated Donation Mode", -+ .get = &get_dedicated_mode}, - {.name = "partition_entitled_capacity", - .descr = "Partition Entitled Capacity"}, - {.name = "system_active_processors", diff --git a/powerpc-utils-fix_setting_primary_slave_across_reboots.patch b/powerpc-utils-fix_setting_primary_slave_across_reboots.patch deleted file mode 100644 index 8d22fc3..0000000 --- a/powerpc-utils-fix_setting_primary_slave_across_reboots.patch +++ /dev/null @@ -1,27 +0,0 @@ -commit acaf9c45a340f9bb49d6b21ba7ad60c21326ea73 -Author: Mingming Cao -Date: Mon Nov 7 14:39:02 2022 -0800 - - hcnmgr: Fix setting primary slave across reboots - - Using nmcli to set bonding of primary slave so that is set correctly - across reboots. - - Signed-off-by: Mingming Cao - [tyreld: Reworded commit log] - Signed-off-by: Tyrel Datwyler - -diff --git a/scripts/hcnmgr b/scripts/hcnmgr -index 6946ff9..b5a6bfb 100644 ---- a/scripts/hcnmgr -+++ b/scripts/hcnmgr -@@ -375,7 +375,8 @@ do_config_vdevice_nm() { - # if the device is primary, and link is up, force it as primary se - if [[ $MODE == "primary" ]]; then - hcnlog INFO "Change bonding primary slave to $DEVNAME" -- echo "$DEVNAME" >"$BOND_PATH"/primary -+ nmcli con mod id "$BONDNAME" +bond.options "primary=$DEVNAME" -+ nmcli con up "$BONDNAME" - fi - - hcnlog DEBUG "do_config_vdevice: exit" diff --git a/powerpc-utils-git04e5c9-handle_nsid_as_hex.patch b/powerpc-utils-git04e5c9-handle_nsid_as_hex.patch deleted file mode 100644 index 1cc2c9d..0000000 --- a/powerpc-utils-git04e5c9-handle_nsid_as_hex.patch +++ /dev/null @@ -1,40 +0,0 @@ -commit 04e5c9646296e1f12048723bba4cee663c3f74ed -Author: Wen Xiong -Date: Thu Dec 1 05:22:37 2022 -0600 - - ofpathname: Handle nsid as hex in nvmf boot/install support - - Didn't handle nsid correctly in nvmf boot/install support. - Need to handle it as hexadecimal number - - For example, - /pci@800000020000132/fibre-channel@0,1/nvme-of/controller@50050768101935e5,ffff - :nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@26c - - 26c should be a hexadecimal number. - - Signed-off-by: Wen Xiong - Signed-off-by: Tyrel Datwyler - -diff --git a/scripts/ofpathname b/scripts/ofpathname -index c576fb8..3abe4d1 100755 ---- a/scripts/ofpathname -+++ b/scripts/ofpathname -@@ -809,7 +809,7 @@ l2of_nvmf() - else - goto_dir $res - devnsid=`$CAT $PWD/nsid | tr -d '\000'` -- devnsid=`echo "obase=16; $devnsid" |bc` -+ devnsid=$(printf "%x" $devnsid) - OF_PATH="$OF_PATH/namespace@$devnsid" - fi - fi -@@ -1886,7 +1886,7 @@ of2l_nvmf() - for dev_name in `$FIND /sys/block -name "${ana_name##*/}n[0-9]*"`; do - cd $dev_name - local devnsid=`$CAT ./nsid 2>/dev/null` -- devnsid=`echo "obase=16; $devnsid" |bc` -+ devnsid=$(printf "%x" $devnsid) - if [[ $devnsid = $nsid ]]; then - found=1 - NS_ID="${dev_name##*n}" diff --git a/powerpc-utils-git3847a1-support_multiple_dev_paths_for_a_nvmf_boot_device.patch b/powerpc-utils-git3847a1-support_multiple_dev_paths_for_a_nvmf_boot_device.patch deleted file mode 100644 index 7567453..0000000 --- a/powerpc-utils-git3847a1-support_multiple_dev_paths_for_a_nvmf_boot_device.patch +++ /dev/null @@ -1,118 +0,0 @@ -commit 3847a1c25a640394c4afd2b8938ad21190bf5dbe -Author: Wen Xiong -Date: Fri Oct 28 09:20:38 2022 -0500 - - Support multiple dev paths for a nvmf boot device - - This patch adds the support for multiple dev/of paths with a nvmf boot dev - - # bootlist -m normal -o nvme1n4 - nvme1n4 - nvme3n4 - nvme5n4 - nvme6n4 - # bootlist -m normal -o - nvme1n4 - nvme3n4 - nvme5n4 - nvme6n4 - # bootlist -m normal -r - /pci@800000020000017/fibre-channel@0/nvme-of/controller@50050768101935e5,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147 - /pci@800000020000017/fibre-channel@0/nvme-of/controller@5005076810193675,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147 - /pci@800000020000017/fibre-channel@0,1/nvme-of/controller@5005076810193675,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147 - /pci@800000020000017/fibre-channel@0,1/nvme-of/controller@50050768101935e5,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147 - - Signed-off-by: Wen Xiong - Signed-off-by: Tyrel Datwyler - -diff --git a/scripts/bootlist b/scripts/bootlist -index 1929f65..cc8718e 100755 ---- a/scripts/bootlist -+++ b/scripts/bootlist -@@ -327,16 +327,10 @@ add_nvmf() - cd $dir - link=`get_link "device"` - cd $link -- for slave in $PWD/*; do -- slavedev=${slave##*/} -- if [[ "$slavedev" == nvme[0-9]* ]] ; then -- cd $slave -- res=`$FIND . -name "${ctrl_name}*"` -- if [[ ${#res} != 0 ]]; then -- LOGICAL_NAMES[$ctr]=${slavedev} -- ctr=$[$ctr + 1] -- fi -- fi -+ for slave in `ls -d $PWD/nvme*`; do -+ slavedev=${slave##*/} -+ LOGICAL_NAMES[$ctr]=${slavedev} -+ ctr=$[$ctr + 1] - done - done - -@@ -502,11 +496,17 @@ while [[ -n $1 ]]; do - 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 [[ "$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 -diff --git a/scripts/ofpathname b/scripts/ofpathname -index 33d7702..c576fb8 100755 ---- a/scripts/ofpathname -+++ b/scripts/ofpathname -@@ -1875,19 +1875,28 @@ of2l_nvmf() - fi - done - -+ local ana_dir - if [[ -n $LOGICAL_DEVNAME ]] && \ - [[ -n $nsid ]]; then -- for dir in `$FIND /sys/block -name "${LOGICAL_DEVNAME}n[0-9]*"`; do -- cd $dir -- -- local devnsid=`$CAT ./nsid 2>/dev/null` -- devnsid=`echo "obase=16; $devnsid" |bc` -- if [[ $devnsid = $nsid ]]; then -- found=1 -- LOGICAL_DEVNAME="${dir##*/}" -- break -- fi -+ for ana_dir in `$FIND /sys/devices/virtual/nvme-fabrics -name "$LOGICAL_DEVNAME"`; do -+ cd $ana_dir -+ link=`get_link "device"` -+ cd $link -+ for ana_name in `ls -d $PWD/nvme*`; do -+ for dev_name in `$FIND /sys/block -name "${ana_name##*/}n[0-9]*"`; do -+ cd $dev_name -+ local devnsid=`$CAT ./nsid 2>/dev/null` -+ devnsid=`echo "obase=16; $devnsid" |bc` -+ if [[ $devnsid = $nsid ]]; then -+ found=1 -+ NS_ID="${dev_name##*n}" -+ LOGICAL_DEVNAME="${LOGICAL_DEVNAME}n${NS_ID}" -+ break -+ fi -+ done -+ done - done -+ - if [[ $found -eq 0 ]]; then - LOGICAL_DEVNAME="" - fi diff --git a/powerpc-utils-rtas_dbg_return_negativ_value.patch b/powerpc-utils-rtas_dbg_return_negativ_value.patch deleted file mode 100644 index e665c37..0000000 --- a/powerpc-utils-rtas_dbg_return_negativ_value.patch +++ /dev/null @@ -1,70 +0,0 @@ -commit 9caa77e4477a73064a6deea253fd3faea32648fb -Author: Likhitha Korrapati -Date: Fri Nov 17 01:42:29 2023 -0500 - - 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 - -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); - diff --git a/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch b/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch deleted file mode 100644 index 531aaf2..0000000 --- a/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch +++ /dev/null @@ -1,65 +0,0 @@ -commit 46c524be975a108d2b8d1cadb95003b9c2670c8e -Author: Laurent Dufour -Date: Thu Jun 29 16:41:37 2023 +0200 - - ppc64_cpu: Support partial SMT level through SYS FS smt/control files - - The next kernel release will support partial SMT level [1] though the SYS - FS file "devices/system/cpu/smt/control". This allows the SMT level to be - recorded in the kernel. With the current SMT level stored in the kernel, - when a new CPU is added, only the necessary threads are brought online. - - The legacy way to active threads through the SYS FS files - 'devices/system/cpu/cpu/online', is still used in the case the new SYS - FS API is not available. This allows compatibility with the previous kernel - versions. - - [1] https://lore.kernel.org/linuxppc-dev/20230705145143.40545-1-ldufour@linux.ibm.com/ - - Signed-off-by: Laurent Dufour - -diff --git a/src/ppc64_cpu.c b/src/ppc64_cpu.c -index 5fdf86a..c33a293 100644 ---- a/src/ppc64_cpu.c -+++ b/src/ppc64_cpu.c -@@ -56,6 +56,8 @@ - #define DIAGNOSTICS_RUN_MODE 42 - #define CPU_OFFLINE -1 - -+#define SYS_SMT_CONTROL "/sys/devices/system/cpu/smt/control" -+ - #ifdef HAVE_LINUX_PERF_EVENT_H - struct cpu_freq { - int offline; -@@ -360,6 +362,20 @@ static int is_dscr_capable(void) - return 0; - } - -+/* -+ * Depends on kernel's CONFIG_HOTPLUG_CPU -+ */ -+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; -+ } -+ return 0; -+} -+ - static int do_smt(char *state, bool numeric) - { - int rc = 0; -@@ -388,7 +404,9 @@ static int do_smt(char *state, bool numeric) - return -1; - } - -- rc = set_smt_state(smt_state); -+ /* Try using smt/control if failing, fall back to the legacy way */ -+ if (set_smt_control(smt_state)) -+ rc = set_smt_state(smt_state); - } - - return rc; diff --git a/powerpc-utils.spec b/powerpc-utils.spec index 371c29a..f46d8c9 100644 --- a/powerpc-utils.spec +++ b/powerpc-utils.spec @@ -1,68 +1,15 @@ Name: powerpc-utils -Version: 1.3.10 -Release: 11%{?dist} +Version: 1.3.13 +Release: 1%{?dist} Summary: PERL-based scripts for maintaining and servicing PowerPC systems License: GPLv2 URL: https://github.com/ibm-power-utilities/powerpc-utils Source0: https://github.com/ibm-power-utilities/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz Source1: nx-gzip.udev - Patch0: powerpc-utils-1.3.10-manpages.patch -Patch1: powerpc-utils-1.3.10-distro.patch -# bz#2121470, Fix lsslot -c mem output when using 4GB LMB size -Patch3: powerpc-utils-b1b9e7-LMB_size_4GB.patch -Patch4: powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch - -# bz#2110129, Add NVMf-FC boot support for Power - powerpc-utils -Patch5: powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch -Patch6: powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch -Patch7: powerpc-utils-git3847a1-support_multiple_dev_paths_for_a_nvmf_boot_device.patch -Patch8: powerpc-utils-git04e5c9-handle_nsid_as_hex.patch -Patch9: powerpc-utils-fix_setting_primary_slave_across_reboots.patch - -# lparstat: Fix display of mode for dedicated-donating partition -Patch10: powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch - -# lparstat: Fix negative values seen while running lparstat with -E option -Patch11: powerpc-utils-73ba26-lparstat-fix_negative_values.patch - -# report-mixed-SMT-state -Patch12: powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch - -# Fix-offline-threads-uninitialized-entries -Patch13: powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch - -# ppc64_cpu: Support partial SMT level through SYS FS smt/control files -Patch14: powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch - -# new hook mechanism has been introduced in powerpc-utils allowing application to be aware of the ongoing LPM -patch15: powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch -patch16: powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch -Patch17: powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch -Patch18: powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch -Patch19: powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch -Patch20: powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch -Patch21: powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch - -# lpar can't boot up after installation if nsid of nvme device is greater than 10. -Patch22: powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch - -# rtas_dbg -l returns large negativ value -Patch23: powerpc-utils-rtas_dbg_return_negativ_value.patch - -# Support multiple dev paths for a nvme boot device -Patch24: 0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch - -# segault when running nvram --print-config -Patch25: powerpc-utils-1.3.10-nvram-print-config-crash.patch - -# segault when running nvram --nvram-size 268435456 -Patch26: powerpc-utils-1.3.10-nvram-size-crash.patch - -# nvram help page and man page are not in sync -Patch27: powerpc-utils-1.3.10-nvram-manpage.patch +# upstream patches ExclusiveArch: ppc %{power64} @@ -115,10 +62,9 @@ Core utilities for maintaining and servicing PowerPC systems. %autosetup -p1 %build -export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" ./autogen.sh %configure --with-systemd=%{_unitdir} --disable-werror -make %{?_smp_mflags} +make %{?_smp_mflags} V=1 %install @@ -152,6 +98,13 @@ rm -f $RPM_BUILD_ROOT%{_sbindir}/snap $RPM_BUILD_ROOT%{_mandir}/man8/snap.8* # add hierachy /etc/drmgr.d/pmig mkdir -p $RPM_BUILD_ROOT/etc/drmgr.d/pmig +# drop needless stuffs +rm -rf $RPM_BUILD_ROOT%{_prefix}/lib/powerpc-utils \ + $RPM_BUILD_ROOT%{_unitdir}/hcn-init-wicked.service + +# keep service name +mv $RPM_BUILD_ROOT%{_unitdir}/hcn-init-NetworkManager.service $RPM_BUILD_ROOT%{_unitdir}/hcn-init.service + %post core %systemd_post hcn-init.service # update the smt.state file with current SMT @@ -177,6 +130,7 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || : %{_mandir}/man8/rtas_dump.8* %files core +%doc README Changelog %license COPYING %dir %{_localstatedir}/lib/powerpc-utils %dir /etc/drmgr.d/pmig @@ -257,6 +211,10 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || : %changelog +* Tue Dec 03 2024 Than Ngo - 1.3.13-1 +- Resolves: RHEL-30880, multipath - drmgr support +- Resolces: RHEL-61089, lparstat -E Fails to Display Correct Values for %Busy and %Idle States + * Sat Jun 29 2024 Than Ngo - 1.3.10-11 - Resolves: RHEL-23620, nvram help page and man page are not in sync - Resolves: RHEL-23619, segault when running nvram --nvram-size 268435456 diff --git a/sources b/sources index f16488b..071785a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (powerpc-utils-1.3.10.tar.gz) = 37b09268e9ce9041e7f823423f7517d5837625ebe33c28b9dcd8902580718327df0a835a1cf7f2659ef3e0b637f2bd008153114ea146996f3b1b97d6c078b46e +SHA512 (powerpc-utils-1.3.13.tar.gz) = 81fe5588e7330cb0bac81b7106c9949e364fe0b11cc1739a4074fee54c01c363ed8af05488152c9527c56ba053c11278c6b1a2340b2e088a6f25521965e4fc62