Import from AlmaLinux stable repository
This commit is contained in:
		
							parent
							
								
									d0933a66d1
								
							
						
					
					
						commit
						c3edfab135
					
				| @ -0,0 +1,171 @@ | |||||||
|  | From edf7ee0e03e60140bcbe34ec458e1361678a5dd2 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Wen Xiong <wenxiong@linux.ibm.com> | ||||||
|  | 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 <wenxiong@linux.ibm.com> | ||||||
|  | ---
 | ||||||
|  |  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 | ||||||
| @ -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", | ||||||
| @ -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); | ||||||
|  |  } | ||||||
| @ -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
 | diff -up powerpc-utils-1.3.10/Makefile.am.than powerpc-utils-1.3.10/Makefile.am
 | ||||||
| --- powerpc-utils-1.3.5/man/pseries_platform.8.me	2018-11-29 16:50:07.601034729 +0100
 | --- powerpc-utils-1.3.10/Makefile.am.than	2023-11-27 22:07:33.391345328 +0100
 | ||||||
| +++ powerpc-utils-1.3.5/man/pseries_platform.8	2018-11-29 16:50:07.601034729 +0100
 | +++ powerpc-utils-1.3.10/Makefile.am	2023-11-27 22:06:38.715373360 +0100
 | ||||||
| @@ -0,0 +1,11 @@
 | @@ -26,6 +26,16 @@ sbin_SCRIPTS = \
 | ||||||
| +.\"
 |  	scripts/hcnmgr | ||||||
| +.\" Copyright (C) 2015 International Business Machines
 |   | ||||||
| +.\"
 |  man_MANS = \ | ||||||
| +.TH pseries_platform 8 "September 2015" Linux "Linux on Power Service Tools"
 | +	man/lsdevinfo.8 \
 | ||||||
| +.SH NAME
 | +	man/rtas_event_decode.8 \
 | ||||||
| +pseries_platform \- identify the platform and display the name of platform
 | +	man/ls-vdev.8 \
 | ||||||
| +.SH SYNOPSIS
 | +	man/lsprop.8 \
 | ||||||
| +.B /usr/bin/pseries_platform
 | +	man/ls-veth.8 \
 | ||||||
| +
 | +	man/nvsetenv.8 \
 | ||||||
| +.SH DESCRIPTION
 | +	man/ls-vscsi.8 \
 | ||||||
| +The \fIpseries_platform\fR tool can identify the platform and display the name of platform.
 | +	man/pseries_platform.8 \
 | ||||||
| diff -up powerpc-utils-1.2.15/man/lsdevinfo.8.man powerpc-utils-1.2.15/man/lsdevinfo.8
 | +	man/update_flash_nv.8 \
 | ||||||
| --- powerpc-utils-1.2.15/man/lsdevinfo.8.man	2013-01-16 15:31:13.886591137 +0100
 | +	man/hcnmgr.8 \
 | ||||||
| +++ powerpc-utils-1.2.15/man/lsdevinfo.8	2013-01-16 15:31:13.886591137 +0100
 |  	man/activate_firmware.8 \ | ||||||
| @@ -0,0 +1,39 @@
 |  	man/rtas_ibm_get_vpd.8 \ | ||||||
| +.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.36.
 |  	man/uesensor.8 \ | ||||||
| +.TH LSDEVINFO "8" "October 2010" "Linux" "Linux on Power Service Tools"
 | diff -up powerpc-utils-1.3.10/man/hcnmgr.8.than powerpc-utils-1.3.10/man/hcnmgr.8
 | ||||||
| +.SH NAME
 | --- powerpc-utils-1.3.10/man/hcnmgr.8.than	2023-11-27 22:05:20.283979110 +0100
 | ||||||
| +lsdevinfo - information on Virtual devices
 | +++ powerpc-utils-1.3.10/man/hcnmgr.8	2023-11-27 22:05:20.283979110 +0100
 | ||||||
| +
 |  | ||||||
| +.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 <sleon@ec.ibm.com>.
 |  | ||||||
| +.PP
 |  | ||||||
| +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 |  | ||||||
| +
 |  | ||||||
| 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 <brking@linux.vnet.ibm.com>.
 |  | ||||||
| +.PP
 |  | ||||||
| +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 |  | ||||||
| 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 <brking@linux.vnet.ibm.com>.
 |  | ||||||
| +.PP
 |  | ||||||
| +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 |  | ||||||
| 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 <brking@linux.vnet.ibm.com>.
 |  | ||||||
| +.PP
 |  | ||||||
| +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 |  | ||||||
| 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
 |  | ||||||
| @@ -0,0 +1,47 @@
 | @@ -0,0 +1,47 @@
 | ||||||
| +.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.6.
 | +.\" 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"
 | +.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 <mingming.cao@ibm.com>.
 | +was written by Mingming Cao <mingming.cao@ibm.com>.
 | ||||||
| +.PP
 | +.PP
 | ||||||
| +This manual page was written by Than Ngo <than@redhat.com>.
 | +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
 | diff -up powerpc-utils-1.3.10/man/lsdevinfo.8.than powerpc-utils-1.3.10/man/lsdevinfo.8
 | ||||||
| --- powerpc-utils-1.3.5/man/update_flash_nv.8.me	2018-11-29 16:49:51.344987106 +0100
 | --- powerpc-utils-1.3.10/man/lsdevinfo.8.than	2023-11-27 22:05:20.282979092 +0100
 | ||||||
| +++ powerpc-utils-1.3.5/man/update_flash_nv.8	2018-11-29 16:49:42.589961458 +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 <sleon@ec.ibm.com>.
 | ||||||
|  | +.PP
 | ||||||
|  | +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 | ||||||
|  | +
 | ||||||
|  | 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 <brking@linux.vnet.ibm.com>.
 | ||||||
|  | +.PP
 | ||||||
|  | +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 | ||||||
|  | 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 <brking@linux.vnet.ibm.com>.
 | ||||||
|  | +.PP
 | ||||||
|  | +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 | ||||||
|  | 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 <brking@linux.vnet.ibm.com>.
 | ||||||
|  | +.PP
 | ||||||
|  | +This manual page was written by Roman Rakus <rrakus@redhat.com>.
 | ||||||
|  | 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 @@
 | @@ -0,0 +1,15 @@
 | ||||||
| +.\"
 | +.\"
 | ||||||
| +.\" Copyright (C) 2015 International Business Machines
 | +.\" 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
 | +.SH SEE ALSO
 | ||||||
| +update_flash(8).
 | +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) |  | ||||||
|   |  | ||||||
|  | |||||||
| @ -0,0 +1,34 @@ | |||||||
|  | commit 1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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 <nathanl@linux.ibm.com> | ||||||
|  |     Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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; | ||||||
|  |  } | ||||||
| @ -0,0 +1,79 @@ | |||||||
|  | commit 372599ed28d65a79d4c3b3405a8e04034eb58e09 | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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 <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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; | ||||||
|  |  } | ||||||
| @ -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; | ||||||
| @ -0,0 +1,120 @@ | |||||||
|  | commit 7698adc945372e901c2bc3f7066a5a1c219bf1d8 | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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 <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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 <ldufour@linux.ibm.com>
 | ||||||
|  | +.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)"
 | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | commit 8a7aa61c5f520df03e53e6f7e1d63b7d5c432376 | ||||||
|  | Author: Wen Xiong <wenxiong@linux.ibm.com> | ||||||
|  | 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 <wenxiong@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
| @ -0,0 +1,36 @@ | |||||||
|  | commit c3ce3040ea9ed49345756136d61eb402e32402e8 | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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 <nathanl@linux.ibm.com> | ||||||
|  |     Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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 { | ||||||
| @ -0,0 +1,93 @@ | |||||||
|  | commit d0bc79aedaf76eff09a5d1f399da09561a4d4d7d | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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 <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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;
 | ||||||
|  |  } | ||||||
| @ -0,0 +1,219 @@ | |||||||
|  | commit e0928dc5e5375591a4cff6ffabc6063771288f59 | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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/<DRC TYPE NAME>/) | ||||||
|  |      | ||||||
|  |     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 <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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); | ||||||
| @ -0,0 +1,47 @@ | |||||||
|  | commit f2a4619ef6be747f53e5f631f8b23b5edb9bb023 | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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 <nathanl@linux.ibm.com> | ||||||
|  |     Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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", | ||||||
| @ -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", | ||||||
							
								
								
									
										70
									
								
								SOURCES/powerpc-utils-rtas_dbg_return_negativ_value.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								SOURCES/powerpc-utils-rtas_dbg_return_negativ_value.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | commit 9caa77e4477a73064a6deea253fd3faea32648fb | ||||||
|  | Author: Likhitha Korrapati <likhitha@linux.ibm.com> | ||||||
|  | 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 <shirisha@linux.ibm.com> | ||||||
|  |     Signed-off-by: Likhitha Korrapati <likhitha@linux.ibm.com> | ||||||
|  |     Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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); | ||||||
|  |   | ||||||
| @ -0,0 +1,65 @@ | |||||||
|  | commit 46c524be975a108d2b8d1cadb95003b9c2670c8e | ||||||
|  | Author: Laurent Dufour <ldufour@linux.ibm.com> | ||||||
|  | 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<n>/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 <ldufour@linux.ibm.com> | ||||||
|  | 
 | ||||||
|  | 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; | ||||||
| @ -1,17 +1,20 @@ | |||||||
| Name: powerpc-utils | Name: powerpc-utils | ||||||
| Version: 1.3.10 | Version: 1.3.10 | ||||||
| Release:        5%{?dist} | Release: 10%{?dist} | ||||||
| Summary: PERL-based scripts for maintaining and servicing PowerPC systems | Summary: PERL-based scripts for maintaining and servicing PowerPC systems | ||||||
| 
 | 
 | ||||||
| License: GPLv2 | License: GPLv2 | ||||||
| URL: https://github.com/ibm-power-utilities/powerpc-utils | URL: https://github.com/ibm-power-utilities/powerpc-utils | ||||||
| Source0: https://github.com/ibm-power-utilities/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz | Source0: https://github.com/ibm-power-utilities/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz | ||||||
| Source1: nx-gzip.udev | Source1: nx-gzip.udev | ||||||
|  | 
 | ||||||
| Patch0: powerpc-utils-1.3.10-manpages.patch | Patch0: powerpc-utils-1.3.10-manpages.patch | ||||||
| Patch1: powerpc-utils-1.3.10-distro.patch | Patch1: powerpc-utils-1.3.10-distro.patch | ||||||
|  | 
 | ||||||
| # bz#2121470, Fix lsslot -c mem output when using 4GB LMB size | # bz#2121470, Fix lsslot -c mem output when using 4GB LMB size | ||||||
| Patch3: powerpc-utils-b1b9e7-LMB_size_4GB.patch | Patch3: powerpc-utils-b1b9e7-LMB_size_4GB.patch | ||||||
| Patch4: powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch | Patch4: powerpc-utils-e1f1de-lmb_address_in_hexadecimal.patch | ||||||
|  | 
 | ||||||
| # bz#2110129, Add NVMf-FC boot support for Power - powerpc-utils | # bz#2110129, Add NVMf-FC boot support for Power - powerpc-utils | ||||||
| Patch5: powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch | Patch5: powerpc-utils-c01580-add_NVMf-FC_boot_support_part1.patch | ||||||
| Patch6: powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch | Patch6: powerpc-utils-2fbd7c-add_NVMf-FC_boot_support_part2.patch | ||||||
| @ -19,6 +22,36 @@ Patch7:         powerpc-utils-git3847a1-support_multiple_dev_paths_for_a_nvmf_bo | |||||||
| Patch8: powerpc-utils-git04e5c9-handle_nsid_as_hex.patch | Patch8: powerpc-utils-git04e5c9-handle_nsid_as_hex.patch | ||||||
| Patch9: powerpc-utils-fix_setting_primary_slave_across_reboots.patch | Patch9: powerpc-utils-fix_setting_primary_slave_across_reboots.patch | ||||||
| 
 | 
 | ||||||
|  | # lparstat: Fix display of mode for dedicated-donating partition | ||||||
|  | Patch10: powerpc-utils-f4c2b0-fix_display_of_mode_for_dedicated_donating_partition.patch | ||||||
|  | 
 | ||||||
|  | # lparstat: Fix negative values seen while running lparstat with -E option | ||||||
|  | Patch11: powerpc-utils-73ba26-lparstat-fix_negative_values.patch | ||||||
|  | 
 | ||||||
|  | # report-mixed-SMT-state | ||||||
|  | Patch12: powerpc-utils-1.3.10-lparstat-report-mixed-SMT-state.patch | ||||||
|  | 
 | ||||||
|  | # Fix-offline-threads-uninitialized-entries | ||||||
|  | Patch13: powerpc-utils-1.3.10-lparstat-Fix-offline-threads-uninitialized-entries.patch | ||||||
|  | 
 | ||||||
|  | # ppc64_cpu: Support partial SMT level through SYS FS smt/control files | ||||||
|  | Patch14: powerpc-utils-support_partial_SMT_level_through_SYS_FS.patch | ||||||
|  | 
 | ||||||
|  | # new hook mechanism has been introduced in powerpc-utils allowing application to be aware of the ongoing LPM | ||||||
|  | patch15: powerpc-utils-c3ce3040ea9ed49345756136d61eb402e32402e8.patch | ||||||
|  | patch16: powerpc-utils-1ac96f8ab7c27095be90eb2e69ae57e8b43eccbe.patch | ||||||
|  | Patch17: powerpc-utils-f2a4619ef6be747f53e5f631f8b23b5edb9bb023.patch | ||||||
|  | Patch18: powerpc-utils-372599ed28d65a79d4c3b3405a8e04034eb58e09.patch | ||||||
|  | Patch19: powerpc-utils-e0928dc5e5375591a4cff6ffabc6063771288f59.patch | ||||||
|  | Patch20: powerpc-utils-d0bc79aedaf76eff09a5d1f399da09561a4d4d7d.patch | ||||||
|  | Patch21: powerpc-utils-7698adc945372e901c2bc3f7066a5a1c219bf1d8.patch | ||||||
|  | # lpar can't boot up after installation if nsid of nvme device is greater than 10. | ||||||
|  | Patch22: powerpc-utils-8a7aa61c5f520df03e53e6f7e1d63b7d5c432376.patch | ||||||
|  | # rtas_dbg -l returns large negativ value | ||||||
|  | Patch23: powerpc-utils-rtas_dbg_return_negativ_value.patch | ||||||
|  | # Support multiple dev paths for a nvme boot device | ||||||
|  | Patch24: 0001-scripts-bootlist-Support-multiple-dev-paths-for-a-nv.patch | ||||||
|  | 
 | ||||||
| ExclusiveArch: ppc %{power64} | ExclusiveArch: ppc %{power64} | ||||||
| 
 | 
 | ||||||
| BuildRequires: gcc | BuildRequires: gcc | ||||||
| @ -104,6 +137,9 @@ ln -s serv_config.8 %{buildroot}%{_mandir}/man8/uspchrp.8 | |||||||
| # deprecated, use sosreport instead | # deprecated, use sosreport instead | ||||||
| rm -f $RPM_BUILD_ROOT%{_sbindir}/snap $RPM_BUILD_ROOT%{_mandir}/man8/snap.8* | 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 | %post core | ||||||
| %systemd_post hcn-init.service | %systemd_post hcn-init.service | ||||||
| # update the smt.state file with current SMT | # update the smt.state file with current SMT | ||||||
| @ -131,6 +167,7 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || : | |||||||
| %files core | %files core | ||||||
| %license COPYING | %license COPYING | ||||||
| %dir %{_localstatedir}/lib/powerpc-utils | %dir %{_localstatedir}/lib/powerpc-utils | ||||||
|  | %dir /etc/drmgr.d/pmig | ||||||
| %config(noreplace) %{_localstatedir}/lib/powerpc-utils/smt.state | %config(noreplace) %{_localstatedir}/lib/powerpc-utils/smt.state | ||||||
| %{_unitdir}/smtstate.service | %{_unitdir}/smtstate.service | ||||||
| %{_unitdir}/smt_off.service | %{_unitdir}/smt_off.service | ||||||
| @ -203,10 +240,32 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || : | |||||||
| %{_mandir}/man8/nvram.8* | %{_mandir}/man8/nvram.8* | ||||||
| %{_mandir}/man8/ofpathname.8* | %{_mandir}/man8/ofpathname.8* | ||||||
| %{_mandir}/man8/drmgr.8* | %{_mandir}/man8/drmgr.8* | ||||||
|  | %{_mandir}/man8/drmgr-hooks.8* | ||||||
| %{_mandir}/man8/lparnumascore.8* | %{_mandir}/man8/lparnumascore.8* | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Jan 30 2024 Than Ngo <than@redhat.com> - 1.3.10-10 | ||||||
|  | - Resolves: RHEL-22830, Support multiple dev paths for a nvme boot device | ||||||
|  | 
 | ||||||
|  | * Wed Jan 10 2024 Than Ngo <than@redhat.com> - 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 <than@redhat.com> - 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 <than@redhat.com> - 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 <than@redhat.com> - 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 <than@redhat.com> - 1.3.10-5 | * Mon Dec 12 2022 Than Ngo <than@redhat.com> - 1.3.10-5 | ||||||
| - Resolves: #2125152, HNV bond fails to come up with sriov interface as active slave | - Resolves: #2125152, HNV bond fails to come up with sriov interface as active slave | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user