[s390utils/f19] - update with patches from RHEL-6 - rebase zIPL to 1.21 to fix booting from FBA DASD (#970859)
Dan Horák
sharkcz at fedoraproject.org
Wed Jun 5 14:43:39 UTC 2013
commit 92554497c5f192e7aab553079ebe17d91062eb37
Author: Dan Horák <dan at danny.cz>
Date: Wed Jun 5 16:43:28 2013 +0200
- update with patches from RHEL-6
- rebase zIPL to 1.21 to fix booting from FBA DASD (#970859)
s390-tools-1.20.0-fedora.patch | 739 +++++++++++++++++++++++++++++++++++++++-
s390utils.spec | 6 +-
2 files changed, 736 insertions(+), 9 deletions(-)
---
diff --git a/s390-tools-1.20.0-fedora.patch b/s390-tools-1.20.0-fedora.patch
index a62eded..d6c882f 100644
--- a/s390-tools-1.20.0-fedora.patch
+++ b/s390-tools-1.20.0-fedora.patch
@@ -1,11 +1,11 @@
From 1ef1449e23dfeed77186a03f103221992029fb7e Mon Sep 17 00:00:00 2001
From: Dan Horak <dan at danny.cz>
Date: Sun, 20 Jul 2008 09:24:05 +0200
-Subject: [PATCH 1/2] s390-tools-1.5.3-zipl-zfcpdump-2
+Subject: [PATCH 1/7] s390-tools-1.5.3-zipl-zfcpdump-2
---
- common.mak | 4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ common.mak | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common.mak b/common.mak
index a15e3e6..83e052f 100644
@@ -23,17 +23,17 @@ index a15e3e6..83e052f 100644
export ZFCPDUMP_DIR ZFCPDUMP_IMAGE ZFCPDUMP_RD
--
-1.7.7.6
+1.8.1.4
From 9d80e20eaa26d89612f2b93452c5012ea26af9a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Thu, 23 Apr 2009 11:46:01 +0200
-Subject: [PATCH 2/2] s390-tools-1.8.1-fdasd-su
+Subject: [PATCH 2/7] s390-tools-1.8.1-fdasd-su
---
- fdasd/fdasd.c | 10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ fdasd/fdasd.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c
index ba22475..f2ac417 100644
@@ -57,5 +57,728 @@ index ba22475..f2ac417 100644
if (anc->verbose) printf("disk layout check : ok\n");
--
-1.7.7.6
+1.8.1.4
+
+
+From 1a5cf421cd33c8481b365dd83e25dc0513350270 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
+Date: Wed, 5 Jun 2013 16:09:46 +0200
+Subject: [PATCH 3/7] ziomon: cope with scsi disks not part of multipath device
+
+Description: ziomon: cope with scsi disks not part of multipath device
+Symptom: # ziorep_config -M
+ or
+ # ziorep_config -M -i some.cfg
+ Use of uninitialized value within %mapper_dev in \
+ concatenation (.) or string at /usr/sbin/ziorep_config \
+ line 305.
+ ...
+ or
+ Use of uninitialized value in concatenation (.) or string \
+ at /usr/sbin/ziorep_config line 305.
+ ...
+ or
+ Use of uninitialized value in string eq at \
+ /sbin/ziorep_config line 161.
+ Use of uninitialized value in concatenation (.) or string \
+ at /sbin/ziorep_config line 337.
+ ...
+Problem: ziorep_config did not correctly ignore scsi disks, that are
+ not part of a multipath device, when creating the multipath
+ mapper report. get_line() returns "n/a" if the sysfs
+ attribute does not exist. This is stored in the value for
+ hash key mp_dev_mm so its value cannot be used in a check for
+ being undefined.
+Solution: The hash field mp_dev remains undefined, if no multipath
+ device was found, so use this to ignore scsi disks,
+ that are not part of a multipath device.
+Reproduction: Blacklist some scsi disks in /etc/multipath.conf
+ or dynamically delete some path from a pathgroup with
+ "multipathd -k'del path sdd'" or remove some multipath map
+ that includes scsi disks by means of "multipath -f <map>".
+ In addition, have at least one multipath device configured.
+ Run "ziorep_config -M", or collect configuration data
+ by means of "ziomon -o some ..." or "ziomon_fcpconf -o some"
+ and then run "ziorep_config -M -i some.cfg".
+Upstream-ID: -
+---
+ ziomon/ziorep_config | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ziomon/ziorep_config b/ziomon/ziorep_config
+index f2ad35c..6a77e5a 100755
+--- a/ziomon/ziorep_config
++++ b/ziomon/ziorep_config
+@@ -293,7 +293,7 @@ sub mapper_report
+ "=====================================================\n";
+ }
+ foreach my $hctl (sort keys %devices) {
+- next if (! $devices{$hctl}{mp_dev_mm});
++ next if (! $devices{$hctl}{mp_dev});
+ next if (@$adapters && "@$adapters" !~ /\b$devices{$hctl}{hba_id}\b/);
+ next if (@$ports && "@$ports" !~ /\b$devices{$hctl}{wwpn}\b/);
+ next if (@$s_devs && "@$s_devs" !~ /\b$devices{$hctl}{dev}\b/);
+--
+1.8.1.4
+
+
+From e21f641828a84fa5c1657a75af52e780ad8b0ec8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
+Date: Wed, 5 Jun 2013 16:10:19 +0200
+Subject: [PATCH 4/7] s390: Fuzzy live dump for System z
+
+Summary: s390: Fuzzy live dump for System z
+Description: A new dump mechanism is established to create a completely
+ non-disruptive kernel dump. Because the Linux system
+ continues running while the dump is written and kernel data
+ structures are changing during the procedure, the resulting
+ dump will not be consistent (fuzzy).
+
+ This patch adds the following features to the zgetdump tool:
+ - Live dump creation using new devmem source dump format
+ - Live dump detection using --info option
+---
+ zdump/Makefile | 5 ++---
+ zdump/zgetdump.c | 13 +++++++++++--
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/zdump/Makefile b/zdump/Makefile
+index bdd1340..1926e40 100644
+--- a/zdump/Makefile
++++ b/zdump/Makefile
+@@ -6,9 +6,8 @@ LDLIBS += -lz
+ all: zgetdump
+
+ OBJECTS = zgetdump.o opts.o zg.o \
+- dfi.o dfi_vmcoreinfo.o \
+- dfi_lkcd.o dfi_elf.o dfi_s390.o dfi_s390mv.o dfi_s390tape.o \
+- dfi_kdump.o dfi_devmem.o \
++ dfi.o dfi_lkcd.o dfi_elf.o dfi_s390.o dfi_s390mv.o dfi_s390tape.o \
++ dfi_kdump.o dfi_devmem.o dfi_vmcoreinfo.o \
+ dfo.o dfo_elf.o dfo_s390.o \
+ df_s390.o \
+ dt.o dt_s390sv.o dt_s390mv.o \
+diff --git a/zdump/zgetdump.c b/zdump/zgetdump.c
+index 4943be9..aae6b8d 100644
+--- a/zdump/zgetdump.c
++++ b/zdump/zgetdump.c
+@@ -129,6 +129,7 @@ static int do_dump_info(void)
+ }
+ kdump_select_check();
+ dfi_info_print();
++ dfi_exit();
+ return 0;
+ }
+
+@@ -137,11 +138,15 @@ static int do_dump_info(void)
+ */
+ static int do_mount(void)
+ {
++ int rc;
++
+ if (dfi_init() != 0)
+ ERR_EXIT("Dump cannot be processed (is not complete)");
+ dfo_init();
+ kdump_select_check();
+- return zfuse_mount_dump();
++ rc = zfuse_mount_dump();
++ dfi_exit();
++ return rc;
+ }
+
+ /*
+@@ -149,11 +154,15 @@ static int do_mount(void)
+ */
+ static int do_stdout(void)
+ {
++ int rc;
++
+ if (dfi_init() != 0)
+ ERR_EXIT("Dump cannot be processed (is not complete)");
+ dfo_init();
+ kdump_select_check();
+- return stdout_write_dump();
++ rc = stdout_write_dump();
++ dfi_exit();
++ return rc;
+ }
+
+ /*
+--
+1.8.1.4
+
+
+From 3005996e186dd0b4969cdcb170079fd012b45f5b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
+Date: Wed, 5 Jun 2013 16:12:03 +0200
+Subject: [PATCH 5/7] dasd: add safe offline interface
+
+Summary: dasd: add safe offline interface
+Description: The regular behavior of the DASD device driver when setting a
+ device offline is to return all outstanding I/O as failed. This
+ behavior is different from that of other System z operating
+ systems and may lead to unexpected data loss. Adding an explicit
+ 'safe' offline function will allow customers to use DASDs in the
+ way they expect them to work.
+Upstream-ID: -
+---
+ zconf/chccwdev | 59 +++++++++++++++++++++++++++++++++++++++-----------------
+ zconf/chccwdev.8 | 32 ++++++++++++++++++++++--------
+ 2 files changed, 65 insertions(+), 26 deletions(-)
+
+diff --git a/zconf/chccwdev b/zconf/chccwdev
+index 649c7a2..ca5c25a 100755
+--- a/zconf/chccwdev
++++ b/zconf/chccwdev
+@@ -29,6 +29,8 @@
+ CMD=$(basename $0)
+ MAX_RETRIES=5
+ CIO_SETTLE="/proc/cio_settle"
++ONLINEATTR="online"
++SYSPATH=NULL
+
+ if [ "$(cat /proc/filesystems|grep sysfs)" = "" ]; then
+ echo "ERROR: $CMD requires sysfs support!" >&2
+@@ -52,6 +54,8 @@ function PrintUsage() {
+ driver supports this.
+ -d|--offline
+ Tries to set the given device offline.
++ -s|--safeoffline
++ Tries to set the given device offline waiting for all outstanding I/O. May block forever.
+ -v|--version
+ Show tools and command version.
+
+@@ -102,6 +106,12 @@ function SetAttribute()
+ fi
+ ACTIONSET=true
+ return
++ elif [ "$NAME" = "save_offline" ]; then
++ CheckOnlineArg 1
++ ONLINE=0
++ ACTIONSET=true
++ ONLINEATTR="safe_offline"
++ return
+ fi
+
+ while [ $CNT -lt $NUMATTR ]; do
+@@ -148,6 +158,9 @@ while [ $# -gt 0 ]; do
+ -d|--offline)
+ SetAttribute "online" 0
+ ;;
++ -s|--safeoffline)
++ SetAttribute "save_offline" 0
++ ;;
+ -v|--version)
+ PrintVersion
+ exit 0
+@@ -371,6 +384,27 @@ function StoreAttribute()
+ return 0
+ }
+
++function PrintError()
++{
++ read ERROR
++ if [ -n "$ERROR" ] ;then
++ echo "Failed (${ERROR##*: })" >&2
++ if [ ! -e $SYSPATH/driver ]; then
++ read CUTYPE 2>/dev/null < $SYSPATH/cutype
++ read DEVTYPE 2>/dev/null < $SYSPATH/devtype
++ if [ $? -ne 0 ] ;then
++ exit 1
++ fi
++ if [[ $DEVTYPE == "n/a" ]] ;then
++ DEVTYPE="0000/00"
++ fi
++ echo "Note: No driver is attached to this device" \
++ "(DevType:$DEVTYPE CU Type:$CUTYPE)." >&2
++ fi
++ exit 1
++ fi
++}
++
+ SAVEDATTRS=("${ATTRVAL[@]}")
+ for BUSID in $BUSIDLIST; do
+ SYSPATH=$SYSFSDIR/bus/ccw/devices/$BUSID
+@@ -407,26 +441,15 @@ for BUSID in $BUSIDLIST; do
+ else
+ echo "Setting device $BUSID offline"
+ fi
++ if [ ! -e $SYSPATH/$ONLINEATTR ]; then
++ echo "$ONLINEATTR attribute not available for" \
++ " device[$BUSID]" >&2
++ exit 1
++ fi
+ if [ "$FORCE" != "" ]; then
+- ERROR=$(echo $FORCE 2>&1 >$SYSPATH/online)
++ echo $FORCE 2>&1 >$SYSPATH/$ONLINEATTR | PrintError
+ else
+- ERROR=$(echo $ONLINE 2>&1 >$SYSPATH/online)
+- fi
+- if [ $? -ne 0 ] ;then
+- echo "Failed (${ERROR##*: })" >&2
+- if [ ! -e $SYSPATH/driver ]; then
+- read CUTYPE 2>/dev/null < $SYSPATH/cutype
+- read DEVTYPE 2>/dev/null < $SYSPATH/devtype
+- if [ $? -ne 0 ] ;then
+- exit 1
+- fi
+- if [[ $DEVTYPE == "n/a" ]] ;then
+- DEVTYPE="0000/00"
+- fi
+- echo "Note: No driver is attached to this device" \
+- "(DevType:$DEVTYPE CU Type:$CUTYPE)." >&2
+- fi
+- exit 1
++ echo $ONLINE 2>&1 > $SYSPATH/$ONLINEATTR | PrintError
+ fi
+ #
+ # Workaround for bad drivers which report success but
+diff --git a/zconf/chccwdev.8 b/zconf/chccwdev.8
+index 8ba7695..a40f092 100644
+--- a/zconf/chccwdev.8
++++ b/zconf/chccwdev.8
+@@ -11,7 +11,7 @@ chccwdev \- modify generic attributes of channel attached devices.
+ .B chccwdev
+ .RB "[ (" -a
+ .IB <name> = <value>
+-.RB "| " -e " | " -d " | " -f ") [...]]"
++.RB "| " -e " | " -d " | " -s " | " -f ") [...]]"
+ .br
+ .I <range>
+ .RI "[, " "<range>" " [...]]"
+@@ -28,7 +28,7 @@ special.
+ If the same attribute is given more than one time the value that was set
+ last will be used. This is also true (while not that obvious) when mixing
+ the generic
+-.BR -a " and the " -e ", " -d " and " -f " arguments."
++.BR -a " and the " -e ", " -d ", "-s" and " -f " arguments."
+ .P
+ All attributes will be set in the following order:
+ .RS
+@@ -38,7 +38,8 @@ All attributes except online. If the device is offline there will be no
+ error if the attribute doesn't exist.
+ .TP
+ 2.
+-Set the online attribute to the desired value ((forced) online or offline).
++Set the online attribute to the desired value ((forced) online or
++(safe) offline).
+ .TP
+ 3.
+ Set all the attributes that havn't been set, yet. At this point invalid
+@@ -65,7 +66,7 @@ the attribute it will be read to check whether the setting was accepted.
+
+ .TP
+ .BR -e | --online
+-Try to set the given range of devices online.
++Try to set the specified devices offline.
+
+ .TP
+ .BR -f | --forceonline
+@@ -74,8 +75,15 @@ be used to bring it online regardless of any reserved states.
+
+ .TP
+ .BR -d | --offline
+-Try to set the given range of devices offline. The online and offline
+-option are exclusive.
++Try to set the specified devices offline. The --online, --forceonline,
++--offline, and --safeoffline options are mutually exclusive.
++
++.TP
++.BR -s |--safeoffline
++DASD only: For each specified device, wait until all outstanding I/O
++requests have completed, and then try to set the device offline. The
++--online, --forceonline, --offline, and --safeoffline options are
++mutually exclusive.
+
+ .TP
+ \fB<range>\fR = <bus ID>\fB[-\fR<bus ID>\fB]\fR
+@@ -89,8 +97,9 @@ Example: "0192" becomes "0.0.0192".
+ .SH EXAMPLES
+ \fBchccwdev --online 0.0.0192,0.0.0195-0.0.0198\fR
+ .RS
+-Will try to set the devices with bus ID 0.0.0192, 0.0.0195, 0.0.0196,
+-0.0.0197 and 0.0.0198 online
++After completing all outstanding I/O requests for the devices with bus
++ID 0.0.0192, 0.0.0195, 0.0.0196, 0.0.0197 and 0.0.0198, tries to set
++the device offline.
+ .RE
+ .P
+ .B chccwdev --attribute readonly=1 --attribute online=1 0.0.0192
+@@ -105,6 +114,13 @@ Set the cmb_enable attribute of the devices 0.0.0195, 0.0.0196, 0.0.0197 and
+ 0.0.0198 to one. This would for example activate the usage of the channel
+ measurement block facility.
+ .RE
++.P
++.B chccwdev --safeoffline 0.0.0192,0.0.0195-0.0.0198
++.RS
++Will try to set the devices with bus ID 0.0.0192, 0.0.0195,
++0.0.0196, 0.0.0197 and 0.0.0198 offline and finish all outstanding I/O
++requests before.
++.RE
+
+ .SH AUTHOR
+ .nf
+--
+1.8.1.4
+
+
+From eaa9c5f46041369915f3207e2ca42667fbad5495 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
+Date: Wed, 5 Jun 2013 16:12:45 +0200
+Subject: [PATCH 6/7] cio: Provide PCHID mapping
+
+Summary: cio: Provide PCHID mapping
+Description: This feature helps you to locate physical channel-type
+ interfaces that are associated with Channel-Path IDs
+ (CHPIDs).
+Upstream-ID: -
+---
+ zconf/lschp | 23 ++++++++++++++++++-----
+ zconf/lschp.8 | 12 ++++++++++++
+ 2 files changed, 30 insertions(+), 5 deletions(-)
+
+diff --git a/zconf/lschp b/zconf/lschp
+index 09f9c38..55f2ec3 100755
+--- a/zconf/lschp
++++ b/zconf/lschp
+@@ -82,7 +82,7 @@ function get_chp_id_attr()
+ if [ -r $2/$3 ] ; then
+ read < $2/$3 VAL 2>/dev/null
+ fi
+- eval $VAR=$VAL
++ eval $VAR=\"$VAL\"
+ }
+
+ # Parse command line parameters
+@@ -121,8 +121,8 @@ if [ ! -d "$SYSFS" ] ; then
+ fi
+
+ # Generate output
+-echo "CHPID Vary Cfg. Type Cmg Shared"
+-echo "===================================="
++echo "CHPID Vary Cfg. Type Cmg Shared PCHID"
++echo "============================================"
+
+ CSS_ID_LIST=$(get_css_id_list $SYSFS/devices)
+
+@@ -170,8 +170,21 @@ for CSS_ID in $CSS_ID_LIST ; do
+ CHP_SHARED=$(printf "%x" $CHP_SHARED)
+ fi
+
+- printf "%-5s %-4s %-4s %-4s %-3s %-6s\n" \
++ get_chp_id_attr CHP_CHID $CHP_DIR "chid" "-"
++ get_chp_id_attr CHP_CHID_E $CHP_DIR "chid_external" "0"
++ if [ -z "$CHP_CHID" -o "$CHP_CHID" == "-" ] ; then
++ CHP_CHID=" -"
++ else
++ if [ $CHP_CHID_E == "1" ] ; then
++ CHP_CHID=" $CHP_CHID "
++ else
++ CHP_CHID="($CHP_CHID)"
++ fi
++ fi
++
++
++ printf "%-5s %-4s %-4s %-4s %-3s %-6s %-6s\n" \
+ "$CHP" "$CHP_VARY" "$CHP_CFG" \
+- "$CHP_TYPE" "$CHP_CMG" "$CHP_SHARED"
++ "$CHP_TYPE" "$CHP_CMG" "$CHP_SHARED" "$CHP_CHID"
+ done
+ done
+diff --git a/zconf/lschp.8 b/zconf/lschp.8
+index 336d965..10a7c5c 100644
+--- a/zconf/lschp.8
++++ b/zconf/lschp.8
+@@ -60,6 +60,18 @@ Indicates whether a channel\-path is shared between LPARs:
+ 1 = channel\-path is shared
+ .RE
+
++PCHID
++.RS
++Physical channel-ID unless the 4-digit hexadecimal value is enclosed in
++parenthesis.
++
++If the value is enclosed in parenthesis, no physical channel-ID is
++associated with the CHPID, and the value is an internal channel-ID.
++
++For example, 0501 specifies a PCHID whereas (0502) specifies an internal
++channel-ID.
++.RE
++
+ A column value of '\-' indicates that a facility associated with the respective
+ channel\-path attribute is not available.
+
+--
+1.8.1.4
+
+
+From 52aa5f36e0ce244953e5f2573ef4e7938726c64c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
+Date: Wed, 5 Jun 2013 16:39:05 +0200
+Subject: [PATCH 7/7] update zIPL to 1.21
+
+update zIPL to 1.21 to resolve issues with booting from FBA DASD
+---
+ zipl/boot/common.S | 33 ++++++++++++++++++---------------
+ zipl/boot/eckd2.S | 23 ++++++++++++++++-------
+ zipl/boot/fba2.S | 32 +++++++++++++++++++-------------
+ 3 files changed, 53 insertions(+), 35 deletions(-)
+
+diff --git a/zipl/boot/common.S b/zipl/boot/common.S
+index cbaa60f..3eae04f 100644
+--- a/zipl/boot/common.S
++++ b/zipl/boot/common.S
+@@ -33,6 +33,7 @@ __LC_PANIC_MAGIC= 0xE00
+ _start: stm %r0,%r15,0x180 # store all registers
+ basr %r13,0
+ 0: l %r15,3f-0b(%r13) # load end of stack address
++ mvc .Lstage2-0b(16,%r13),STAGE2_DESC # save stage2_desc from lowcore
+
+ bas %r14,_menu-0b(%r13) # show menu
+ lr %r6,%r2
+@@ -48,18 +49,18 @@ _start: stm %r0,%r15,0x180 # store all registers
+ 6:
+ la %r10,0
+ st %r10,__LC_PANIC_MAGIC # clear panic flag
+- lm %r2,%r3,STAGE2_DESC # get block with configurations
+- lr %r4,%r11
+- l %r5,4f-0b(%r13)
++ la %r2,.Lstage2-0b(%r13) # load blockpointer address
++ lr %r4,%r11 # load sid
++ l %r5,4f-0b(%r13) # load load-address
+ la %r12,0(%r5) # FIXME: provide the correct offset
+ bas %r14,_load_direct-0b(%r13)
+ ar %r6,%r12
+- lm %r2,%r3,16(%r6) # get block with load descriptors
++ la %r2,16(%r6) # get load descriptors address
+ lr %r4,%r11
+ lr %r5,%r12 # set load address
+ bas %r14,_load_direct-0b(%r13)
+ la %r12,32(%r12) # skip header entry
+-1: lm %r2,%r3,0(%r12) # load blocklist container of descriptor
++1: la %r2,0(%r12) # load address of descriptor
+ l %r4,20(%r12) # load type
+ lhi %r5,0xf
+ nr %r4,%r5 # only the last four bits are the type
+@@ -76,6 +77,10 @@ _start: stm %r0,%r15,0x180 # store all registers
+ 5: .long _bug # type 0: not allowed
+ .long _execute # type 1: jump to target
+ .long _load_binary # type 2: binary file
++.Lstage2: # area to save stage2_desc
++ .long 0x00000000,0x00000000
++ .long 0x00000000,0x00000000
++ .align 2
+
+ _bug:
+ basr %r1,0
+@@ -112,7 +117,7 @@ _execute:
+
+ #
+ # The load descriptor is 32 bytes in length and contains 3 entries:
+-# offset 0 : a blocklist descriptor (fba/eckd, 64 bit)
++# offset 0 : a blocklist descriptor (fba/eckd, 128 bit)
+ # offset 23 : a type (8 bit)
+ # offset 24 : an address (64 bit)
+ # The meaning of the address and the validity of the blocklst
+@@ -122,7 +127,7 @@ _execute:
+ #
+ .macro blocklist_traverser
+ # parameter
+-# %r2+%r3: blocklist head descriptor
++# %r2 : blocklist head descriptor address
+ # %r4 : device subchannel id
+ # %r5 : load address
+ _load_blocklist:
+@@ -131,12 +136,10 @@ _load_blocklist:
+ 0: s %r15,7f-0b(%r13) # create stack frame
+ 1: lr %r12,%r4 # save device subchannel id
+ lr %r11,%r5 # save load address
+- lr %r8,%r2 # save descriptor
+- lr %r9,%r3
++ lr %r8,%r2 # save descriptor address
+ bas %r14,_extract_length-0b(%r13) # get length from descriptor
+ lr %r10,%r2 # save returned length
+- lr %r2,%r8 # reload descriptor to %r2/%r3
+- lr %r3,%r9
++ lr %r2,%r8 # reload descriptor address to %r2
+ lr %r4,%r12 # reload device id to %r4
+ l %r5,9f-0b(%r13) # get memory area for indirect block
+ bas %r14,_load_direct-0b(%r13) # load indirect block
+@@ -146,11 +149,11 @@ _load_blocklist:
+ l %r8,9f-0b(%r13)
+ 2: clc 0(8,%r8),8f-0b(%r13) # test block descriptor
+ be 6f-0b(%r13) # descriptor == 0 -> done
+- lm %r2,%r3,0(%r8) # pass block descriptor
++ la %r2,0(%r8) # pass descriptor address
+ bas %r14,_is_zero_block-0b(%r13) # test for special 0 descriptor
+ ltr %r2,%r2 # is it a hole to fill with 0?
+ bne 4f-0b(%r13) # no, normal block descriptor
+- lm %r2,%r3,0(%r8) # pass block descriptor
++ la %r2,0(%r8) # pass descriptor address
+ bas %r14,_extract_length-0b(%r13) # get length from descriptor
+ lr %r3,%r2 # move length to an odd register
+ lr %r2,%r11 # move address to an even register
+@@ -159,14 +162,14 @@ _load_blocklist:
+ 3: mvcle %r2,%r4,0 # clear storage
+ bo 3b-0b(%r13)
+ b 5f-0b(%r13)
+-4: lm %r2,%r3,0(%r8) # pass block descriptor
++4: la %r2,0(%r8) # pass descriptor address
+ lr %r4,%r12 # pass device subchannel id
+ lr %r5,%r11 # pass load address
+ bas %r14,_load_direct-0b(%r13) # load indirect block
+ lr %r11,%r2 # move updated load address
+ 5: la %r8,16(%r8) # next descriptor
+ bct %r9,2b-0b(%r13)
+- lm %r2,%r3,0(%r8) # load continuation descriptor
++ la %r2,0(%r8) # load continuation descriptor address
+ lr %r4,%r12 # move device id for next round
+ lr %r5,%r11 # move load address for next round
+ clc 0(8,%r8),8f-0b(%r13) # test continuation descriptor
+diff --git a/zipl/boot/eckd2.S b/zipl/boot/eckd2.S
+index c720d95..8a3bdb6 100644
+--- a/zipl/boot/eckd2.S
++++ b/zipl/boot/eckd2.S
+@@ -5,10 +5,11 @@
+ # Author(s): Martin Schwidefsky (schwidefsky at de.ibm.com),
+ # Antoinette Kaschner (anto at de.ibm.com),
+ #
+-# An ckd/eckd loadlist entry is 8 bytes in length and contains 3 entries:
+-# offset 0 : C C H H R ( cyl head record )
+-# offset 5 : record length (16 bit)
+-# offset 7 : number of records(8 bit)
++# An ckd/eckd loadlist entry is 16 bytes in length and contains 4 entries:
++# offset 0 : CC HH R (cyl head record 40bit)
++# offset 5 : LL record length (16 bit)
++# offset 7 : N number of records(8 bit)
++# offset 8 : unused(64 bit)
+
+ STAGE2_DESC = 0x78
+
+@@ -26,10 +27,12 @@ STAGE2_DESC = 0x78
+ panik
+
+ # parameter
+-# %r2+%r3: blocklist descriptor
++# %r2 : blocklist descriptor address
++# 16 byte CCHHR LL N 00000000
+ # returns
+ # %r2 : number of bytes (blocksize * number of blocks)
+ _extract_length:
++ l %r3,4(%r2)
+ lr %r2,%r3
+ sll %r2,8
+ srl %r2,16
+@@ -40,17 +43,21 @@ _extract_length:
+ br %r14
+
+ # parameter
+-# %r2+%r3: blocklist descriptor
++# %r2 : blocklist descriptor address
++# 16 byte CCHHR LL N 00000000
+ # returns
+ # %r2 : == 0 for normal block descriptor
+ # != 0 for zero block descriptor
+ _is_zero_block:
++ l %r3,4(%r2)
++ l %r2,0(%r2)
+ srl %r3,24
+ or %r2,%r3
+ br %r14
+
+ # parameter
+-# %r2+%r3: recordlist descriptor CCHHRLLn
++# %r2 : address of recordlist descriptor
++# 16 byte CCHHR LL N 00000000
+ # %r4 : device subchannel id
+ # %r5 : load address
+ _load_direct:
+@@ -60,6 +67,8 @@ _load_direct:
+ s %r15,.Lc96-.Lbase(%r13) # new save area address
+ lr %r12,%r5 # save load address
+ lr %r11,%r4 # save subchannel id
++ l %r3,4(%r2) # get load descriptor from address
++ l %r2,0(%r2) # get load descriptor from address
+ stm %r2,%r3,.Lsearch-.Lbase(%r13) # get listdescriptor into search argument
+ slr %r10,%r10 # clear reg 10
+ icm %r10,1,.Lsearch+7-.Lbase(%r13) # get record number
+diff --git a/zipl/boot/fba2.S b/zipl/boot/fba2.S
+index 73e4b09..d9610ae 100644
+--- a/zipl/boot/fba2.S
++++ b/zipl/boot/fba2.S
+@@ -5,13 +5,15 @@
+ #
+
+ #
+-# An fba blocklist is 8 bytes in length and contains 3 entries:
+-# offset 0 : block number (32 bit)
+-# offset 4 : size of blocks (16 bit)
+-# offset 6 : number of blocks (16 bit) - 1
++# An fba blocklist is 16 bytes in length and contains 3 entries:
++# offset 0 : unused (32 bit)
++# offset 4 : BBBB block number (32 bit)
++# offset 8 : SS size of blocks (16 bit)
++# offset 10 : NN number of blocks (16 bit) - 1
++# offset 12 : unused (32bit)
+ #
+
+-STAGE2_DESC = 0x70
++STAGE2_DESC = 0x78
+
+ #include "common.S"
+
+@@ -26,10 +28,12 @@ STAGE2_DESC = 0x70
+ panik
+
+ # parameter
+-# %r2+%r3: blocklist descriptor
++# %r2 : blocklist descriptor address
++# 16 bytes 00000000 BBBB SS NN 00000000
+ # returns
+ # %r2 : number of bytes (blocksize * number of blocks)
+ _extract_length:
++ l %r3,8(%r2)
+ lr %r2,%r3
+ srl %r2,16
+ sll %r3,16
+@@ -39,15 +43,17 @@ _extract_length:
+ br %r14
+
+ # parameter
+-# %r2+%r3: blocklist descriptor
++# %r2 : blocklist descriptor address
++# 16 bytes 00000000 BBBB SS NN 00000000
+ # returns
+-# %r2 : == 0 for normal block descriptor
+-# != 0 for zero block descriptor
++# %r2 : block number
+ _is_zero_block:
++ l %r2,4(%r2)
+ br %r14
+
+ # parameter
+-# %r2+%r3: blocklist descriptor
++# %r2 : address of blocklist descriptor
++# 16 bytes 00000000 BBBB SS NN 00000000
+ # %r4 : device subchannel id
+ # %r5 : load address
+ # returns
+@@ -58,12 +64,12 @@ _load_direct:
+ .Lbase: s %r15,.Lc96-.Lbase(%r13) # create stack frame
+ lr %r12,%r5 # save load address
+ lr %r11,%r4 # save subchannel id
+- lr %r10,%r3
++ l %r10,8(%r2) # load number of blocks/blocksize
+ n %r10,.Lc65535-.Lbase(%r13) # low word = number of blocks
+ la %r10,1(%r10) # add 1 to number of blocks
+- lr %r9,%r3
++ l %r9,8(%r2) # load number of blocks/blocksize
+ srl %r9,16 # high word = size of blocks
+- lr %r8,%r2 # save block number
++ l %r8,4(%r2) # save block number
+ .Lmain: # main loop
+ ltr %r0,%r10 # any blocks left ?
+ bnp .Lexit-.Lbase(%r13)
+--
+1.8.1.4
diff --git a/s390utils.spec b/s390utils.spec
index 783d9d3..6b70f9e 100644
--- a/s390utils.spec
+++ b/s390utils.spec
@@ -7,7 +7,7 @@ Name: s390utils
Summary: Utilities and daemons for IBM System/z
Group: System Environment/Base
Version: 1.20.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Epoch: 2
License: GPLv2 and GPLv2+ and CPL
ExclusiveArch: s390 s390x
@@ -734,6 +734,10 @@ User-space development files for the s390/s390x architecture.
%changelog
+* Wed Jun 05 2013 Dan Horák <dan[at]danny.cz> - 2:1.20.0-5
+- update with patches from RHEL-6
+- rebase zIPL to 1.21 to fix booting from FBA DASD (#970859)
+
* Tue May 21 2013 Dan Horák <dan[at]danny.cz> - 2:1.20.0-4
- drop the libzfcphbaapi subpackage as it is moved to its own package (#963670)
- update the zfcp udev rules (#958197)
More information about the scm-commits
mailing list