Compare commits

..

No commits in common. "imports/c8-beta/powerpc-utils-1.3.8-5.el8" and "c8" have entirely different histories.

26 changed files with 679 additions and 752 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/powerpc-utils-1.3.8.tar.gz
SOURCES/powerpc-utils-1.3.10.tar.gz

View File

@ -1 +0,0 @@
526496eb7a3712d0d5a9ba0b4748b957625ede0e SOURCES/powerpc-utils-1.3.8.tar.gz

View File

@ -1,78 +0,0 @@
From 21c860888425762468d339950518ab8b0940ecea Mon Sep 17 00:00:00 2001
From: Tyrel Datwyler <tyreld@linux.ibm.com>
Date: Mon, 5 Oct 2020 13:03:45 -0700
Subject: [PATCH] ofpathname: Use NVMe controller physical nsid
Linux creates logical block devices of the the form nvmeXnYpZ such that X = the
controller, Y = namepsace, and Z = partition. For example:
/dev/nvme0n1p1
The Linux namespace numbering scheme for namespaces always starts at 1 and
increases monotonically regardless of the actual numbering scheme of the
namespaces as seen by the physical NVMe controller. Accordingly, the Open
firmware path binding utilizes the namespace id as seen by the controller and
not the necessarily the one given in the logical block device name.
As such we need to use the "nsid" attribute in the sysfs entry for the logical
device to properly map back and forth from OP pathnames.
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
---
scripts/ofpathname | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/scripts/ofpathname b/scripts/ofpathname
index 2ceae25..41b8c5c 100755
--- a/scripts/ofpathname
+++ b/scripts/ofpathname
@@ -659,6 +659,11 @@ l2of_nvme()
devspec=`$CAT $PWD/device/devspec | tr -d '\000'`
if [[ -n $devspec ]]; then
found=1
+ if [[ -n $devnsid ]]; then
+ # Linux logical nsid might not match nvme controller nsid
+ goto_dir $dir "nsid"
+ devnsid=`$CAT $PWD/nsid | tr -d '\000'`
+ fi
break
fi
done
@@ -1609,16 +1614,9 @@ of2l_nvme()
local dir
local link
- for dir in `$FIND /sys/block -name "nvme*n$nsid"`; do
+ for dir in `$FIND /sys/class/nvme -name "nvme[0-9]*"`; do
cd $dir
- link=`get_link "device"` # points to nvme[0-9]+ (non-namespace)
- if [[ -n $link ]]; then
- cd $link
- else
- continue
- fi
-
link=`get_link "device"` # points to pci address dir
if [[ -n $link ]]; then
cd $link
@@ -1635,6 +1633,16 @@ of2l_nvme()
fi
done
+ for dir in `$FIND /sys/block -name "${LOGICAL_DEVNAME}n[0-9]*"`; do
+ cd $dir
+
+ local devnsid=`$CAT ./nsid 2>/dev/null`
+ if [[ $devnsid = $nsid ]]; then
+ LOGICAL_DEVNAME="${dir##*/}"
+ break
+ fi
+ done
+
if [[ -n $LOGICAL_DEVNAME ]] \
&& [[ -n $part ]]; then
--
1.8.3.1

View File

@ -1,13 +0,0 @@
diff -up powerpc-utils-1.3.8/src/sys_ident.c.me powerpc-utils-1.3.8/src/sys_ident.c
--- powerpc-utils-1.3.8/src/sys_ident.c.me 2020-10-06 15:35:56.620350621 +0200
+++ powerpc-utils-1.3.8/src/sys_ident.c 2020-10-06 15:36:31.468849936 +0200
@@ -267,7 +267,8 @@ print_proc_sn_value(void)
"parameter from RTAS\n");
return 2;
}
- pos = strstr(buf, "uid=");
+ /* Ignore length field (first 2 bytes) */
+ pos = strstr(buf +2, "uid=");
if (pos == NULL) {
fprintf(stderr, "Parameter from RTAS does "
"not contain uid\n");

View File

@ -1,14 +0,0 @@
#!/bin/sh
if [ "$1" = "--version" ]; then
echo This version of nvsetenv is just a wrapper to invoke nvram
exit 0
fi
if [ -z "$1" ]; then
nvram --print-config
elif [ -z "$2" ]; then
nvram --print-config="$1"
else
nvram --update-config "$1"="$2"
fi
exit $?

1
SOURCES/nx-gzip.udev Normal file
View File

@ -0,0 +1 @@
KERNEL=="nx-gzip", MODE="0666"

View File

@ -0,0 +1,11 @@
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

View File

@ -0,0 +1,84 @@
commit 73ba26c1240a25e7699449e82cfc09dad10fed80
Author: Sathvika Vasireddy <sv@linux.ibm.com>
Date: Fri Dec 9 15:26:46 2022 +0530
lparstat: Fix negative values seen while running lparstat with -E option
Negative values are seen while running lparstat with -E option.
This is because delta_purr value is less than delta_idle_purr.
Given that these values are read from different sources, a
small variation in the values is possible. So, in such cases,
round down delta_idle_purr to delta_purr.
Without this patch:
=====
System Configuration
type=Dedicated mode=Capped smt=8 lcpu=240 mem=67033290112 kB cpus=0
ent=240.00
---Actual--- -Normalized-
%busy %idle Frequency %busy %idle
------ ------ ------------- ------ ------
-0.03 100.02 3.93GHz[111%] 0.01 110.97
0.00 100.00 3.93GHz[111%] 0.01 110.99
-0.04 100.03 3.93GHz[111%] 0.01 110.98
0.06 99.95 3.93GHz[111%] 0.01 110.99
0.02 99.98 3.93GHz[111%] 0.01 110.99
=====
With this patch:
=====
System Configuration
type=Dedicated mode=Capped smt=8 lcpu=240 mem=67033290112 kB cpus=0
ent=240.00
---Actual--- -Normalized-
%busy %idle Frequency %busy %idle
------ ------ ------------- ------ ------
0.03 99.96 3.93GHz[111%] 0.01 110.98
0.00 100.00 3.93GHz[111%] 0.01 110.99
0.03 99.97 3.93GHz[111%] 0.01 110.99
0.00 100.00 3.93GHz[111%] 0.01 110.99
0.09 99.90 3.93GHz[111%] 0.01 110.99
=====
Reported-by: Shirisha Ganta <shirisha.ganta1@ibm.com>
Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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;

View File

@ -0,0 +1,46 @@
commit dee15756bcb287ccf39a904be07c90107b13844b
Author: Laurent Dufour <ldufour@linux.ibm.com>
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 <ldufour@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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",

View File

@ -0,0 +1,93 @@
commit b2672fa3d462217ccd057a2cd307af2448e78757
Author: Laurent Dufour <ldufour@linux.ibm.com>
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 <ldufour@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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);
}

View File

@ -1,3 +1,18 @@
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
@ -242,3 +257,95 @@ diff -up powerpc-utils-1.2.15/man/rtas_event_decode.8.man powerpc-utils-1.2.15/m
+.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
@@ -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"
+.SH NAME
+hcnmgr \- hcnmgr contains a set of commands to support migratable SR_IOV logical port.
+.SH SYNOPSIS
+.B hcnmgr|hcnrmhcn|hcnrmdev|hcnqrydev|hcnversion
+[options]
+.SH DESCRIPTION
+hcnmgr contains a set of commands to support migratable SR_IOV logical port.
+The new commands configure/query/remove network devices. New commands should
+be called from the HMC, rather than directly from linux LPAR
+.PP
+Usage: hcncfgdrc DRC_INDEX=<drc_index> [STAKE_TOKEN=NULL] [-d]
+.IP
+Configure a device to hybrid network HCN
+.PP
+Usage: hcnrmhcn HCN_ID=<hcnid>
+.IP
+Remove a hybrid network HCN given an HCN ID
+.PP
+Usage: hcnrmdev DRC_INDEX=<drc_index> HCN_ID=<hcnid>
+.IP
+Unconfigure device from HCN
+.PP
+Usage: hcnqrydev DRC_INDEX=<drc_index> HCN_ID=<hcnid>
+.IP
+Query a device given a DRC_INDEX or HCN ID
+.PP
+Usage: hcnversion
+.IP
+get the current version of the HCN support
+.PP
+Optional arguments.
+.TP
+\fB\-s\fR
+scan device\-tree and configure HCN
+.TP
+\fB\-V\fR
+Display version information and exit
+.TP
+\fB\-h\fR
+Display this help information and exit
+.SH AUTHOR
+.B hcnmgr
+was written by Mingming Cao <mingming.cao@ibm.com>.
+.PP
+This manual page was written by Than Ngo <than@redhat.com>.
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
@@ -0,0 +1,15 @@
+.\"
+.\" Copyright (C) 2015 International Business Machines
+.\"
+.TH pseries_platform 8 "September 2015" Linux "Linux on Power Service Tools"
+.SH NAME
+update_flash_nv \- is a simple wrapper script (update_flash) to pass the image.
+.SH SYNOPSIS
+.B /usr/bin/update_flash_nv
+
+.SH DESCRIPTION
+The \fIupdate_flash_nv\fR tool is simple wrapper script (update_flash) to pass the image.
+
+.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)

View File

@ -1,15 +0,0 @@
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.

View File

@ -1,19 +0,0 @@
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
@@ -0,0 +1,15 @@
+.\"
+.\" Copyright (C) 2015 International Business Machines
+.\"
+.TH pseries_platform 8 "September 2015" Linux "Linux on Power Service Tools"
+.SH NAME
+update_flash_nv \- is a simple wrapper script (update_flash) to pass the image.
+.SH SYNOPSIS
+.B /usr/bin/update_flash_nv
+
+.SH DESCRIPTION
+The \fIupdate_flash_nv\fR tool is simple wrapper script (update_flash) to pass the image.
+
+.SH SEE ALSO
+update_flash(8).
+

View File

@ -1,162 +0,0 @@
commit 4b2d10942e2d964ecc1fe58c9460c34993ff10be
Author: Mingming Cao <mmc@linux.vnet.ibm.com>
Date: Thu Nov 19 21:38:24 2020 -0800
Disable vnic as backup vdevice for migratable SR_IOV
In version 1.0 we only allow configure ibmveth as
migritable SR_IOV backup vdevice. When ibmvnic become
more stablized we will enable vnic as backup.
Signed-off-by: Mingming Cao <mmc@linux.vnet.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
diff --git a/scripts/hcnmgr b/scripts/hcnmgr
index 1135a85..0c09d8c 100644
--- a/scripts/hcnmgr
+++ b/scripts/hcnmgr
@@ -37,6 +37,8 @@ DRC_INDEX=0
DEVNAME=""
MODE=""
PHYSLOC=""
+VIO_TYPE=""
+VNIC_SPT=""
# Usage statements
usage() {
@@ -80,6 +82,7 @@ E_EPERM=1 # Platform not supported
E_BUSY=16 # Device busy
E_ENODEV=19 # Failed get device name
E_NOMODULE=5 # Failed to load bonding module
+E_INVAL_DEV=6 # Vdevice not supported
E_ENETUNREACH=101 # No network management command nmcli
#
@@ -93,19 +96,22 @@ err() {
case $eno in
"$E_INVAL")
- e_mesg="$HCNCMD:error code $eno, hybrid network ID HCNID does not exist"
+ e_mesg="$HCNCMD:error code $eno, Hybrid network ID HCNID does not exist"
+ ;;
+ "$E_INVAL_DEV")
+ e_mesg="$HCNCMD:error code $eno, Backing vdevice not supported"
;;
"$E_EPERM")
- e_mesg="$HCNCMD:error code $eno, platform is not supported"
+ e_mesg="$HCNCMD:error code $eno, Platform is not supported"
;;
"$E_BUSY")
- e_mesg="$HCNCMD:error code $eno, network device busy, no backup device"
+ e_mesg="$HCNCMD:error code $eno, Network device busy, no backup device"
;;
"$E_ENODEV")
- e_mesg="$HCNCMD:error code $eno, failed to find device or get device name"
+ e_mesg="$HCNCMD:error code $eno, Failed to find device or get device name"
;;
"$E_NOMODULE")
- e_mesg="$HCNCMD:error code $eno, failed to load bonding module"
+ e_mesg="$HCNCMD:error code $eno, Failed to load bonding module"
;;
"$E_ENETUNREACH")
e_mesg="$HCNCMD:error code $eno, nmcli command not installed"
@@ -147,6 +153,7 @@ hcnlog() {
esac
}
+
# function search_dev:
# Given DRX_INDEX, Search for device-tree, looking for migratable SR_IOV
# backend vnic or ibmveth device to configure hybrid network
@@ -171,6 +178,7 @@ search_dev() {
if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
hcnlog DEBUG "search_dev: found device "
hcnlog DEBUG "search_dev: exit"
+ VIO_TYPE="SRIOV"
return $E_SUCCESS
fi
done
@@ -184,6 +192,7 @@ search_dev() {
if [[ $index == "$1" ]]; then
hcnlog DEBUG "found matching drc_index $index in $dev"
if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
+ VIO_TYPE="VNIC"
hcnlog DEBUG "search_dev: found device "
hcnlog DEBUG "search_dev: exit"
return $E_SUCCESS
@@ -201,6 +210,7 @@ search_dev() {
if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
hcnlog DEBUG "search_dev: found device "
hcnlog DEBUG "search_dev: exit"
+ VIO_TYPE="L_LAN"
return $E_SUCCESS
fi
fi
@@ -340,6 +350,10 @@ do_config_vdevice() {
cfghcn() {
hcnlog DEBUG "cfghcn: enter $1"
search_dev "$1"
+ if [[ $VIO_TYPE == "VNIC" && $VNIC_SPT == "OFF" ]]; then
+ hcnlog WARN "Backing device $VIO_TYPE for Migratable VF is not supported in hcnmgr version $VERSION"
+ err $E_INVAL_DEV
+ fi
do_config_vdevice
return $E_SUCCESS
}
@@ -512,23 +526,10 @@ scanhcn() {
done
done
- hcnlog DEBUG "search vnic device with ibm,hcn-id propterty......"
+ hcnlog DEBUG "search ibmveth device with ibm,hcn-id propterty......"
# Look at every vNIC device with ibm,hcn-id propterty
# join or create bond for this hcnid if not exist, add vnic device as
# slave for this bond accosiated with hcnid, if not already to
- for dev in "$DT_PATH"/vdevice/vnic*; do
- [ -d "$dev" ] || continue
- if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
- hcnlog DEBUG "scanhcn found vnic device with hcnid "
- hcnlog INFO "scanhcn configure HCN and vnic device"
- do_config_vdevice
- fi
- done
-
- # Look at every veth device with ibm,hcn-id propterty
- # join or create bond for this hcnid if not exist, add ibmveth device as
- # slave for this bond accosiated with hcnid, if not already to
- hcnlog DEBUG "search ibmveth device with ibm,hcn-id propterty......"
for dev in "$DT_PATH"/vdevice/l-lan*; do
[ -d "$dev" ] || continue
if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
@@ -538,6 +539,21 @@ scanhcn() {
fi
done
+ if [[ $VNIC_SPT != "OFF" ]]; then
+ hcnlog DEBUG "search vnic device with ibm,hcn-id propterty......"
+ # Look at every vNIC device with ibm,hcn-id propterty
+ # join or create bond for this hcnid if not exist, add vnic device as
+ # slave for this bond accosiated with hcnid, if not already to
+ for dev in "$DT_PATH"/vdevice/vnic*; do
+ [ -d "$dev" ] || continue
+ if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
+ hcnlog DEBUG "scanhcn found vnic device with hcnid "
+ hcnlog INFO "scanhcn configure HCN and vnic device"
+ do_config_vdevice
+ fi
+ done
+ fi
+
# Next clean up dead connections left from orgitinal LPAR after inactive miration
# list of all HCN ids
@@ -583,6 +599,9 @@ fi
if ! nmcli --version >/dev/null 2>&1; then
err $E_ENETUNREACH
fi
+if [[ $VERSION == "1.0" ]]; then
+ VNIC_SPT="OFF"
+fi
#Validate bonding module is loaded
if ! lsmod | grep -q bonding; then

View File

@ -1,86 +0,0 @@
commit e51995667279164a6c8ce4c3ba0217fffda22d6d
Author: Mingming Cao <mmc@linux.vnet.ibm.com>
Date: Thu Nov 19 21:41:31 2020 -0800
Clean up dead network config interface after inactive migration
With inactive parition migration, we found there are
dead network interface asscoiated with the SR_IOV from
source LPAR that still exist.
We need to cleanup the old network interface
related to this devname from source LPAR. Normally
in the active parition migration case, this was done
when HMC issue commands to OS remove the
VF from hybrid network. Because of the inactive
migration, the OS was not notified before migration
that the VF was removed, thus leaves the dead network
interface belongs on the original MVF on source lpar
not cleaned up. This cause the confusion of the network
manager to bring up the bondings with new MVFs at destination
LPAR.
After inactive parition migration the same devname
could possiblily used at the destination LPAR.
It can be assigned to a different hybrid
network (different hcnid). At the OS boot time,
the same devname but with different hcnid will
be configured. However the old network work interface
associated with the same devname from the source LPAR
has not been cleaned up yet.
This patch fix this by during the boot time scan and
if found an VFs has more than two bonding interfaces,
or has old VF ifcfg, removed the expired one.
Signed-off-by: Mingming Cao <mmc@linux.vnet.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
diff --git a/scripts/hcnmgr b/scripts/hcnmgr
index 0c09d8c..a76505e 100644
--- a/scripts/hcnmgr
+++ b/scripts/hcnmgr
@@ -518,6 +518,27 @@ scanhcn() {
[ -d "$dev" ] || continue
if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
hcnlog DEBUG "scanhcn found sr-iov device with hcnid "
+
+ # After online from inactive migration, destination
+ # LPAR may have same mvf devname but associated with different
+ # bonding than from source LPAR
+ # clean up expired bonding SR_IOV connections
+
+ for cfg in $(ls $IFCONFIG_PATH | grep "$DEVNAME" | grep "bond"); do
+ hid=$(echo "$cfg" | sed -e 's/ifcfg-//' | cut -d '-' -f 1 | sed -e 's/bond//')
+ if [ -e "$IFCONFIG_PATH/ifcfg-$DEVNAME" ]; then
+ rm "$IFCONFIG_PATH/ifcfg-$DEVNAME"
+ fi
+ if [[ $hid != "" && $hid != "$HCNID" ]] ; then
+ hcnlog INFO "Delete dead bonding slave ifcfg file $IFCONFIG_PATH/$cfg"
+ rm $IFCONFIG_PATH/"$cfg"
+ if nmcli -f NAME con show | grep -q "bond$hid-$DEVNAME\s"; then
+ hcnlog INFO "Delete dead bonding connection $connection"
+ nmcli con delete "bond$hid-$DEVNAME"
+ fi
+ fi
+ done
+
hcnlog INFO "scanhcn configure HCN and sr-iov device"
do_config_vdevice
# Save found HCN ids in array HcnIds
@@ -558,13 +579,12 @@ scanhcn() {
# list of all HCN ids
ids="${HcnIds[*]}"
-
# After inactive migration, LPAR may have old bonding connections
# with network device on original LPAR
- # clean up dead bonding connections
+ # clean up dead bonding connections
for connection in $(nmcli -f NAME con show | grep "${ids// /\\|}"); do
dev=$(echo "$connection" | cut -d '-' -f 2)
- if [ ! -e /sys/class/net/"$dev" ]; then
+ if [[ $dev != "NAME" && ! -e /sys/class/net/"$dev" ]]; then
hcnlog INFO "Delete dead bonding connection $connection"
nmcli con delete "$connection"
fi

View File

@ -1,94 +0,0 @@
commit f1ec5f04fdac3e87c3c85c2d85f79339d916e864
Author: Mingming Cao <mmc@linux.vnet.ibm.com>
Date: Thu Nov 19 21:30:40 2020 -0800
HNV fixes for qrydev and remove lsdevinfo
This patch fixes a few issues found during testing:
1) Fix qrydev checking for active interface error
2) Skip collecting lsdevinfo right before migration
When the LPARs has large number of devices, this can
take quite a long time and flood the log message.
3) Wait for OS ready to lookup device name for configure
HNV device. We need give OS longer time to prepare pci
device after DLPAR to show up for ofpathname(). We have
run into several issues HNV issues the hcncfgdrc command
to configure the vdevices before ofpathname able
to find the device name yet.
4) Currently the hybrid network virtualization is only
supported on PowerVM LPAR. We should allow exit the hcnmgr
gracefully on other power platform instead of return error.
Signed-off-by: Mingming Cao <mmc@linux.vnet.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
diff --git a/scripts/hcnmgr b/scripts/hcnmgr
index e699c6a..1135a85 100644
--- a/scripts/hcnmgr
+++ b/scripts/hcnmgr
@@ -218,7 +218,7 @@ search_dev() {
# $1 path to device-tree device
#
get_dev_hcn() {
- local wait=30
+ local wait=12
local dev=$1
hcnlog DEBUG "get_dev_hcn: enter $1"
@@ -235,7 +235,7 @@ get_dev_hcn() {
fi
hcnlog DEBUG "ofpathname return $?, devname is $DEVNAME rety counter $wait"
- sleep 1
+ sleep 15
((wait--))
if [[ $wait == 0 ]]; then
@@ -393,7 +393,7 @@ qrydev() {
BOND_PATH=$BOND_BASEPATH/$BONDNAME/bonding
hcnlog DEBUG "check if the network interface for this SR_IOV is not up, return success"
- if ! nmcli -f DEVICE con show --active | grep -q "$BONDNAME-$DEVNAME"; then
+ if ! nmcli -f DEVICE con show --active | grep -q "$DEVNAME"; then
hcnlog DEBUG "network connection $BONDNAME-$DEVNAME is inactive or nonexist"
hcnlog DEBUG "HCNID $HCNID devname $DEVNAME mode $MODE physloc $PHYSLOC"
hcnlog DEBUG "qryhcn: exit"
@@ -435,7 +435,6 @@ show_hcnstatus() {
nmcli connection show >>$LOG_FILE
nmcli device status >>$LOG_FILE
ip addr show >>$LOG_FILE
- lsdevinfo >>$LOG_FILE
}
#
@@ -569,10 +568,15 @@ exec &> >(tee -a $LOG_FILE)
NOW=$(date +"%m-%d-%Y %T")
echo "=======================$NOW============================"
+HCNCMD=$(basename "$0")
+hcnlog DEBUG "$HCNCMD enter"
+
#Validate this tool is running on powerpc platform
. "$PSERIES_PLATFORM"
if [ "$platform" != "$PLATFORM_PSERIES_LPAR" ]; then
- err $E_EPERM
+ hcnlog INFO "HNV is only supported on PowerVM LPAR"
+ hcnlog INFO "$HCNCMD exit"
+ exit 0
fi
#Validate NMCLI packages is install to manage networking
@@ -588,9 +592,6 @@ if ! lsmod | grep -q bonding; then
fi
fi
-HCNCMD=$(basename "$0")
-hcnlog DEBUG "$HCNCMD enter"
-
#getops for help and version
while getopts "sVhd:" arg; do
case "$arg" in

View File

@ -1,96 +0,0 @@
commit bfabc531021ee9cfc4c8dd83803e9daf7e45d91e
Author: Mingming Cao <mmc@linux.vnet.ibm.com>
Date: Thu Jan 28 12:49:07 2021 -0800
Fix boot-time bonding interface cleanup and avoid use ifcfg
This patch fix three issues
1) Avoid cleanup bond interface at the boot time when there is no HNV exists
2) Using nmcli instead of ifconfig file to check bond configuration as it
has been officially deprecated. This makes HNV configure bonding
indpendant of where bonding cfg file located.
3) At the time of calling ofpathname to look up for devicename, wait
for sys fs device ready. Otherwise the OS may in the middle of device
renaming.
Signed-off-by: Mingming Cao <mmc@linux.vnet.ibm.com>
diff --git a/scripts/hcnmgr b/scripts/hcnmgr
index a76505e..e4b56d6 100644
--- a/scripts/hcnmgr
+++ b/scripts/hcnmgr
@@ -241,7 +241,10 @@ get_dev_hcn() {
# Let's retry a few times.
while [ $wait != 0 ]; do
if DEVNAME=$(ofpathname -l "$(echo "$1" | sed -e "s/\/proc\/device-tree//")" 2>/dev/null); then
- break
+ if [ -e /sys/class/net/"$DEVNAME" ]; then
+ hcnlog DEBUG "ofpathname waiting for /sys/class/net device $DEVNAME ready"
+ break
+ fi
fi
hcnlog DEBUG "ofpathname return $?, devname is $DEVNAME rety counter $wait"
@@ -278,9 +281,7 @@ do_config_vdevice() {
BOND_PATH=$BOND_BASEPATH/$BONDNAME/bonding
hcnlog DEBUG "Check if there is bond $BONDNAME with hcn id $HCNID"
-
- hcnlog DEBUG "ifconfig file $IFCONFIG_PATH/ifconfig-$BONDNAME"
- if [ ! -e "$IFCONFIG_PATH/ifcfg-$BONDNAME" ]; then
+ if ! nmcli -f NAME con show --active | grep -q "$BONDNAME\s"; then
hcnlog INFO "nmcli con add type bond con-name $BONDNAME ifname $BONDNAME"
nmcli con add type bond con-name "$BONDNAME" ifname "$BONDNAME"
@@ -375,7 +376,10 @@ rmhcn() {
fi
hcnlog INFO "rmhcn: delete bond $BONDNAME and slaves "
- nmcli -f NAME con show | grep "$BONDNAME" | xargs sudo nmcli con delete
+ for connection in $(nmcli -f NAME con show | grep "$BONDNAME"); do
+ hcnlog INFO "Delete bonding connection $connection"
+ nmcli con delete "$connection"
+ done
hcnlog DEBUG "rmhcn: exit"
return $E_SUCCESS
}
@@ -576,19 +580,24 @@ scanhcn() {
fi
# Next clean up dead connections left from orgitinal LPAR after inactive miration
-
- # list of all HCN ids
- ids="${HcnIds[*]}"
- # After inactive migration, LPAR may have old bonding connections
- # with network device on original LPAR
- # clean up dead bonding connections
- for connection in $(nmcli -f NAME con show | grep "${ids// /\\|}"); do
- dev=$(echo "$connection" | cut -d '-' -f 2)
- if [[ $dev != "NAME" && ! -e /sys/class/net/"$dev" ]]; then
- hcnlog INFO "Delete dead bonding connection $connection"
- nmcli con delete "$connection"
- fi
- done
+ # Only do this when the HNV ID array is not empty
+
+ if [[ ${HcnIds[[@]} ]]; then
+ hcnlog INFO "hcnscan finished. Found HNV devices on this LPAR"
+
+ # list of all HCN ids
+ ids="${HcnIds[*]}"
+ # After inactive migration, LPAR may have old bonding connections
+ # with network device on original LPAR
+ # clean up dead bonding connections
+ for connection in $(nmcli -f NAME con show | grep "${ids// /\\|}"); do
+ dev=$(echo "$connection" | cut -d '-' -f 2)
+ if [[ $dev != "NAME" && ! -e /sys/class/net/"$dev" ]]; then
+ hcnlog INFO "Delete dead bonding connection $connection"
+ nmcli con delete "$connection"
+ fi
+ done
+ fi
hcnlog DEBUG "scanhcn: scan for hybrid virtual network finished"
}

View File

@ -1,52 +0,0 @@
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 2020-10-01 13:09:19.969454947 +0200
+++ powerpc-utils-1.3.8/man/hcnmgr.8 2020-10-01 13:09:29.969148204 +0200
@@ -0,0 +1,35 @@
+.TH hcnmgr "01 October 2020" "Linux" "Linux on Power Service Tools"
+.RS
+hcnmgr contains a set of commands to support migratable SR_IOV logical port.
+The new commands configure/query/remove network devices. New commands should
+be called from the HMC, rather than directly from linux LPAR
+.PP
+Usage: hcncfgdrc DRC_INDEX=<drc_index> [STAKE_TOKEN=NULL] [\fB-d\fP]
+Configure a device to hybrid network HCN
+.PP
+Usage: hcnrmhcn HCN_ID=<hcnid>
+Remove a hybrid network HCN given an HCN ID
+.PP
+Usage: hcnrmdev DRC_INDEX=<drc_index> HCN_ID=<hcnid>
+Unconfigure device from HCN
+.PP
+Usage: hcnqrydev DRC_INDEX=<drc_index> HCN_ID=<hcnid>
+Query a device given a DRC_INDEX or HCN ID
+.PP
+Usage: hcnversion
+get the current version of the HCN support
+.PP
+Optional arguments.
+.RS
+.TP
+.B
+\fB-s\fP
+scan device-tree and configure HCN
+.TP
+.B
+\fB-V\fP
+Display version information and exit
+.TP
+.B
+\fB-h\fP
+Display this help information and exit
diff -up powerpc-utils-1.3.8/Makefile.am.me powerpc-utils-1.3.8/Makefile.am
--- powerpc-utils-1.3.8/Makefile.am.me 2020-10-01 13:33:29.444024403 +0200
+++ powerpc-utils-1.3.8/Makefile.am 2020-10-01 13:34:08.284854506 +0200
@@ -56,7 +56,8 @@ man_MANS = \
man/nvsetenv.8 \
man/ls-vscsi.8 \
man/pseries_platform.8 \
- man/update_flash_nv.8
+ man/update_flash_nv.8 \
+ man/hcnmgr.8
EXTRA_DIST += $(bin_SCRIPTS) $(sbin_SCRIPTS) $(man_MANS)

View File

@ -1,14 +0,0 @@
diff -up powerpc-utils-1.3.8/Makefile.am.me powerpc-utils-1.3.8/Makefile.am
--- powerpc-utils-1.3.8/Makefile.am.me 2020-09-04 11:37:54.042763518 +0200
+++ powerpc-utils-1.3.8/Makefile.am 2020-09-04 11:39:06.262151924 +0200
@@ -54,7 +54,9 @@ man_MANS = \
man/lsprop.8 \
man/ls-veth.8 \
man/nvsetenv.8 \
- man/ls-vscsi.8
+ man/ls-vscsi.8 \
+ man/pseries_platform.8 \
+ man/update_flash_nv.8
EXTRA_DIST += $(bin_SCRIPTS) $(sbin_SCRIPTS) $(man_MANS)

View File

@ -1,19 +0,0 @@
diff -up powerpc-utils-1.3.8/Makefile.am.me powerpc-utils-1.3.8/Makefile.am
--- powerpc-utils-1.3.8/Makefile.am.me 2020-09-04 11:34:16.575570705 +0200
+++ powerpc-utils-1.3.8/Makefile.am 2020-09-04 11:35:36.499111663 +0200
@@ -47,7 +47,14 @@ man_MANS = \
man/errinjct.8 \
man/vcpustat.8 \
man/rtas_dbg.8 \
- man/drmgr.8
+ man/drmgr.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
EXTRA_DIST += $(bin_SCRIPTS) $(sbin_SCRIPTS) $(man_MANS)

View File

@ -0,0 +1,98 @@
commit b1b9e76de0f3ab1dfcd9426779fa20fd77cd5625
Author: Luciano Chavez <lnx1138@linux.ibm.com>
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 <lnx1138@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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 <quantity> -p {variable_weight | ent_capacity} | {-q <quantity> | -s [<drc_name> | <drc_index>]}}";
@@ -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;

View File

@ -0,0 +1,29 @@
commit e1f1deb06d9168a95a381a2236e1d8c693d3d229
Author: Luciano Chavez <lnx1138@linux.ibm.com>
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 <lnx1138@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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 ");

View File

@ -0,0 +1,93 @@
commit f4c2b0d142f623e7dd28a5d685e446d41be75601
Author: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Date: Thu Aug 25 12:19:27 2022 +0530
lparstat: Fix display of mode for dedicated-donating partition
From the lparstat man page:
mode
Indicates whether the partition processor capacity is capped or uncapped
allowing it to consume idle cycles from the shared pool. Dedicated LPAR
is capped or donating.
However, on a dedicated partition, lparstat always displays the mode as
'Capped' today. Fix this by using 'DedDonMode' field from lparcfg for
determining the cycle donation status of a dedicated partition.
On a dedicated-donating partition:
$ grep -e shared -e DedDonMode -e capped /proc/powerpc/lparcfg
DedDonMode=1
capped=1
shared_processor_mode=0
Before this patch:
$ lparstat
System Configuration
type=Dedicated mode=Capped smt=8 lcpu=1 mem=3335424 kB cpus=0 ent=1.00
After this patch:
$ lparstat
System Configuration
type=Dedicated mode=Donating smt=8 lcpu=1 mem=3335424 kB cpus=0 ent=1.00
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Reviewed-by: Nathan Lynch <nathanl@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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",

View File

@ -0,0 +1,27 @@
commit acaf9c45a340f9bb49d6b21ba7ad60c21326ea73
Author: Mingming Cao <mmc@linux.vnet.ibm.com>
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 <mmc@linux.vnet.ibm.com>
[tyreld: Reworded commit log]
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
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"

View File

@ -1,40 +0,0 @@
lparstat -E option reports the actual and normalized system utilization
based on the PURR/SPURR registers. Update the lparstat man page too with
the -E option details.
Reported-by: Pavithra Prakash <pavr...@in.ibm.com>
Signed-off-by: Kamalesh Babulal <kama...@linux.vnet.ibm.com>
---
Applies on top of next branch.
man/lparstat.8 | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/man/lparstat.8 b/man/lparstat.8
index 0f4c923aaef5..d00e42600165 100644
--- a/man/lparstat.8
+++ b/man/lparstat.8
@@ -209,6 +209,17 @@ The variable memory capacity weight of the LPAR.
.TP
.SH
.TP
+\fB\-E\fR
+Display Scaled Processor Utilization Resource Register(SPURR) based CPU utilization.
+.RS
+.RS
+Actual CPU utilization is based on Processor Utilization Resource Register(PURR).
+.RS
+.RE
+Normalized CPU utilization is based on Scaled Processor Utilization Resource Register(SPURR).
+.TP
+.SH
+.TP
\fB\-l, --legacy\fR
Display the report in legacy format.
.RS
base-commit: 60d9f54b13b75feee3fd7b25a92b24d0d97ea984
--
2.26.2

View File

@ -1,13 +1,27 @@
Name: powerpc-utils
Version: 1.3.8
Release: 5%{?dist}
Version: 1.3.10
Release: 6%{?dist}
Summary: PERL-based scripts for maintaining and servicing PowerPC systems
Group: System Environment/Base
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: nvsetenv
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
Patch5: powerpc-utils-fix_setting_primary_slave_across_reboots.patch
Patch6: powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch
# lparstat: Fix-negative-values-seen-while-running-lpar
Patch10: powerpc-utils-1.3.10-lparstat-Fix-negative-values-seen-while-running-lpar.patch
# report-mixed-SMT-state
Patch11: powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch
# Fix-offline-threads-uninitialized-entries
Patch12: powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch
ExclusiveArch: ppc %{power64}
@ -20,25 +34,12 @@ 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}
Patch1: powerpc-utils-1.3.8-man.patch
Patch2: powerpc-utils-1.3.8-makefile.patch
Patch3: powerpc-utils-1.3.5-pseries_platform-man.patch
Patch4: powerpc-utils-1.3.5-update_flash_nv.patch
Patch5: powerpc-utils-1.3.8-install-man.patch
Patch6: powerpc-utils-manpage-lparstat.patch
Patch7: powerpc-utils-1.3.8-hcnmgr.patch
Patch8: 0001-ofpathname-Use-NVMe-controller-physical-nsid.patch
Patch9: 0002-sys_ident--skip-length-field-from-search.patch
Patch10: powerpc-utils-1.3.8-f1ec5f04fdac3e87c3c85c2d85f79339d916e864.patch
Patch11: powerpc-utils-1.3.8-4b2d10942e2d964ecc1fe58c9460c34993ff10be.patch
Patch12: powerpc-utils-1.3.8-e51995667279164a6c8ce4c3ba0217fffda22d6d.patch
Patch13: powerpc-utils-1.3.8-fix_boot-time_bonding_interface_cleanup_and_avoid_use_ifcfg.patch
%description
PERL-based scripts for maintaining and servicing PowerPC systems.
@ -50,20 +51,13 @@ Requires(preun): systemd
Requires(postun): systemd
Requires: kmod
Requires: which
Requires: /usr/bin/awk
Requires: /usr/bin/basename
Requires: /usr/bin/bc
Requires: /usr/bin/cat
Requires: /usr/bin/cut
Requires: /usr/bin/echo
Requires: /usr/bin/find
Requires: /bin/grep
Requires: /usr/bin/head
Requires: /usr/bin/ls
Requires: /usr/bin/sed
Requires: /usr/bin/tr
Requires: /usr/bin/udevadm
Requires: gawk
Requires: bc
Requires: findutils
Requires: grep
Requires: sed
Requires: systemd-udev
Requires: coreutils
%description core
Core utilities for maintaining and servicing PowerPC systems.
@ -82,7 +76,6 @@ make %{?_smp_mflags}
%install
make install DESTDIR=$RPM_BUILD_ROOT FILES= RCSCRIPTS=
install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_sbindir}/nvsetenv
#define pkgdocdir {_datadir}/doc/{name}-{version}
%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{name}-%{version}}
@ -93,6 +86,9 @@ install $RPM_BUILD_ROOT/usr/share/doc/packages/powerpc-utils/* -t $RPM_BUILD_ROO
rm -rf $RPM_BUILD_ROOT/usr/share/doc/packages/powerpc-utils
rm -f $RPM_BUILD_ROOT%{_pkgdocdir}/COPYING
# install udev rule for the nx-gzip accelerator
install -pDm 644 %{SOURCE1} %{buildroot}%{_udevrulesdir}/90-nx-gzip.rules
# remove init script and perl script. They are deprecated
rm -rf $RPM_BUILD_ROOT/etc/init.d/ibmvscsis.sh $RPM_BUILD_ROOT/usr/sbin/vscsisadmin
@ -107,26 +103,20 @@ ln -s serv_config.8 %{buildroot}%{_mandir}/man8/uspchrp.8
rm -f $RPM_BUILD_ROOT%{_sbindir}/snap $RPM_BUILD_ROOT%{_mandir}/man8/snap.8*
%post core
systemctl daemon-reload >/dev/null 2>&1 || :
systemctl start hcn-init.service >/dev/null 2>&1 || :
systemctl enable hcn-init.service >/dev/null 2>&1 || :
%systemd_post hcn-init.service
# update the smt.state file with current SMT
/usr/sbin/smtstate --save >/dev/null 2>&1 || :
%preun core
svc=$(systemctl list-units -la | grep -Fq smtstate.service; echo $?)
if [ "$svc" = "0" ]; then
systemctl stop smtstate.service >/dev/null 2>&1 || :
systemctl disable smtstate.service >/dev/null 2>&1 || :
fi
if systemctl is-enabled hcn-init.service |grep -q "enabled"; then
systemctl stop hcn-init.service >/dev/null 2>&1 || :
systemctl disable hcn-init.service >/dev/null 2>&1 || :
fi
%systemd_preun smtstate.service
%systemd_preun hcn-init.service
%postun core
systemctl daemon-reload >/dev/null 2>&1 || :
%systemd_postun_with_restart smtstate.service
%systemd_postun_with_restart hcn-init.service
%posttrans core
systemctl enable hcn-init.service >/dev/null 2>&1 || :
%files
# PERL-based scripts for maintaining and servicing PowerPC systems
@ -138,8 +128,8 @@ systemctl daemon-reload >/dev/null 2>&1 || :
%files core
%license COPYING
%dir /var/lib/powerpc-utils
/var/lib/powerpc-utils/smt.state
%dir %{_localstatedir}/lib/powerpc-utils
%config(noreplace) %{_localstatedir}/lib/powerpc-utils/smt.state
%{_unitdir}/smtstate.service
%{_unitdir}/smt_off.service
%{_unitdir}/hcn-init.service
@ -178,6 +168,8 @@ systemctl daemon-reload >/dev/null 2>&1 || :
%{_sbindir}/ofpathname
%{_sbindir}/pseries_platform
%{_sbindir}/drmgr
%{_sbindir}/lparnumascore
%{_udevrulesdir}/90-nx-gzip.rules
%{_mandir}/man1/amsstat.1*
%{_mandir}/man5/lparcfg.5*
%{_mandir}/man8/activate_firmware.8*
@ -209,8 +201,57 @@ systemctl daemon-reload >/dev/null 2>&1 || :
%{_mandir}/man8/nvram.8*
%{_mandir}/man8/ofpathname.8*
%{_mandir}/man8/drmgr.8*
%{_mandir}/man8/lparnumascore.8*
%changelog
* Wed Jul 26 2023 Than Ngo <than@redhat.com> - 1.3.10-6
- Fix negative values seen while running lpar
- Fix lparstat error with mixed SMT state
Resolves: #2225135
* Sat Jun 17 2023 Than Ngo <than@redhat.com> - 1.3.10-5
- Resolves: #2207649, Add udev rule for the nx-gzip in to the core subpackage
* Tue Apr 25 2023 Than Ngo <than@redhat.com> - 1.3.10-4
- Resolves: #2166871, lparstat showing incorrect mode in a dedicated-donating LPAR
* Mon Nov 28 2022 Than Ngo <than@redhat.com> - 1.3.10-3
- Resolves: #2148878, HNV bond fails to come up with sriov interface as active slave
* Fri Oct 21 2022 Than Ngo <than@redhat.com> - 1.3.10-2
- Resolves: #2121481, Fix lsslot -c mem output when using 4GB LMB size
* Mon Jun 06 2022 Than Ngo <than@redhat.com> - 1.3.10-1
- Resolves: #2051330, Linux Hybrid Network Virtualization update
- Resolves: #2083469, smtstate --save command failed
* Fri May 13 2022 Than Ngo <than@redhat.com> - 1.3.9-3
- Resolves: #2059459, add new DRC type description strings for latest PCIe slot types
- Resolves: #2078514, Fix NM HNV setting primary slave
- Resolves: #2083469, smtstate test failed as smtstate --save command failed
* Thu Dec 09 2021 Than Ngo <than@redhat.com> - 1.3.9-1
- Resolves: #2028690, rebase to 1.3.9
* Thu Dec 02 2021 Than Ngo <than@redhat.com> - 1.3.8-10
- Related: #2022225, increase release
* Thu Nov 11 2021 Than Ngo <than@redhat.com> - 1.3.8-9
- Resolves: #2022225, enable support vnic as backend for HNV interfaces
* Thu Oct 07 2021 Than Ngo <than@redhat.com> - 1.3.8-8
- lsdevinfo: optimize criteria filtering
* Fri Jul 16 2021 Than Ngo <than@redhat.com> - 1.3.8-7
- Related: #1938420, Fix checking HCNID array size at boot time
* Thu Apr 01 2021 Than Ngo <than@redhat.com> - 1.3.8-6
- Resolves: #1935658, New lparstat -x option to report the security flavor
- Resolves: #1953818, Use od instead xxd
- Resolves: #1938420, rebase patch fix_boot-time_bonding_interface_cleanup_and_avoid_use_ifcfg
- Resolves: #1940358, ppc64_cpu --help does not list --version as an option
- Resolves: #1951068, take care of NUMA topology when removing memory (DLPAR)
* Wed Feb 03 2021 Than Ngo <than@redhat.com> - 1.3.8-5
- Resolves: #1924150, Fix boot-time bonding interface cleanup and avoid use ifcfg