From c3edfab1355b9a36357b85893ca9b67b9da40338 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Wed, 15 May 2024 08:38:46 +0000 Subject: [PATCH] Import from AlmaLinux stable repository --- ...-Support-multiple-dev-paths-for-a-nv.patch | 171 ++++++ ...ffline-threads-uninitialized-entries.patch | 46 ++ ...3.10-lparstat-report-mixed-SMT-state.patch | 93 +++ SOURCES/powerpc-utils-1.3.10-manpages.patch | 572 +++++++++--------- ...6f8ab7c27095be90eb2e69ae57e8b43eccbe.patch | 34 ++ ...99ed28d65a79d4c3b3405a8e04034eb58e09.patch | 79 +++ ...-73ba26-lparstat-fix_negative_values.patch | 36 ++ ...adc945372e901c2bc3f7066a5a1c219bf1d8.patch | 120 ++++ ...a61c5f520df03e53e6f7e1d63b7d5c432376.patch | 33 + ...3040ea9ed49345756136d61eb402e32402e8.patch | 36 ++ ...79aedaf76eff09a5d1f399da09561a4d4d7d.patch | 93 +++ ...8dc5e5375591a4cff6ffabc6063771288f59.patch | 219 +++++++ ...619ef6be747f53e5f631f8b23b5edb9bb023.patch | 47 ++ ...ode_for_dedicated_donating_partition.patch | 55 ++ ...-utils-rtas_dbg_return_negativ_value.patch | 70 +++ ...ort_partial_SMT_level_through_SYS_FS.patch | 65 ++ SPECS/powerpc-utils.spec | 119 +++- 17 files changed, 1571 insertions(+), 317 deletions(-) create mode 100644 SOURCES/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch create mode 100644 SOURCES/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch create mode 100644 SOURCES/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch create mode 100644 SOURCES/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch create mode 100644 SOURCES/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch create mode 100644 SOURCES/powerpc-utils-73ba26-lparstat-fix_negative_values.patch create mode 100644 SOURCES/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch create mode 100644 SOURCES/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch create mode 100644 SOURCES/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch create mode 100644 SOURCES/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch create mode 100644 SOURCES/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch create mode 100644 SOURCES/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch create mode 100644 SOURCES/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch create mode 100644 SOURCES/powerpc-utils-rtas_dbg_return_negativ_value.patch create mode 100644 SOURCES/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch diff --git a/SOURCES/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch b/SOURCES/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch new file mode 100644 index 0000000..428edc6 --- /dev/null +++ b/SOURCES/0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch @@ -0,0 +1,171 @@ +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/SOURCES/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch b/SOURCES/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch new file mode 100644 index 0000000..0d1ec77 --- /dev/null +++ b/SOURCES/powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch @@ -0,0 +1,46 @@ +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/SOURCES/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch b/SOURCES/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch new file mode 100644 index 0000000..d7717dc --- /dev/null +++ b/SOURCES/powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch @@ -0,0 +1,93 @@ +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/SOURCES/powerpc-utils-1.3.10-manpages.patch b/SOURCES/powerpc-utils-1.3.10-manpages.patch index 29dba7e..75b45b4 100644 --- a/SOURCES/powerpc-utils-1.3.10-manpages.patch +++ b/SOURCES/powerpc-utils-1.3.10-manpages.patch @@ -1,265 +1,26 @@ -diff -up powerpc-utils-1.3.5/man/pseries_platform.8.me powerpc-utils-1.3.5/man/pseries_platform.8 ---- powerpc-utils-1.3.5/man/pseries_platform.8.me 2018-11-29 16:50:07.601034729 +0100 -+++ powerpc-utils-1.3.5/man/pseries_platform.8 2018-11-29 16:50:07.601034729 +0100 -@@ -0,0 +1,11 @@ -+.\" -+.\" Copyright (C) 2015 International Business Machines -+.\" -+.TH pseries_platform 8 "September 2015" Linux "Linux on Power Service Tools" -+.SH NAME -+pseries_platform \- identify the platform and display the name of platform -+.SH SYNOPSIS -+.B /usr/bin/pseries_platform -+ -+.SH DESCRIPTION -+The \fIpseries_platform\fR tool can identify the platform and display the name of platform. -diff -up powerpc-utils-1.2.15/man/lsdevinfo.8.man powerpc-utils-1.2.15/man/lsdevinfo.8 ---- powerpc-utils-1.2.15/man/lsdevinfo.8.man 2013-01-16 15:31:13.886591137 +0100 -+++ powerpc-utils-1.2.15/man/lsdevinfo.8 2013-01-16 15:31:13.886591137 +0100 -@@ -0,0 +1,39 @@ -+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. -+.TH LSDEVINFO "8" "October 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+lsdevinfo - information on Virtual devices -+ -+.SH SYNOPSIS -+.B lsdevinfo -+[\fI-q criteria\fR] [\fI-F format\fR] [\fI-R\fR] [\fI-c\fR] [\fI-h\fR] -+ -+.SH DESCRIPTION -+Provide information on Virtual devices -+.PP -+ -+.SH OPTIONS -+.TP -+\fB\-q\fR criteria -+Specifies a criteria to select which devices are to be displayed. -+.TP -+\fB\-F\fR format -+Specifies the set of attributes to be displayed. -+.TP -+\fB\-R\fR -+Recursively display children of selected devices -+.TP -+\fB\-c\fR -+Display output as a comma separated list for each device. -+.TP -+\fB\-V\fR -+Display version information and exit -+.TP -+\fB\-h\fR -+Display help information and exit -+ -+.SH AUTHOR -+.B lsdevinfo -+was written by Santiago Leon . -+.PP -+This manual page was written by Roman Rakus . -+ -diff -up powerpc-utils-1.2.15/man/lsprop.8.man powerpc-utils-1.2.15/man/lsprop.8 ---- powerpc-utils-1.2.15/man/lsprop.8.man 2013-01-16 15:31:13.886591137 +0100 -+++ powerpc-utils-1.2.15/man/lsprop.8 2013-01-16 15:31:13.886591137 +0100 -@@ -0,0 +1,42 @@ -+.TH LSPROP "8" "Sep 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+lsprop \- list properties -+.SH SYNOPSIS -+.B lsprop -+.RB [ \-R ] -+.RB [ \-m -+.IR max-bytes ] -+.RB [ \-w -+.IR num-words ] -+.RI [ FILE .\|.\|.] -+.SH OVERVIEW -+.B lsprop -+program is a member of the ppc64-utils suite of utils. -+Use it to list properties -+ -+.SH DESCRIPTION -+.B lsprop -+displays properties for -+.IR FILE s -+like Open Firmware -+.I .properties -+word. -+If the -+.I FILE -+is not set, the current directory is used. -+ -+.SH OPTIONS -+.TP -+.B \-R -+Process recursively -+.TP -+.BI \-m " max-bytes" -+Read only first -+.I max-bytes -+bytes from the -+.IR FILE s -+.TP -+.BI \-w " num-words" -+Display up to -+.I num-words -+words per line -diff -up powerpc-utils-1.2.15/man/ls-vdev.8.man powerpc-utils-1.2.15/man/ls-vdev.8 ---- powerpc-utils-1.2.15/man/ls-vdev.8.man 2013-01-16 15:31:13.886591137 +0100 -+++ powerpc-utils-1.2.15/man/ls-vdev.8 2013-01-16 15:31:13.886591137 +0100 -@@ -0,0 +1,25 @@ -+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. -+.TH LS-VDEV "8" "October 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+ls-vdev \- information on Virtual SCSI adapters and devices -+.SH SYNOPSIS -+.BR ls-vdev " [" \-h " | " -V ] -+ -+.SH DESCRIPTION -+Provide information on Virtual SCSI adapters and devices -+.PP -+ -+.SH OPTIONS -+.TP -+\fB\-V\fR -+Display version information and exit -+.TP -+\fB\-h\fR -+Display help information and exit -+.PP -+ -+.SH AUTHOR -+.B ls-vdev -+was written by Brian King . -+.PP -+This manual page was written by Roman Rakus . -diff -up powerpc-utils-1.2.15/man/ls-veth.8.man powerpc-utils-1.2.15/man/ls-veth.8 ---- powerpc-utils-1.2.15/man/ls-veth.8.man 2013-01-16 15:31:13.887591102 +0100 -+++ powerpc-utils-1.2.15/man/ls-veth.8 2013-01-16 15:31:13.887591102 +0100 -@@ -0,0 +1,25 @@ -+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. -+.TH LS-VETH "8" "October 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+ls-veth \- information on Virtual Ethernet devices -+.SH SYNOPSIS -+.BR ls-veth " [" \-h " | " -V ] -+ -+.SH DESCRIPTION -+Provide information on Virtual Ethernet devices -+.PP -+ -+.SH OPTIONS -+.TP -+\fB\-V\fR -+Display version information and exit -+.TP -+\fB\-h\fR -+Display help information and exit -+.PP -+ -+.SH AUTHOR -+.B ls-veth -+was written by Brian King . -+.PP -+This manual page was written by Roman Rakus . -diff -up powerpc-utils-1.2.15/man/ls-vscsi.8.man powerpc-utils-1.2.15/man/ls-vscsi.8 ---- powerpc-utils-1.2.15/man/ls-vscsi.8.man 2013-01-16 15:31:13.887591102 +0100 -+++ powerpc-utils-1.2.15/man/ls-vscsi.8 2013-01-16 15:31:13.887591102 +0100 -@@ -0,0 +1,25 @@ -+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. -+.TH LS-VSCSI "8" "October 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+ls-vscsi \- information on Virtual devices -+.SH SYNOPSIS -+.BR ls-vscsi " [" \-h " | " -V ] -+ -+.SH DESCRIPTION -+Provide information on Virtual devices -+.PP -+ -+.SH OPTIONS -+.TP -+\fB\-V\fR -+Display version information and exit -+.TP -+\fB\-h\fR -+Display help information and exit -+.PP -+ -+.SH AUTHOR -+.B ls-vscsi -+was written by Brian King . -+.PP -+This manual page was written by Roman Rakus . -diff -up powerpc-utils-1.2.15/man/nvsetenv.8.man powerpc-utils-1.2.15/man/nvsetenv.8 ---- powerpc-utils-1.2.15/man/nvsetenv.8.man 2013-01-16 15:31:13.887591102 +0100 -+++ powerpc-utils-1.2.15/man/nvsetenv.8 2013-01-16 15:31:13.887591102 +0100 -@@ -0,0 +1,29 @@ -+.TH NVSETENV "8" "Oct 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+nvsetenv \- wrapper to invoke nvram -+ -+.SH SYNOPSIS -+.B nvsetenv -+[ ARG1 ] [ ARG2 ] -+ -+.SH DESCRIPTION -+.B nvsetenv -+is just a wrapper to invoke nvram -+ -+.SH OPTIONS -+ -+Without any argument, nvsetenv calls -+.I nvram --print-config -+ -+With one argument -+.IR ARG1 , -+nvsetenv calls -+.I nvram --print-config=ARG1 -+ -+With two arguments -+.IR "ARG1 ARG2" , -+nvsetenv calls -+.I nvram --update-config ARG1=ARG2 -+ -+.SH "SEE ALSO" -+.IR nvram (8) -diff -up powerpc-utils-1.2.15/man/rtas_event_decode.8.man powerpc-utils-1.2.15/man/rtas_event_decode.8 ---- powerpc-utils-1.2.15/man/rtas_event_decode.8.man 2013-01-16 15:31:13.888591067 +0100 -+++ powerpc-utils-1.2.15/man/rtas_event_decode.8 2013-01-16 15:31:13.888591067 +0100 -@@ -0,0 +1,31 @@ -+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. -+.TH RTAS_EVENT_DECODE 8 "September 2010" "Linux" "Linux on Power Service Tools" -+.SH NAME -+\fBrtas_event_decode\fP - RTAS message decoder -+.SH SYNOPSIS -+.B rtas_event_decode -+[\fI-dv\fR] [\fI-n eventnum\fR] [\fI-w width\fR] -+.SH DESCRIPTION -+RTAS messages are placed in the syslog encoded in a binary -+format, and are unreadable. This tool will take exactly one -+message, parse it, and spit out the human-readable equivalent. -+This program expects ascii data on stdin. -+ -+This tool is mostly meant to be used in conjuction with the -+rtas_dump shell script, which provides a suitable user -+interface. -+ -+.SH OPTIONS -+.TP -+.B \-d -+dump the raw RTAS event -+.TP -+.BI \-n " eventnum" -+event number of the RTAS event being dumped -+.TP -+.B \-v -+verbose, print all details, not just header -+.TP -+.BI \-w " width" -+limit the output to the specified width, default width is 80 characters. The width must be > 0 and < 1024. -+ -diff -up powerpc-utils-1.3.8/man/hcnmgr.8.me powerpc-utils-1.3.8/man/hcnmgr.8 ---- powerpc-utils-1.3.8/man/hcnmgr.8.me 2021-02-08 13:18:50.115407652 +0100 -+++ powerpc-utils-1.3.8/man/hcnmgr.8 2021-02-08 13:18:43.734322981 +0100 +diff -up powerpc-utils-1.3.10/Makefile.am.than powerpc-utils-1.3.10/Makefile.am +--- powerpc-utils-1.3.10/Makefile.am.than 2023-11-27 22:07:33.391345328 +0100 ++++ powerpc-utils-1.3.10/Makefile.am 2023-11-27 22:06:38.715373360 +0100 +@@ -26,6 +26,16 @@ sbin_SCRIPTS = \ + scripts/hcnmgr + + man_MANS = \ ++ man/lsdevinfo.8 \ ++ man/rtas_event_decode.8 \ ++ man/ls-vdev.8 \ ++ man/lsprop.8 \ ++ man/ls-veth.8 \ ++ man/nvsetenv.8 \ ++ man/ls-vscsi.8 \ ++ man/pseries_platform.8 \ ++ man/update_flash_nv.8 \ ++ man/hcnmgr.8 \ + man/activate_firmware.8 \ + man/rtas_ibm_get_vpd.8 \ + man/uesensor.8 \ +diff -up powerpc-utils-1.3.10/man/hcnmgr.8.than powerpc-utils-1.3.10/man/hcnmgr.8 +--- powerpc-utils-1.3.10/man/hcnmgr.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/hcnmgr.8 2023-11-27 22:05:20.283979110 +0100 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH HCNMGR "1" "hcnmgr contains a set of commands to support migratable SR_IOV logical port." "hcnmgr" @@ -308,9 +69,268 @@ diff -up powerpc-utils-1.3.8/man/hcnmgr.8.me powerpc-utils-1.3.8/man/hcnmgr.8 +was written by Mingming Cao . +.PP +This manual page was written by Than Ngo . -diff -up powerpc-utils-1.3.5/man/update_flash_nv.8.me powerpc-utils-1.3.5/man/update_flash_nv.8 ---- powerpc-utils-1.3.5/man/update_flash_nv.8.me 2018-11-29 16:49:51.344987106 +0100 -+++ powerpc-utils-1.3.5/man/update_flash_nv.8 2018-11-29 16:49:42.589961458 +0100 +diff -up powerpc-utils-1.3.10/man/lsdevinfo.8.than powerpc-utils-1.3.10/man/lsdevinfo.8 +--- powerpc-utils-1.3.10/man/lsdevinfo.8.than 2023-11-27 22:05:20.282979092 +0100 ++++ powerpc-utils-1.3.10/man/lsdevinfo.8 2023-11-27 22:05:20.282979092 +0100 +@@ -0,0 +1,39 @@ ++.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. ++.TH LSDEVINFO "8" "October 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++lsdevinfo - information on Virtual devices ++ ++.SH SYNOPSIS ++.B lsdevinfo ++[\fI-q criteria\fR] [\fI-F format\fR] [\fI-R\fR] [\fI-c\fR] [\fI-h\fR] ++ ++.SH DESCRIPTION ++Provide information on Virtual devices ++.PP ++ ++.SH OPTIONS ++.TP ++\fB\-q\fR criteria ++Specifies a criteria to select which devices are to be displayed. ++.TP ++\fB\-F\fR format ++Specifies the set of attributes to be displayed. ++.TP ++\fB\-R\fR ++Recursively display children of selected devices ++.TP ++\fB\-c\fR ++Display output as a comma separated list for each device. ++.TP ++\fB\-V\fR ++Display version information and exit ++.TP ++\fB\-h\fR ++Display help information and exit ++ ++.SH AUTHOR ++.B lsdevinfo ++was written by Santiago Leon . ++.PP ++This manual page was written by Roman Rakus . ++ +diff -up powerpc-utils-1.3.10/man/lsprop.8.than powerpc-utils-1.3.10/man/lsprop.8 +--- powerpc-utils-1.3.10/man/lsprop.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/lsprop.8 2023-11-27 22:05:20.283979110 +0100 +@@ -0,0 +1,42 @@ ++.TH LSPROP "8" "Sep 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++lsprop \- list properties ++.SH SYNOPSIS ++.B lsprop ++.RB [ \-R ] ++.RB [ \-m ++.IR max-bytes ] ++.RB [ \-w ++.IR num-words ] ++.RI [ FILE .\|.\|.] ++.SH OVERVIEW ++.B lsprop ++program is a member of the ppc64-utils suite of utils. ++Use it to list properties ++ ++.SH DESCRIPTION ++.B lsprop ++displays properties for ++.IR FILE s ++like Open Firmware ++.I .properties ++word. ++If the ++.I FILE ++is not set, the current directory is used. ++ ++.SH OPTIONS ++.TP ++.B \-R ++Process recursively ++.TP ++.BI \-m " max-bytes" ++Read only first ++.I max-bytes ++bytes from the ++.IR FILE s ++.TP ++.BI \-w " num-words" ++Display up to ++.I num-words ++words per line +diff -up powerpc-utils-1.3.10/man/ls-vdev.8.than powerpc-utils-1.3.10/man/ls-vdev.8 +--- powerpc-utils-1.3.10/man/ls-vdev.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/ls-vdev.8 2023-11-27 22:05:20.283979110 +0100 +@@ -0,0 +1,25 @@ ++.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. ++.TH LS-VDEV "8" "October 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++ls-vdev \- information on Virtual SCSI adapters and devices ++.SH SYNOPSIS ++.BR ls-vdev " [" \-h " | " -V ] ++ ++.SH DESCRIPTION ++Provide information on Virtual SCSI adapters and devices ++.PP ++ ++.SH OPTIONS ++.TP ++\fB\-V\fR ++Display version information and exit ++.TP ++\fB\-h\fR ++Display help information and exit ++.PP ++ ++.SH AUTHOR ++.B ls-vdev ++was written by Brian King . ++.PP ++This manual page was written by Roman Rakus . +diff -up powerpc-utils-1.3.10/man/ls-veth.8.than powerpc-utils-1.3.10/man/ls-veth.8 +--- powerpc-utils-1.3.10/man/ls-veth.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/ls-veth.8 2023-11-27 22:05:20.283979110 +0100 +@@ -0,0 +1,25 @@ ++.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. ++.TH LS-VETH "8" "October 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++ls-veth \- information on Virtual Ethernet devices ++.SH SYNOPSIS ++.BR ls-veth " [" \-h " | " -V ] ++ ++.SH DESCRIPTION ++Provide information on Virtual Ethernet devices ++.PP ++ ++.SH OPTIONS ++.TP ++\fB\-V\fR ++Display version information and exit ++.TP ++\fB\-h\fR ++Display help information and exit ++.PP ++ ++.SH AUTHOR ++.B ls-veth ++was written by Brian King . ++.PP ++This manual page was written by Roman Rakus . +diff -up powerpc-utils-1.3.10/man/ls-vscsi.8.than powerpc-utils-1.3.10/man/ls-vscsi.8 +--- powerpc-utils-1.3.10/man/ls-vscsi.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/ls-vscsi.8 2023-11-27 22:05:20.283979110 +0100 +@@ -0,0 +1,25 @@ ++.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. ++.TH LS-VSCSI "8" "October 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++ls-vscsi \- information on Virtual devices ++.SH SYNOPSIS ++.BR ls-vscsi " [" \-h " | " -V ] ++ ++.SH DESCRIPTION ++Provide information on Virtual devices ++.PP ++ ++.SH OPTIONS ++.TP ++\fB\-V\fR ++Display version information and exit ++.TP ++\fB\-h\fR ++Display help information and exit ++.PP ++ ++.SH AUTHOR ++.B ls-vscsi ++was written by Brian King . ++.PP ++This manual page was written by Roman Rakus . +diff -up powerpc-utils-1.3.10/man/nvsetenv.8.than powerpc-utils-1.3.10/man/nvsetenv.8 +--- powerpc-utils-1.3.10/man/nvsetenv.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/nvsetenv.8 2023-11-27 22:05:20.283979110 +0100 +@@ -0,0 +1,29 @@ ++.TH NVSETENV "8" "Oct 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++nvsetenv \- wrapper to invoke nvram ++ ++.SH SYNOPSIS ++.B nvsetenv ++[ ARG1 ] [ ARG2 ] ++ ++.SH DESCRIPTION ++.B nvsetenv ++is just a wrapper to invoke nvram ++ ++.SH OPTIONS ++ ++Without any argument, nvsetenv calls ++.I nvram --print-config ++ ++With one argument ++.IR ARG1 , ++nvsetenv calls ++.I nvram --print-config=ARG1 ++ ++With two arguments ++.IR "ARG1 ARG2" , ++nvsetenv calls ++.I nvram --update-config ARG1=ARG2 ++ ++.SH "SEE ALSO" ++.IR nvram (8) +diff -up powerpc-utils-1.3.10/man/pseries_platform.8.than powerpc-utils-1.3.10/man/pseries_platform.8 +--- powerpc-utils-1.3.10/man/pseries_platform.8.than 2023-11-27 22:05:20.282979092 +0100 ++++ powerpc-utils-1.3.10/man/pseries_platform.8 2023-11-27 22:05:20.282979092 +0100 +@@ -0,0 +1,11 @@ ++.\" ++.\" Copyright (C) 2015 International Business Machines ++.\" ++.TH pseries_platform 8 "September 2015" Linux "Linux on Power Service Tools" ++.SH NAME ++pseries_platform \- identify the platform and display the name of platform ++.SH SYNOPSIS ++.B /usr/bin/pseries_platform ++ ++.SH DESCRIPTION ++The \fIpseries_platform\fR tool can identify the platform and display the name of platform. +diff -up powerpc-utils-1.3.10/man/rtas_event_decode.8.than powerpc-utils-1.3.10/man/rtas_event_decode.8 +--- powerpc-utils-1.3.10/man/rtas_event_decode.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/rtas_event_decode.8 2023-11-27 22:05:20.283979110 +0100 +@@ -0,0 +1,31 @@ ++.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. ++.TH RTAS_EVENT_DECODE 8 "September 2010" "Linux" "Linux on Power Service Tools" ++.SH NAME ++\fBrtas_event_decode\fP - RTAS message decoder ++.SH SYNOPSIS ++.B rtas_event_decode ++[\fI-dv\fR] [\fI-n eventnum\fR] [\fI-w width\fR] ++.SH DESCRIPTION ++RTAS messages are placed in the syslog encoded in a binary ++format, and are unreadable. This tool will take exactly one ++message, parse it, and spit out the human-readable equivalent. ++This program expects ascii data on stdin. ++ ++This tool is mostly meant to be used in conjuction with the ++rtas_dump shell script, which provides a suitable user ++interface. ++ ++.SH OPTIONS ++.TP ++.B \-d ++dump the raw RTAS event ++.TP ++.BI \-n " eventnum" ++event number of the RTAS event being dumped ++.TP ++.B \-v ++verbose, print all details, not just header ++.TP ++.BI \-w " width" ++limit the output to the specified width, default width is 80 characters. The width must be > 0 and < 1024. ++ +diff -up powerpc-utils-1.3.10/man/update_flash_nv.8.than powerpc-utils-1.3.10/man/update_flash_nv.8 +--- powerpc-utils-1.3.10/man/update_flash_nv.8.than 2023-11-27 22:05:20.283979110 +0100 ++++ powerpc-utils-1.3.10/man/update_flash_nv.8 2023-11-27 22:05:20.283979110 +0100 @@ -0,0 +1,15 @@ +.\" +.\" Copyright (C) 2015 International Business Machines @@ -327,25 +347,3 @@ diff -up powerpc-utils-1.3.5/man/update_flash_nv.8.me powerpc-utils-1.3.5/man/up +.SH SEE ALSO +update_flash(8). + -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 12:46:42.460763120 +0200 -@@ -48,7 +48,17 @@ man_MANS = \ - man/vcpustat.8 \ - man/rtas_dbg.8 \ - man/drmgr.8 \ -- man/lparnumascore.8 -+ man/lparnumascore.8 \ -+ man/lsdevinfo.8 \ -+ man/rtas_event_decode.8 \ -+ man/ls-vdev.8 \ -+ man/lsprop.8 \ -+ man/ls-veth.8 \ -+ man/nvsetenv.8 \ -+ man/ls-vscsi.8 \ -+ man/pseries_platform.8 \ -+ man/update_flash_nv.8 \ -+ man/hcnmgr.8 - - EXTRA_DIST += $(bin_SCRIPTS) $(sbin_SCRIPTS) $(man_MANS) - diff --git a/SOURCES/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch b/SOURCES/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch new file mode 100644 index 0000000..8fe4809 --- /dev/null +++ b/SOURCES/powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch @@ -0,0 +1,34 @@ +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/SOURCES/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch b/SOURCES/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch new file mode 100644 index 0000000..016ba52 --- /dev/null +++ b/SOURCES/powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch @@ -0,0 +1,79 @@ +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/SOURCES/powerpc-utils-73ba26-lparstat-fix_negative_values.patch b/SOURCES/powerpc-utils-73ba26-lparstat-fix_negative_values.patch new file mode 100644 index 0000000..692a7fc --- /dev/null +++ b/SOURCES/powerpc-utils-73ba26-lparstat-fix_negative_values.patch @@ -0,0 +1,36 @@ +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/SOURCES/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch b/SOURCES/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch new file mode 100644 index 0000000..1984187 --- /dev/null +++ b/SOURCES/powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch @@ -0,0 +1,120 @@ +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/SOURCES/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch b/SOURCES/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch new file mode 100644 index 0000000..90eaa05 --- /dev/null +++ b/SOURCES/powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch @@ -0,0 +1,33 @@ +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/SOURCES/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch b/SOURCES/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch new file mode 100644 index 0000000..618cdc5 --- /dev/null +++ b/SOURCES/powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch @@ -0,0 +1,36 @@ +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/SOURCES/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch b/SOURCES/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch new file mode 100644 index 0000000..a195207 --- /dev/null +++ b/SOURCES/powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch @@ -0,0 +1,93 @@ +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/SOURCES/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch b/SOURCES/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch new file mode 100644 index 0000000..64592a9 --- /dev/null +++ b/SOURCES/powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch @@ -0,0 +1,219 @@ +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/SOURCES/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch b/SOURCES/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch new file mode 100644 index 0000000..dc5e1aa --- /dev/null +++ b/SOURCES/powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch @@ -0,0 +1,47 @@ +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/SOURCES/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch b/SOURCES/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch new file mode 100644 index 0000000..5920886 --- /dev/null +++ b/SOURCES/powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch @@ -0,0 +1,55 @@ +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/SOURCES/powerpc-utils-rtas_dbg_return_negativ_value.patch b/SOURCES/powerpc-utils-rtas_dbg_return_negativ_value.patch new file mode 100644 index 0000000..e665c37 --- /dev/null +++ b/SOURCES/powerpc-utils-rtas_dbg_return_negativ_value.patch @@ -0,0 +1,70 @@ +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/SOURCES/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch b/SOURCES/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch new file mode 100644 index 0000000..531aaf2 --- /dev/null +++ b/SOURCES/powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch @@ -0,0 +1,65 @@ +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/SPECS/powerpc-utils.spec b/SPECS/powerpc-utils.spec index a51acc1..d3c1b46 100644 --- a/SPECS/powerpc-utils.spec +++ b/SPECS/powerpc-utils.spec @@ -1,40 +1,73 @@ -Name: powerpc-utils -Version: 1.3.10 -Release: 5%{?dist} -Summary: PERL-based scripts for maintaining and servicing PowerPC systems +Name: powerpc-utils +Version: 1.3.10 +Release: 10%{?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 -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 +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 +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 -ExclusiveArch: ppc %{power64} +# lparstat: Fix display of mode for dedicated-donating partition +Patch10: powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch -BuildRequires: gcc -BuildRequires: make -BuildRequires: automake -BuildRequires: doxygen -BuildRequires: zlib-devel -BuildRequires: librtas-devel >= 1.4.0 -BuildRequires: libservicelog-devel >= 1.0.1-2 -BuildRequires: perl-generators -BuildRequires: systemd -BuildRequires: numactl-devel +# 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 + +ExclusiveArch: ppc %{power64} + +BuildRequires: gcc +BuildRequires: make +BuildRequires: automake +BuildRequires: doxygen +BuildRequires: zlib-devel +BuildRequires: librtas-devel >= 1.4.0 +BuildRequires: libservicelog-devel >= 1.0.1-2 +BuildRequires: perl-generators +BuildRequires: systemd +BuildRequires: numactl-devel # rtas_dump explicit dependency -Requires: perl(Data::Dumper) -Requires: %{name}-core = %{version}-%{release} +Requires: perl(Data::Dumper) +Requires: %{name}-core = %{version}-%{release} %description PERL-based scripts for maintaining and servicing PowerPC systems. @@ -104,6 +137,9 @@ ln -s serv_config.8 %{buildroot}%{_mandir}/man8/uspchrp.8 # deprecated, use sosreport instead 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 + %post core %systemd_post hcn-init.service # update the smt.state file with current SMT @@ -131,6 +167,7 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || : %files core %license COPYING %dir %{_localstatedir}/lib/powerpc-utils +%dir /etc/drmgr.d/pmig %config(noreplace) %{_localstatedir}/lib/powerpc-utils/smt.state %{_unitdir}/smtstate.service %{_unitdir}/smt_off.service @@ -203,10 +240,32 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || : %{_mandir}/man8/nvram.8* %{_mandir}/man8/ofpathname.8* %{_mandir}/man8/drmgr.8* +%{_mandir}/man8/drmgr-hooks.8* %{_mandir}/man8/lparnumascore.8* %changelog +* Tue Jan 30 2024 Than Ngo - 1.3.10-10 +- Resolves: RHEL-22830, Support multiple dev paths for a nvme boot device + +* Wed Jan 10 2024 Than Ngo - 1.3.10-9 +- Resolves: RHEL-20350, getting larger Negative value while running rtas_dbg -l +- Resolves: RHEL-19076, installation fails if nsid of nvme device is greater than 10 +- Resolves: RHEL-11456, add new /etc/drmgr.d/pmig hierarchy + +* Mon Nov 27 2023 Than Ngo - 1.3.10-8 +- Resolves: RHEL-16045, Support partial SMT level through SYS FS smt/control files +- Resolves: RHEL-11456, LPM hooks + +* Wed Jul 26 2023 Than Ngo - 1.3.10-7 +- Fix negative values seen while running lpar +- Fix lparstat error with mixed SMT state +Resolves: #2225371 + +* Wed May 10 2023 Than Ngo - 1.3.10-6 +- Resolves: #2166870, lparstat: Fix display of mode for dedicated-donating partition +- Resolves: #2169269, lparstat: Fix negative values seen while running lparstat with -E option + * Mon Dec 12 2022 Than Ngo - 1.3.10-5 - Resolves: #2125152, HNV bond fails to come up with sriov interface as active slave