Linux kernel version 2.4.7 recommended downloads

Available for Linux kernel version 2.4.7 are the following downloads (latest one first).

For technical details like Hardware and Software requirements for kernel level 2.4, please refer to the 2.4.7 technical details page.

The restrictions which apply to these downloads are in the 2.4.7 restrictions page. For kernel 2.4 based documentation (31- and 64-bit), please refer to the 2.4.7 documentation page. This page contains OCO modules that are EXPERIMENTAL. They had only limited testing and may not install or function in all environments.

Warning You may not use these experimental OCO modules on a production system or on any system that may get authority over a production system or access to data of a production system. Disregarding this rule may result in severe data loss.

If you download any software from this web site please be aware of the Warranty Disclaimer and Limitation of Liabilities.

Linux kernel version 2.4.7 recommended downloads stream
Date Component Downloadable
2002-07-25 Jul25 2002 patches gcc-2.95.3-s390-5
binutils-2.11.90.0.27-s390-4
2002-07-04 Jul04 2002 patch binutils-2.11.90.0.27-s390-3
2002-06-17 Recommended OCO modules 31-bit

Recommended OCO modules 64-bit
qdio(9) and qeth(9) for standard and "on-demand" timer.
qdio(9) and qeth(9) for standard and "on-demand" timer.
2002-06-04 Jun04 2002 patch gcc-2.95.3-s390-4
2002-04-15 Apr15 2002 patches linux-2.4.7-s390-7
linux-2.4.7-timer-4
2002-03-18 Mar18 2002 patches gcc-2.95.3-s390-3
linux-2.4.7-order2-4
2002-03-04 Mar 04 lcs patch linux-2.4.7-s390-6-lcs
2002-03-01 Recommended OCO modules 31-bit

Recommended OCO modules 64-bit
qdio(8) and qeth(8) for standard and "on-demand" timer. (superseded)
qdio(8) and qeth(8) for standard and "on-demand" timer. (superseded)
2002-02-28 64-bit: undefined weak external bug
binutils undefined weak external bug-fix
glibc-2.2.4 undefined weak external bug-fix
undef-weak-bug.txt
binutils-2.11.90.0.27-s390-2
glibc-2.2.4-s390-3
2002-02-27 Feb27 2002 patches glibc-2.2.4-s390-2
2002-02-26 Feb26 2002 patches s390-tools-5
2002-01-21 Jan21 2002 patches



Recommended OCO modules 31-bit



Recommended OCO modules 64-bit
linux-2.4.7-s390-5
linux-2.4.7-timer-3 (superseded)
linux-2.4.7-order2-3 (superseded)

lcs(6) and z90crypt(2) for standard and "on-demand" timer.
qdio(7) and qeth(7) (superseded)

lcs(6) for standard and "on-demand" timer.
qdio(7) and qeth(7) (superseded)
2001-12-12 Dec12 2001 patch

Recommended OCO modules 31-bit


Recommended OCO modules 64-bit
s390-tools-4

lcs(5), qdio(6), and qeth(6) for standard and "on-demand" timer. (superseded)

lcs(5), qdio(6), and qeth(6) for standard and "on-demand" timer. (superseded)
2001-11-23 Nov23 2001 patches


Recommended OCO modules 31-bit


Recommended OCO modules 64-bit
linux-2.4.7-s390-4
linux-2.4.7-s390-2-timer (superseded)

lcs(4), qdio(5), and qeth(5) for standard and "on-demand" timer. (superseded)

lcs(4), qdio(5), and qeth(5) for standard and "on-demand" timer. (superseded)
2001-11-09 Nov09 2001 patches


Recommended OCO modules 31-bit


Recommended OCO modules 64-bit
linux-2.4.7-s390-3
s390-tools-3

lcs(3), qdio(4), and qeth(4) for standard and "on-demand" timer. (superseded)

lcs(3), qdio(4), and qeth(4) for standard and "on-demand" timer. (superseded)
2001-10-12 Oct12 2001 patches








Recommended OCO modules 31-bit


Recommended OCO modules 64-bit
binutils-2.11.90.0.27-s390-1
gcc-2.95.3-s390-2
gdb-5.0-s390-2
glibc-2.2.4-s390-1
linux-2.4.7-s390-2
linux-2.4.7-s390-timer (superseded)
strace-4.2.20010119-s390-1
s390-tools-2

lcs(2), qdio(3), and qeth(3) for standard and "on-demand" timer. (superseded)

lcs(2), qdio(3), and qeth(3) for standard and "on-demand" timer. (superseded)
2001-09-28 Recommended OCO modules (31-bit)


Experimental OCO modules (64-bit)


Experimental OCO module (31-bit)
qdio(2), and qeth(2) for standard and "on-demand" timer. (superseded)

qdio(2), and qeth(2) for standard and "on-demand" timer. (superseded)

z90crypt-2.4.7-s390 (superseded)
2001-09-14 Sep14 2001 patches






Experimental OCO modules (64-bit)
binutils-2.11.90.0.27-brxlg
gcc-2.95.3-s390-1
gdb-5.0-s390-1
linux-2.4.7-s390-1
linux-2.4.7-timer (superseded)
s390-tools-1

lcs(1), qdio(1), and qeth(1) for standard and "on-demand" timer. (superseded)
2001-08-20 Aug20 2001 patches









OCO modules (31-bit)


Experimental OCO modules (64-bit)
binutils-2.11.90.0.27-s390
gcc-2.95.3-s390
gdb-5.0-s390
glibc-2.2.4-s390
linux-2.4.7-s390
linux-2.4.7-s390-kerntypes
modutils-2.4.7
strace-4.2.20010119-s390
s390-tools

lcs, qdio, and qeth for the standard timer. (superseded)

lcs, qdio, and qeth for the standard timer. (superseded)

2002-07-25 patches

This patch contains the following compiler bug fixes:

Description:
Literal pool overflow handling.
Symptom:
Compiler aborts with 'multiple literal pool' internal compiler error, or otherwise generates incorrect code for routines using >4K literals.
Problem:
The compiler uses a per-function literal pool to access immediate constants too large for the S/390 immediate instructions. This pool is limited to a size of 4 KB. Fortunately, nearly all routines do not exceed this limit, but some -usually automatically generated code- do.

To cope with this situation, the compiler tried to split the literal pool into multiple 'pool chunks', each smaller than 4 KB. The algorithms used to perform this split, however, suffered from several design flaws that could cause the compiler to abort (because it wouldn't find a proper place to split the pools) or else generate invalid code -especially when using -fpic/-fPIC- (because it split the pools at invalid places without noticing it).

Solution:
The whole literal pool handling was completely replaced for gcc 3.1.1 and above; the new algorithm solves all those problems. This patch backports the new literal pool overflow handling to the gcc 2.95.3 compiler.

You will need this patch only if you run into problems caused by literal pool overflows.

To create the complete compiler sources, the following patches need to be applied in sequence:

gcc-2.95.3.tar.gz (see gcc.gnu.org)
+ gcc-2.95.3-s390.diff (IBM)
+ gcc-2.95.3-s390-1.diff (IBM)
+ gcc-2.95.3-s390-2.diff (IBM)
+ gcc-2.95.3-s390-3.diff (IBM)
+ gcc-2.95.3-s390-4.diff (IBM)
+ gcc-2.95.3-s390-5.diff (IBM)

This patch contains the following binutils bug fixes:

Description:
Linker crashes.
Symptom:
The static link of some special object files crashes the linker.
Problem:
The final, static link of object files that do not contain any direct references to dynamic symbols but only indirect ones crashes the linker because the dynobj pointer and the got pointer are used but never initialised.
Solution:
Initialise the dynobj pointer if it is needed and avoid accessing the got section if it does not exists.

Everybody should apply this patch.

Note: You should apply the glibc-2.2.4-s390-3 patch to your system as well but you need to be careful with it. Please read the description for the "Undefined weak external" bug for details about this problem.

To create the complete binutils sources, the following patches need to be applied in sequence: binutils-2.11.90.0.27.tar.gz (see ftp://www.kernel.org/pub/linux/devel/binutils/)
+ binutils-2.11.90.0.27-s390.diff (IBM)
+ binutils-2.11.90.0.27-s390-1.diff (IBM)
+ binutils-2.11.90.0.27-s390-2.diff (IBM)
+ binutils-2.11.90.0.27-s390-3.diff (IBM)
+ binutils-2.11.90.0.27-s390-4.diff (IBM)

2002-07-04 patch

This patch contains the following binutils bug fixes:

Description:
Broken relocation sections.
Symptom:
Dynamic linker error message "unexpected reloc type" or program crashes / malfunctions.
Problem:
There are two problems in regard to the relocation sections. First hidden symbols are not excluded from the final link in all cases, dependent on the link order. Second the calculation of the size of the relocation sections is incorrect if hidden symbols have been excluded.
Solution:
Correct tests to exclude hidden symbols from the relocation sections in the final link and rework section allocation for .rela section to determine the correct size.

Everybody should apply this patch.

Note: You should apply the glibc-2.2.4-s390-3 patch to your system as well but you need to be careful with it: Please read the description for the "Undefined weak external" bug for details.

To create the complete binutils sources, the following patches need to be applied in sequence: binutils-2.11.90.0.27.tar.gz (see ftp://www.kernel.org/pub/linux/devel/binutils/)
+ binutils-2.11.90.0.27-s390.diff (IBM)
+ binutils-2.11.90.0.27-s390-1.diff (IBM)
+ binutils-2.11.90.0.27-s390-2.diff (IBM)
+ binutils-2.11.90.0.27-s390-3.diff (IBM)

2002-06-17 OCO modules

The qdio and qeth 31-bit and 64-bit OCO-modules of 2002-06-17 are replacements for the 2002-03-01 recommended qdio and qeth modules (see below description).

Recommended OCO modules 31-bit

Recommended OCO modules 64-bit

2002-06-17: OSA-Express QDIO enhancement under VM Gigabit Ethernet throughput (transactions per second) can potentially increase while potentially reducing the VM CP cost (CPU cycles per transaction) for Linux guests using Gigabit Ethernet or Fast Ethernet OSA-Express running QDIO under supported levels of VM, if the follwing requirements are installed:

2002-06-04 patch

This patch contains the following compiler bug fixes:

Description:
Use of LOAD ADDRESS vs. ADD for pointer computation.
Symptom:
Compiler generates incorrect code.
Problem:
In some cases, when compiling code that takes the address of a local stack variable near code involving conditions (if / while / ...), the generated code will be incorrect. This is caused by the compiler using an ADD instruction (which modifies the condition code) at a point where it expects a LOAD ADDRESS to be used (which preserves the condition code).
Solution:
Use LA to compute addresses of local variables.
Description:
Inline memcpy problem.
Symptom:
Compiler generates incorrect code.
Problem:
When generating code to implement memcpy inline, the compiler assumes in some cases incorrectly that after the memcpy completes, certain registers still hold the addresses pointing to the start of the source and/or target memory areas, although these registers were in fact modified by the inline memcpy code.
Solution:
Rewrite the corresponding insn patterns to remove the incorrect assumptions.
Description:
Dead code elimination of complex switch statements.
Symptom:
Compiler generates incorrect code.
Problem:
When the source code contains a complex switch statement (one that would be implemented using a jump target table), and *all* its cases prove to contain dead code (i.e. code that has no effect on subsequent computations and can be completely deleted by the compiler), and therfore the compiler decides to remove the whole switch statement, it will in some cases erroneously remove some of code *following* the switch statement as well.
Solution:
Emit barrier following the indirect jump insn.
Description:
Illegal address constants on 64-bit.
Symptom:
Internal compiler error "unrecognized insn".
Problem:
In some rare cases, the compiler would generate an illegal address constant, causing an ICE.
Solution:
Don't generate illegal address constants.

Everyone using the compiler should apply this patch.

To create the complete compiler sources, the following patches need to be applied in sequence:

gcc-2.95.3.tar.gz (see gcc.gnu.org)
+ gcc-2.95.3-s390.diff (IBM)
+ gcc-2.95.3-s390-1.diff (IBM)
+ gcc-2.95.3-s390-2.diff (IBM)
+ gcc-2.95.3-s390-3.diff (IBM)
+ gcc-2.95.3-s390-4.diff (IBM)

2002-04-15 patches

This patch contains the following linux kernel bug fixes:

Description:
Console setup restrictions.
Symptom:
Unable to use a 3215/3270 device as console on an LPAR.
Problem:
The console setup code explicitly tests for VM or P/390 before it accepts a 3215 or 3270 console device.
Solution:
Remove machine type restrictions from conmode_setup.
Description:
Dasd driver.
Symptom:
Stress test with device attach/detach hangs the system.
Problem:
Concurrent changes to the states of dasd devices lead to inconsistencies.
Solution:
Add a lock that prevents concurrent changes of device state.
Description:
Read-only status of dasd devices.
Symptom:
/proc/dasd/devices indicated reported read-only/read-write status for device that have been modified with the BLKROSET i/o control.
Problem:
The default BLKROSET i/o control implementation sets the read-only/read-write bit in the block device layer but the dasd driver has bits of his own.
Solution:
Implement a private BLKROSET i/o control for dasd that keeps the bits in the block device layer and in the dasd driver consistent.
Description:
Dasd device bringup.
Symptom:
The system crashes in dasd device bringup.
Problem:
The bottom half can be called early with a request on the block device queue. The bottom half requeues the request to the internal dasd queue although the device is in a state where this may not happen yet.
Solution:
Plug the device while it is initialized.
Description:
Diag discipline not working.
Symptom:
Dasd devices that are addressed with the diag discipline do not work.
Problem:
There are two different problems that prevent the diag discipline from working. 1) pfault and dasd diag use the same external interrupt number. If pfault is active the diag discipline never gets interrupts. 2) diag devices only get promoted to state ready but not to state online.
Solution:
Fix the two problems: 1) deliver external interrupts to all interrupt handlers with matching external interrupt number and let the interrupt handler filter out "their" requests. 2) do not return from dasd_set_device_level with -EAGAIN for diag devices.
Description:
31 bit emulation.
Symptom:
31 bit programs running in the 31 bit emulation under 64 bit linux do not work correctly.
Problem:
SVC emulation is incorrect in various aspects. 1) the 31 bit personality is missing, 2) emulation of sys_stime and sys_sysctl can fail because of incorrect 31/64 bit argument conversion, 3) emulation of MSGSND/MSGRCV ipc system call returned different results in error cases, 4) emulation of sys_shmctl uses an incorrect layout for IPC_64 type shared memory, 5) missing pointer conversion in sys_fcntl emulation and 6) emulation of old_getrlimit is incorrect.
Solution:
Add 31 bit personality and correct emulation of svcs.
Description:
Kernel compilation with gcc 3.1.
Symptom:
Kernel compilation with gcc version 3.1 fails.
Problem:
Some kernel code that used to work with gcc 2.95.3 is rejected by gcc 3.1.
Solution:
Fix the code so that gcc 3.1 accepts it.
Description:
Machine check enabling.
Symptom:
No or late machine check handling.
Problem:
The bit for enabling machine checks in the PSW is not set while a processor sleeps in cpu_idle and is not set at all for 64 bit.
Solution:
Set the machine check bit in the relevant PSW masks.
Description:
Channel device layer.
Symptom:
None.
Problem:
It is not possible to specify multiple parameters with a single channel device configuration string.
Solution:
Allow multiple add_parms in the channel device configuration strings.
Description:
iucv inoperational after reboot.
Symptom:
The iucv interface does not work after a reboot.
Problem:
The shutdown of the iucv interface needs to be done on the same cpu that did the initialization.
Solution:
Remember which cpu did the initialization and call it to do the shutdown.
Description:
Reboot failures.
Symptom:
Reboot either loops or end with disabled wait.
Problem:
Two problems. 1) the start subchannel on the reipl ccw can fail and 2) a cpu is deactivated but still holds a lock that is needed by the reipl function.
Solution:
Try to start the reipl ccw multiple times and force all cpus into a state where all locks that the reipl functions needs are free.
Description:
Common i/o layer.
Symptom:
Device inaccessible after chpid offline/online.
Problem:
Calculation of path group id depends on cpu id.
Solution:
Introduce a global path group id that is used as default for set path group id.
Description:
Common i/o layer.
Symptom:
Possible kernel oops writing to /proc/cio_ignore.
Problem:
The input string to /proc/cio_ignore is copied to a buffer that is one byte short.
Solution:
Fix the allocation for the buffer.
Description:
Backtrace over signal frames.
Symptom:
catchsegv can crash if the fault happens in a signal handler.
Problem:
The backchain in the signal frame is not setup.
Solution:
Set the backchain in the signal frame to point to the interrupted stack frame.
Description:
3270 device numbers.
Symptom:
The devices file system entries for a 3270 device with a 4 digit device number are incorrect.
Problem:
The output of 3270 device numbers is restricted to 3 digits.
Solution:
Allow 4 digits in the print statements of 3270 device numbers.
Description:
Type conversion in __put_user/__get_user.
Symptom:
System calls fail although the input is correct.
Problem:
__put_user/__get_user are not doing proper type conversion. If the user space pointer does not point to the same type as the variable given in the argument to __put_user/__get_user this leads to problems. This is especially true for the emulation of 31 bit system calls on 64 bit linux.
Solution:
Do proper type conversion like it is done in put_user/get_user.

Everybody should apply this patch.

These changes do not affect the OCO-modules.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (original kernel source)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)
+ linux-2.4.7-s390-5.diff (IBM)
+ linux-2.4.7-s390-6-lcs.diff (IBM)
+ linux-2.4.7-s390-7.diff (IBM)

Release notes: (2002-04-15: adaption to above 2002-04-15 kernel-patches)

On demand timer patch:
Category operating system. Contains a patch for the linux kernel 2.4.7 that changes the timing method from the regular 100 hz interrupts to on demand timer interrupts. This saves some cpu cycles in an idle linux image. The drawback is that a busy linux image will do a small amount of additional work every time the switch between user mode and kernel mode is done. In short if you are running many images under VM the on demand timers are useful but you probably don't want to use it running under LPAR or native. The patch introduces a configuration option CONFIG_NO_HZ_TIMER that lets you choose between the old and the new behavior. Note that you'll need different qdio, qeth, and z90crypt modules if you use the no hz timer option.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (original kernel source)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)
+ linux-2.4.7-s390-5.diff (IBM)
+ linux-2.4.7-s390-6-lcs.diff (IBM)
+ linux-2.4.7-s390-7.diff (IBM)
+ linux-2.4.7-timer-4.diff (IBM)

2002-03-18 patches

This patch contains the following compiler bug fixes:

Description:
Exception handling and variable argument lists.
Symptom:
Application crashes when throwing an exception.
Problem:
In functions using variable argument lists, DWARF-2 information used by the exception handling unwinding code was incorrectly generated. This incorrect information could cause the exception handling runtime library to abort an application that was throwing an exception through a routine that uses variable arguments.
Solution:
Generate correct DWARF-2 unwind data in functions using a variable argument list.
Description:
Long long multiplication on 31-bit.
Symptom:
Internal compiler error.
Problem:
In some rare cases, the compiler would abort on certain code doing multiplication of 64-bit (long long) variables. This was caused by an S/390 backend instruction pattern containing a subreg expression that confused the frontend.
Solution:
Rewrite the corresponding insn pattern to avoid the abort.
Description:
64-bit instructions generated on 31-bit.
Symptom:
tmll instructions in 31-bit assembler code.
Problem:
In some rare cases, the compiler would emit instructions of the tmll family when compiling for the s390 31-bit target architecture, although these instructions exist only on 64-bit.
Solution:
Properly mark these instructions as 64-bit only.
Description:
Bug in common code (loop optimizer).
Symptom:
Incorrect code is generated.
Problem:
In some very rare cases the strength-reduction pass would generate incorrect code due to clobbering the condition code by moving instructions around.
Solution:
This particular sub-part of the strength-reduction pass was removed (as ineffective) in gcc 3.0 anyway, so we can just deactivate it for this release.

Everyone using the compiler should apply this patch. To create the complete compiler sources, the following patches need to be applied in sequence: gcc-2.95.3.tar.gz (GNU)
+ gcc-2.95.3-s390.diff (IBM)
+ gcc-2.95.3-s390-1.diff (IBM)
+ gcc-2.95.3-s390-2.diff (IBM)
+ gcc-2.95.3-s390-3.diff (IBM)

This patch supersedes the recommended 2.4.7 "order 2 allocation relief" patch of 2002-01-21.

Description:
Order 2 allocation relief. (Applies to 64-bit, only)
Symptom:
Under stress and after long uptimes of a 64 bit system the error message "__alloc_pages: 2-order allocation failed." appears and either the fork of a new process fails or an active process dies.
Problem:
The order 2 allocation problem is based in the size of the region and segment tables as defined by the zSeries architecture. A full region or segment table in 64 bit mode takes 16 KB of contiguous real memory. The page allocation routines do not guarantee that a higher order allocation will succeed due to memory fragmentation.
Solution:
The order 2 allocation fix is supposed to reduce the number of order 2 allocations for the region and segment tables to a minimum. To do so it uses a feature of the architecture that allows to create incomplete region and segment tables. In almost all cases a process does not need full region or segment tables. If a full region or segment table is needed it is reallocated to the full size.

Important notices:

To create the complete linux kernel sources, the following patches need to be applied in sequence:
linux-2.4.7.tar.gz (original kernel source)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)
+ linux-2.4.7-s390-5.diff (IBM)
+ linux-2.4.7-s390-6-lcs.diff (IBM)
+ linux-2.4.7-order2-4.diff (IBM)

2002-03-04 patches

This patch contains the source code for the lcs device driver.

  • The LCS device driver (formerly available as OCO, only) is now provided in source-code form.
  • This version of the LCS-driver contains the source-code for the 2002-01-21 (same as 2001-12-12) kernel 2.4.7 OCO-modules for 31- and 64-bit.
  • The lcs network driver supports OSA-2 Ethernet Token Ring, and OSA-Express Fast Ethernet in non-QDIO mode.
  • Documentation can be found in the Linux for S/390 & zSeries Device Driver and Installation Commands manuals.

Everybody should apply this patch.

To create the complete linux kernel sources, the following patches need to be applied in sequence:
linux-2.4.7.tar.gz (original kernel source)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)
+ linux-2.4.7-s390-5.diff (IBM)
+ linux-2.4.7-s390-6-lcs.diff (IBM)

2002-03-01 patches

Recommended OCO modules 31-bit

The qdio and qeth 31-bit and 64-bit OCO-modules of 2002-03-01 are replacements for the previously recommended (qdio and qeth) modules.

HiperSockets support for qdio and qeth

HiperSockets support for VM-guests is available on z/VM 4.2, only and and requires the application of the PTFs for the following APARs: VM62938 and VM63034.

Please check the VM service information for latest available updates: VM Info-APAR II12444 contains useful information for using Linux under VM.

OCO-modules qdio and qeth must be selected correctly for kernels with or without the "on-demand timer" patch applied.

On-demand timer 31-bit kernels now need: qdio-2.4.7-s390-8-timer.tar.gz, and qeth-2.4.7-s390-8-timer.tar.gz.
Standard 100 Hertz timer 31-bit kernels: qdio-2.4.7-s390-8.tar.gz, and qeth-2.4.7-s390-8.tar.gz.

Recommended OCO modules 64-bit

OCO-modules qdio and qeth must be selected correctly for kernels with or without the "on-demand timer" patch applied.

Note that the "order 2 allocation relief" no longer requires special OCOs.

HiperSockets support for qdio and qeth

HiperSockets support for VM-guests is available on z/VM 4.2, only and and requires the application of the PTFs for the following APARs: VM62938 and VM63034.

Please check the VM service information for latest available updates: VM Info-APAR II12444 contains useful information for using Linux under VM.

On-demand timer 64-bit kernels now need: qdio-2.4.7-s390x-8-timer.tar.gz, and qeth-2.4.7-s390x-8-timer.tar.gz
Standard 100 Hertz timer 64-bit kernels now need: qdio-2.4.7-s390x-8.tar.gz, and qeth-2.4.7-s390x-8.tar.gz

2002-02-28 patches

The undefined weak external bug:

The symptom:
The undefined weak external bug will show up if an executable is linked with a relocation against an undefined weak external function which is defined at runtime through a dynamic object that was not part of the final link. This means the weak external gets defined either by an upgrade of a dynamic library or by the use of LD_PRELOAD. Most notably this happens with the upgrade of GNU C library from version 2.2.4 to 2.2.5. The symptom is that a program that ran fine with version 2.2.4 will crash on startup with version 2.2.5.
The cause:
This problem is caused by the combination of two bugs. One in the binutils and one in the GNU C library. The bug in the GNU C library 2.2.4 is that the symbols __register_frame, __register_frame_table, __deregister_frame, __register_frame_info, __deregister_frame_info, __frame_state_for and __register_frame_info_table do not have a version. A symbol without a version is local to the GNU C library which makes it undefined for all callers outside of the library. That is the point where the binutils bug comes into play. The crtbeginS.o object contains a R_390_PLT32DBL relocation to __register_frame_info. This relocation is replaced by a R_390_PC32DBL relocation because it refers to an undefined weak external function. This is wrong because the undefined function can be defined later either by an upgrade or by LD_PRELOAD. After the relocation was made pc relative the linker (correctly) turned this into a branch to 0. Therefore every program linked with a linker with this bug contains a call to 0. As long as __register_frame_info stays undefined this causes no problem because the function call is guarded by an if that test if the function address of __register_frame_info is zero. Function addresses comparisons are handled differently to function calls and are not replaced with compares to 0. So as soon as the weak function __register_frame_info is defined, the program crashes.
The fix:
To fix this problem the two problems needs to be addressed. The linker may not replace PLT function calls with pc relative calls and the GNU C library needs versions for the seven functions. The missing versions of the seven functions is a problem on its own which has to be fixed. Otherwise C++ exception handling does not work if the exception handling crosses different shared objects.
The update procedure:
To update an existing sytem several things have to be done in a specific order. First the binutils have to be replaced. Second EVERY program in the system needs a relink to remove the call to 0 that every program contains that is linked with crtbeginS.o. That means a rebuild of every program in the system! After the recompiles are done the GNU C library has to be replaced with one that contains the missing symbol versions. If the GNU C library is updated with the versions patch before all the executables in the system have been recompiled the system is rendered unusable!

This patch contains the following binutils bug fixes:

Description:
PLT call optimization problem.
Symptom:
64 bit programs crash after a glibc upgrade to 2.2.5.
Problem:
A call via the procedure link table (PLT) to an undefined weak external references gets optimized to a pc relative call by the linker. That in turn gets replaced by a call to 0 because the function is undefined. This turns out to be incorrect as soon as the weak function is defined. This is the case for the __register_frame_info symbol that wasn't exported from the glibc prior to version 2.2.5 but is exported starting with this version. The call to __register_frame_info is done from crtbeginS.o which is linked to every 64 bit binary. This means that every single 64 bit executable contains an incorrect call that lets the program crash as soon as a glibc is installed that exports the symbol __register_frame_info.
Solution:
Prevent pc relative optimzation for undefined weak external references.

Everybody should apply this patch.

Note: You should apply the glibc-2.2.4-s390-3 patch to your system as well but you need to be careful with it. Please read undef-weak-bug for details about this problem.

To create the complete binutils sources, the following patches need to be applied in sequence:

binutils-2.11.90.0.27.tar.gz (GNU)
+ binutils-2.11.90.0.27-s390.diff (IBM)
+ binutils-2.11.90.0.27-s390-1.diff (IBM)
+ binutils-2.11.90.0.27-s390-2.diff (IBM)

This patch contains the following glibc bug fixes:

Description:
C++ exception handling on 64 bit doesn't work correctly.
Symptom:
C++ program crash or misbehave throwing exceptions.
Problem:
The versions for the seven symbols __register_frame, __register_frame_table, __deregister_frame, __register_frame_info, __deregister_frame_info, __frame_state_for and __register_frame_info_table concerning exception handling are missing for 64 bit.
Solution:
Add versions for the seven symbols for 64 bit.

Everybody should apply this patch.

Note: You need to be careful upgrading your system. This patch without the binutils-2.11.90.0.27-s390-2 patch and a recompile of all executables will break your system. Please read undef-weak-bug.txt for details about this problem.

To create the complete glibc sources, the following patches need to be applied in sequence:

glibc-2.2.4.tar.gz (GNU)
+ glibc-linuxthreads-2.2.4.tar.gz (GNU)
+ glibc-2.2.4-s390.diff (IBM)
+ glibc-2.2.4-s390-1.diff (IBM)
+ glibc-2.2.4-s390-2.diff (IBM)
+ glibc-2.2.4-s390-3.diff (IBM)

2002-02-27 patch

This patch contains the following glibc bug fixes:

Description:
Pthread race conditions.
Symptom:
Hanging/crashing threads.
Problem:
The MEMORY_BARRIER definition is missing. This potentially creates race conditions because the compiler may schedule instructions past synchronisation points.
Solution:
Define MEMORY_BARRIER.
Description:
Profile counting on 31 bit does not work.
Symptom:
The profile counts for programs compiled with -g are zero.
Problem:
The high order bit is not removed from the profile address in profil_counter.
Solution:
Remove the high order bit for 31 bit addresses.
Description:
libSegFault does not work.
Symptom:
catchsegv crashes.
Problem:
The second parameter to register_dump in the REGISTER_DUMP macro is incorrect.
Solution:
Fix register_dump call.
Description:
Missing definition in resource.h.
Symptom:
Compile problems with pdksh.
Problem:
The RLIMIT_LOCKS definition is missing in resource.h.
Solution:
Add RLIMIT_LOCKS.

Everybody should apply this patch.

To create the complete glibc sources, the following patches need to be applied in sequence:

glibc-2.2.4.tar.gz (GNU)
+ glibc-linuxthreads-2.2.4.tar.gz (GNU)
+ glibc-2.2.4-s390.diff (IBM)
+ glibc-2.2.4-s390-1.diff (IBM)
+ glibc-2.2.4-s390-2.diff (IBM)

2002-02-26 patch

This patch contains the following s390-tools bug fix:

Description:
dasd tools only working with one DASD API version.
Symptom:
The tools refuse to work with a different DASD API version. A 'API version mismatch' message is written.
Problem:
The tools are checking for the DASD API version and are only operating with one API version (specified at compile time).
Solution:
All tools are now able to handle the minimum DASD API version specified at compile time and all above DASD API versions.

Everybody should apply this patch.

To create the complete S/390 tools sources, the following patches need to be applied in sequence:

s390-tools.tar.gz (IBM)
+ s390-tools-1.diff (IBM)
+ s390-tools-2.diff (IBM)
+ s390-tools-3.diff (IBM)
+ s390-tools-4.diff (IBM)
+ s390-tools-5.diff (IBM)

2002-01-21 patches

This patch contains the following linux kernel bug fixes:

Description:
Initial ramdisk problem.
Symptom:
Kernel fails to find a filesystem on an initial ramdisk if the root filesystem does not live on the ramdisk.
Problem:
The segment descriptor in the init thread points to the user space instead of pointing to the kernel space.
Solution:
Correct the segment descriptor.
Description:
Signal information incomplete.
Symptom:
The information in the siginfo_t on entry to a signal handler does not contain all information it should contain.
Problem:
The exception handlers do not pass a siginfo structure to the do_trap function. Therefore the si_code and the address of the fault are not passed to the user space signal handler.
Solution:
Create and pass siginfo structures to do_trap for the different signal handlers.
Description:
31 bit emulation of sys_select.
Symptom:
31 bit programs on 64 bit linux hang.
Problem:
The conversion of the struct timeval in sys32_select is done incorrectly. This leads to huge timeout values, causing the 31 bit programs to "hang".
Solution:
Correct the struct timeval conversion.
Description:
31-bit emulation of sys_semctl.
Symptom:
Problems with 31 bit programs on 64-bit Linux.
Problem:
The conversion of struct ipc64_perm was done incorrectly. This could lead to incorrect permission settings being passed to the sys_semctl system call.
Solution:
Correct the struct ipc64_perm conversion.
Description:
CMS minidisks on 64-bit.
Symptom:
On 64-bit Linux, CMS minidisks are not detected.
Problem:
The partition detection code contained code that was not portable to 64-bit. This caused CMS labels to be incorrectly parsed and therefore CMS minidisks were not detected.
Solution:
Fix partition detection.

In addition, the patch contains the following feature:

Everybody should apply this patch.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (original kernel source)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)
+ linux-2.4.7-s390-5.diff (IBM)

Release notes:

On demand timer patch:
Category operating system. Contains a patch for the linux kernel 2.4.7 that changes the timing method from the regular 100 hz interrupts to on demand timer interrupts. This saves some cpu cycles in an idle linux image. The drawback is that a busy linux image will do a small amount of additional work every time the switch between user mode and kernel mode is done. In short if you are running many images under VM the on demand timers are useful but you probably don't want to use it running under LPAR or native. The patch introduces a configuration option CONFIG_NO_HZ_TIMER that lets you choose between the old and the new behavior. Note that you'll need different lcs, qdio, qeth, and z90crypt modules if you use the no hz timer option.

Important notice:

In earlier versions of the timer patch, kernels built with the patch applied but with CONFIG_NO_HZ_TIMER switched off were still incompatible with the regular OCO modules (and also to the timer-patch OCO modules). This problem is fixed in this version of the patch. If CONFIG_NO_HZ_TIMER is switched off, the kernel is now compatible with the regular OCO modules.

Note that the "order 2 allocation relief" patch for 64 bit is not compatible with the "on-demand timer" patch.

This patch is identical with the experimental 2.4.7 "order 2 allocation relief" patch from 2001-12-12. It has been moved from the experimental to the recommended state for 64 bit.

Description:
Order 2 allocation relief. (Applies to 64-bit, only)
Symptom:
Under stress and after long uptimes of a 64 bit system the error message "__alloc_pages: 2-order allocation failed." appears and either the fork of a new process fails or an active process dies.
Problem:
The order 2 allocation problem is based in the size of the region and segment tables as defined by the zSeries architecture. A full region or segment table in 64 bit mode takes 16 KB of contiguous real memory. The page allocation routines do not guarantee that a higher order allocation will succeed due to memory fragmentation.
Solution:
The order 2 allocation fix is supposed to reduce the number of order 2 allocations for the region and segment tables to a minimum. To do so it uses a feature of the architecture that allows to create incomplete region and segment tables. In almost all cases a process does not need full region or segment tables. If a full region or segment table is needed it is reallocated to the full size.

Important notices:

To create the complete linux kernel sources, the following patches need to be applied in sequence:
linux-2.4.7.tar.gz (original kernel source)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)
+ linux-2.4.7-s390-5.diff (IBM)
+ linux-2.4.7-order2-3.diff (IBM)

Recommended OCO modules 31-bit

The lcs, qdio, qeth 31-bit and 64-bit OCO-modules of 2002-01-21 are replacements for the previously recommended modules.

HiperSockets support for qdio and qeth

OCO-modules lcs, qdio,qeth, and z90crypt must be selected correctly for kernels with or without the 2002-01-21 "on-demand timer" patch applied.
On-demand timer 31-bit kernels with the 2002-01-21 patches now need: lcs-2.4.7-s390-6-timer.tar.gz, qdio-2.4.7-s390-7-timer.tar.gz, qeth-2.4.7-s390-7-timer.tar.gz, and z90crypt-2.4.7-s390-2-timer.tar.gz.
Standard 100 Hertz timer 31-bit kernels with the 2002-01-21 patches now need: lcs-2.4.7-s390-6.tar.gz, qdio-2.4.7-s390-7.tar.gz, qeth-2.4.7-s390-7.tar.gz, and z90crypt-2.4.7-s390-2.tar.gz.

Recommended OCO modules 64-bit

OCO-modules lcs, qdio, qeth, and z90crypt must be selected correctly for kernels with or without the 2002-01-21 "on-demand timer" patch applied.
Note that the "order 2 allocation relief" patch is now recommended and furthermore no longer requires special OCOs.

HiperSockets support for qdio and qeth

  • The support of HiperSockets was tested completely for Linux for zSeries running under LPAR.
  • HiperSockets support for VM-guests is available on z/VM 4.2, only, and requires the application of PTFs for APAR VM62938.
    Please check the VM service information for latest available updates. (VM Info-APAR II12444 contains useful information for using Linux under VM.)
  • The regression tests for Linux for zSeries HiperSockets support for VM-guests are still in progress.

On-demand timer 64-bit kernels with the 2002-01-21 patches now need: lcs-2.4.7-s390x-6-timer.tar.gz, qdio-2.4.7-s390x-7-timer.tar.gz, and qeth-2.4.7-s390x-7-timer.tar.gz

Standard 100 Hertz timer 64-bit kernels with the 2002-01-21 patches now need: lcs-2.4.7-s390x-6.tar.gz, qdio-2.4.7-s390x-7.tar.gz, and qeth-2.4.7-s390x-7.tar.gz

2001-12-12 patches

This patch contains the following s390-tools bug fix:

Description:
fdasd: missing 390 data set name for big disks.
Symptom:
One of the 390 data set names, which exists for each partition, is missing for modell 9 DASDs.
Problem:
The modell 9 DASD needs a special freespace label within the VTOC. In this case the "last available FMT1 DSCB"-pointer wasn't set to the right label.
Solution:
This pointer is now set correctly.

Everybody should apply this patch.

To create the complete S/390 tools sources, the following patches need to be applied in sequence:
s390-tools.tar.gz (IBM)
+ s390-tools-1.diff (IBM)
+ s390-tools-2.diff (IBM)
+ s390-tools-3.diff (IBM)
+ s390-tools-4.diff (IBM)

Recommended OCO modules 31-bit

The lcs, qdio, qeth 31-bit and 64-bit OCO-modules of 2001-12-12 are replacements for the previously recommended modules.

HiperSockets support for qdio and qeth

OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the 2001-11-23 "on-demand timer" patch applied.

On-demand timer 31-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390-5-timer.tar.gz, qdio-2.4.7-s390-6-timer.tar.gz, and qeth-2.4.7-s390-6-timer.tar.gz.
Standard 100 Hertz timer 31-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390-5.tar.gz, qdio-2.4.7-s390-6.tar.gz, and qeth-2.4.7-s390-6.tar.gz.

Recommended OCO modules 64-bit

OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the 2001-11-23 "on-demand timer" patch applied.

HiperSockets support for qdio and qeth

On-demand timer 64-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390x-5-timer.tar.gz, qdio-2.4.7-s390x-6-timer.tar.gz, and qeth-2.4.7-s390x-6-timer.tar.gz

Standard 100 Hertz timer 64-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390x-5.tar.gz, qdio-2.4.7-s390x-6.tar.gz, and qeth-2.4.7-s390x-6.tar.gz

2001-11-23 patches

The 2001-11-23 set of Linux Kernel version 2.4.7 recommended patches for Linux for S/390 and Linux for zSeries deliver several fixes and updates.

Furthermore the 31-bit and 64-bit recommended OCO-modules lcs, qdio, qeth have been updated with bug-fixes.

Together with the 2001-11-09, 2001-10-12 and 2001-09-14 patches applied on top of the first set (2001-08-20) of kernel 2.4.7 recommended patches, Linux for S/390 31-bit distributions and Linux for zSeries 64-bit distributions can be built using:

and the updated recommended 31-bit and 64-bit OCO-modules lcs, qdio, qeth.

Please check out the Restrictions page on Kernel 2.4.7.

Please refer to the Experimental page for an experimental kernel 2.4.7 patch for 64-bit distributions and the matching 64-bit OCO modules.

Please see the kernel 2.4 Documentation page for the 31-bit and 64-bit manuals.

"On-demand Timer"

Release notes:

This patch contains the following linux kernel bug fixes:

Description:
Compilation of sysinfo.
Symptom:
/proc/sysinfo is missing.
Problem:
The file that contains the implementation of the new /proc/sysinfo entry has not been added to the Makefile. Hence it is not compiled and /proc/sysinfo is missing in the running system.
Solution:
Add sysinfo.o to the s390 drivers Makefile.
Description:
Export dasd_device_from_kdev.
Symptom:
No symptom.
Problem:
A dasd module can't use the dasd_device_from_kdev function because it is inline and the symbol name is not exported. This function is needed if a dasd module wants to use dynamic i/o controls.
Solution:
Export symbol dasd_device_from_kdev.
Description:
A kernel built without the proc filesystem panics during boot.
Symptom:
When CONFIG_PROC_FS is not selected, the kernel will compile but panic during boot when trying to create a /proc entry in s390io.
Problem:
The common I/O layer tries to create /proc entries even though the proc filesystem is disabled.
Solution:
Exclude the proc filesystem interface functions from s390io if the proc filesystem is switched off.
Description:
Signal problem in the VFS layer.
Symptom:
Endless kernel loop.
Problem:
The signal info codes from the kernel header file siginfo.h miss some bits that are used internally to control the handling of the signal.
Solution:
Add the missing bits to the siginfo codes.
Description:
Network throughput problem with high cpu load.
Symptom:
CPU intensive workload slows down network traffic.
Problem:
The wakeup of a process does not cause a preemptive reschedule of the CPU intensive process due to a comparison problem between unsigned integers of different size.
Solution:
Fix the comparison so that the preemptive reschedule works.
Description:
CTC problem on machines with more that 2G memory.
Symptom:
Very slow data flow when using TCP/IP (e.g. ftp transfers).
Problem:
Usage of IDA lists with CTC did not work, resulting in a lot of dropped packets due to TCP checksum errors.
Solution:
Using memcpy to low memory transfer buffer instead of IDA lists.

Everybody should apply this patch.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (GNU)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)
+ linux-2.4.7-s390-4.diff (IBM)

Release notes:

On demand timer patch:
Category operating system. Contains a patch for the linux kernel 2.4.7 that changes the timing method from the regular 100 hz interrupts to on demand timer interrupts. This saves some cpu cycles in an idle linux image. The drawback is that a busy linux image will do a small amount of additional work every time the switch between user mode and kernel mode is done. In short if you are running many images under VM the on demand timers are useful but you probably don't want to use it running under LPAR or native. The patch introduces a configuration option CONFIG_NO_HZ_TIMER that lets you choose between the old and the new behavior. Note that you'll need different lcs, qdio, and qeth modules if you use the no hz timer option.

Recommended OCO modules 31-bit

The lcs, qdio, qeth 31-bit and 64-bit OCO-modules of 2001-11-23 are replacements for the previously recommended modules.

OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the 2001-11-23 "on-demand timer" patch applied.
On-demand timer 31-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390-4-timer.tar.gz, qdio-2.4.7-s390-5-timer.tar.gz, and qeth-2.4.7-s390-5-timer.tar.gz.
Standard 100 Hertz timer 31-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390-4.tar.gz, qdio-2.4.7-s390-5.tar.gz, and qeth-2.4.7-s390-5.tar.gz.

Recommended OCO modules 64-bit

OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the 2001-11-23 "on-demand timer" patch applied.

On-demand timer 64-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390x-4-timer.tar.gz, qdio-2.4.7-s390x-5-timer.tar.gz, and qeth-2.4.7-s390x-5-timer.tar.gz
Standard 100 Hertz timer 64-bit kernels with the 2001-11-23 patches now need: lcs-2.4.7-s390x-4.tar.gz, qdio-2.4.7-s390x-5.tar.gz, and qeth-2.4.7-s390x-5.tar.gz

2001-11-09 patches

The 2001-11-09 set of Linux Kernel version 2.4.7 and s390 tools recommended patches for Linux for S/390 and Linux for zSeries deliver several fixes and updates.

Furthermore the 31-bit and 64-bit recommended OCO-modules lcs, qdio, qeth have been updated with bug-fixes.

Together with the 2001-10-12 and 2001-09-14 patches applied on top of the first set (2001-08-20) of kernel 2.4.7 recommended patches, Linux for S/390 31-bit distributions and Linux for zSeries 64-bit distributions can be built using:

and the updated recommended 31-bit and 64-bit OCO-modules lcs, qdio, qeth.

Please check out the Restrictions page on Kernel 2.4.7.

Please refer to the Experimental page for an experimental kernel 2.4.7 patch for 64-bit distributions and the matching 64-bit OCO modules. An updated z90crypt 31-bit OCO module is also provided there.

Please see the kernel 2.4 Documentation page for the 31-bit and 64-bit manuals.

"On-demand Timer"

Release notes:

This patch contains the following linux kernel bug fixes:

Description:
Reset of files in VM reader.
Symptom:
The files in the VM reader running on a P/390 are not resetted.
Problem:
The test that used to decide if a reset should be done is wrong if the system is running on a P/390.
Solution:
Make the decision if the reset should be done only dependent on the VM flag in the cpu id.
Description:
PFAULT on 31 bit.
Symptom:
No efficiency improvement with pfault on 31 bit.
Problem:
The check in the pfault interrupt handler for the pfault subcode is wrong. The interrupt handler is left without doing anything. The system doesn't crash but you won't see a benefit either.
Solution:
Fix the subcode check.
Description:
llseek in the 31 bit emulation.
Symptom:
31 bit programs running under the 31 bit emulation layer on a 64 bit system create huge files with size > 4GB.
Problem:
The llseek system call in the 31 bit emulation layer is converted incorrectly.
Solution:
Fix the conversion routine for llseek.
Description:
Locking problem in dasd driver.
Symptom:
Kernel crash after formatting a device.
Problem:
The function that cancels the format ccw in case of an error doesn't lock the dasd device structure properly. This is a race condition against the end of the i/o and can crash the system due to null pointer access.
Solution:
Properly lock the dasd device structures.
Description:
Block padding for the short blocks of the common disk layout.
Symptom:
The first few blocks of a dasd formatted for the common disk layout contain random data in the rear end of the block.
Problem:
The first few blocks of a dasd formatted with the common disk layout are physically shorter then the block size of the device. The linux buffer for these blocks contain random data in the suffix of the blocks that is not backed by phsical data.
Solution:
Pad the suffix of the short blocks with byte pattern 0xe5.
Description:
Channel device layer configuration.
Symptom:
Additional parameters after an "add_parms" statement are not recognized.
Problem:
After parsing the add_parms statement the input pointer is not moved to the next string.
Solution:
Move the next string after parsing the add_parms statement.
Description:
I/O layer doesn't deliver interrupts.
Symptom:
The device interrupt handler of a terminated ccw is not always called. For example the halt of the long running rewind of a tape device does not trigger the tape device interrupt handler.
Problem:
The expression if a device has ending status does not cover all cases.
Solution:
Correctly check for ending status.
Description:
System information.
Symptom:
None.
Problem:
A means to get information about the system configuration in the user space is needed. The store system information instruction is priviledged and can not be used from user space.
Solution:
Provide a proc file system entry that contains the data that can be extracted from the store system information instruction.
Description:
Busy loop in the partition detection
Symptom:
The system hangs in the partition detection.
Problem:
The skip of format 4/5/7 labels doesn't increase the number of the label block. This leads to a busy loop that reads the same block over and over again.
Solution:
Increase the block number for format 4/5/7 label blocks.

Everybody should apply this patch.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (GNU)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)
+ linux-2.4.7-s390-3.diff (IBM)

This patch contains the new s390-tool dasdview, which could be used to display DASD and VTOC information or to dump the content of a DASD to the console. For more information see the dasdview man page.
In addition are there the following bug fixes:

Description:
fdasd: new menu entry.
Symptom:
There was no way to see the z/OS data set names.
Problem:
The mapping between partition number in the device node and the z/OS data set name could change in case you do some strange re-partitioning. There was no way to display this mapping.
Solution:
New fdasd menu entry 's' to show the mapping between partition number in the device node and the z/OS data set name.
Description:
fdasd: partition number in z/OS data set name.
Symptom:
Confusing mapping between partition number in the device node and the z/OS data set name.
Problem:
The partition number in the device node starts counting with "1"and the partition number in the z/OS data set name started counting with "0".
Solution:
Both start counting from "1" and older partitions will be converted automatically to the new numbering schema.
Description:
dasdfmt: cylinderwise formatting.
Symptom:
dasdfmt formats the disk cylinderwise if you are using the '-p' or '-m' option, otherwise the disk will be formatted as one big part.
Problem:
none.
Solution:
We will format cylinderwise in every case now.
Description:
dasdfmt: signal handler.
Symptom:
dasdfmt leaves the disk in the accepted state in case of an abruption (e.g. Ctrl+C).
Problem:
The disk is unusable until you reset it.
Solution:
A signal handler sets the DASD back to the 'not formatted' state in case of a abruption.

Everybody should apply this patch.

To create the complete S/390 tools sources, the following patches need to be applied in sequence:

s390-tools.tar.gz (IBM)
+ s390-tools-1.diff (IBM)
+ s390-tools-2.diff (IBM)
+ s390-tools-3.diff (IBM)

Recommended OCO modules 31-bit

The lcs, qdio, qeth 31-bit and 64-bit OCO-modules of 2001-11-09 are replacements for the previously recommended modules.

OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the 2001-10-12 "on-demand timer" patch applied.

On-demand timer 31-bit kernels with the 2001-11-09 patches now need: lcs-2.4.7-s390-3-timer.tar.gz, qdio-2.4.7-s390-4-timer.tar.gz, and qeth-2.4.7-s390-4-timer.tar.gz.
Standard 100 Hertz timer 31-bit kernels with the 2001-11-09 patches now need: lcs-2.4.7-s390-3.tar.gz, qdio-2.4.7-s390-4.tar.gz, and qeth-2.4.7-s390-4.tar.gz.

Recommended OCO modules 64-bit

OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the 2001-10-12 "on-demand timer" patch applied.

On-demand timer 64-bit kernels with the 2001-11-09 patches now need: lcs-2.4.7-s390x-3-timer.tar.gz, qdio-2.4.7-s390x-4-timer.tar.gz, and qeth-2.4.7-s390x-4-timer.tar.gz

Standard 100 Hertz timer 64-bit kernels with the 2001-11-09 patches now need: lcs-2.4.7-s390x-3.tar.gz, qdio-2.4.7-s390x-4.tar.gz, and qeth-2.4.7-s390x-4.tar.gz

Installation and usage are described in the included README file. Note that unless your system has at least one PCICC, this driver does not work.

2001-10-12 patches

The 2001-10-12 set of Linux Kernel version 2.4.7 (and related) recommended patches for Linux for S/390 and Linux for zSeries deliver several fixes and updates, along with updated OCO-modules lcs, qdio, and qeth for 31-bit and 64-bit.

Together with the 2001-09-14 patches applied on top of the first set (2001-08-20) of kernel 2.4.7 recommended patches, Linux for S/390 31-bit distributions and Linux for zSeries 64-bit distributions can be built using:

with the recommended 31-bit and 64-bit OCO-modules lcs, qdio, qeth.

Please check out the Restrictions page on Kernel 2.4.7.

Please see the "Linux for zSeries (64-bit)" section of the Documentation page for the newly provide kernel 2.4.7 64-bit related manuals:

The HiperSockets Device Driver manual on the same page has also been updated with corrections. Notes on superseded items:

On-demand timer kernels need:

Standard 100 Hertz timer kernels need:

Release notes:

This patch contains the following binutils bug fix:

Description:
Warnings about zero index or base registers misleading.
Symptom:
The assembler issues warnings about zero index or base registers.
Problem:
Explicitly specified zero index or base registers can indicate faulty statements because if the register 0 is used as part of an address 0 is added to the effective address instead of the content of register 0. Sometimes it is useful to get these warnings but in other cases there messages can be confusing.
Solution:
Add an option "-mwarn-areg-zero" that enables the warnings about zero index or base registers. Default is off.

The patch contains the following additions and changes:

Everybody should apply this patch.

To create the complete binutils sources, the following patches need to be applied in sequence:

binutils-2.11.90.0.27.tar.gz (GNU)
+ binutils-2.11.90.0.27-s390.diff (IBM)
+ binutils-2.11.90.0.27-s390-1.diff (IBM)

This patch contains the following compiler bug fixes:

Description:
Incorrect use of LA (load address) instruction.
Symptom:
LA used to add integers.
Problem:
In some rare cases, the compiler would generate code using the LA instruction to perform an integer addition. However, the LA instruction does in fact do only a 31-bit addition, and hence can only be safely used to compute 31-bit addresses, not arbitrary 32-bit integers.
Solution:
Make sure that LA is never used unless it is known that the result of LA will be used as an address.
Description:
Bug in compiler common code (regmove).
Symptom:
Incorrect code is generated.
Problem:
In some rare cases, the compiler would generate code that clobbers incoming function arguments. This was caused by a bug in the regmove pass, which didn't properly check for that case.
Solution:
Fix regmove.
Description:
Bug in debug information generation.
Symptom:
Unresolved symbols when linking optimized code compiled with debug information.
Problem:
In some rare cases, when linking code compiled with both high optimization level and debug information, the debug data could contain symbol references to symbols that were not actually present in the code any more, because the optimizer had managed to completely eliminate them. This would cause unresolved symbol errors.

The problem would show up only for floating point variables that are constant throughout a function.

Solution:
Don't emit debug data for those variables.
Description:
Incorrect profiling code.
Symptom:
Function profiling does not work (31-bit only).
Problem:
The code emitted by the compiler when doing function profiling (gcc -p) was incorrect.
Solution:
Fix profiling code.
Description:
Inefficient code generation.
Symptom:
Performance regressions compared to gcc 2.95.2.
Problem:
In some cases, performance of code generated with the latest compiler was worse than performance of code generated with our gcc 2.95.2 based compilers. The reason for this is that the changes introduced to support better condition code handling, while having an overall positive effect on performance, could in some cases result in worse code because other parts of the optimizer were confused by the now more complex RTL code. In particular, this affected the instruction scheduler and the use of base + index register addressing modes.
Solution:
Improve performance in those cases by:

As it is not easily predictable which source code triggers the code generation bugs fixed here, everyone using the compiler should apply this patch.

To create the complete compiler sources, the following patches need to be applied in sequence:

gcc-2.95.3.tar.gz (GNU)
+ gcc-2.95.3-s390.diff (IBM)
+ gcc-2.95.3-s390-1.diff (IBM)
+ gcc-2.95.3-s390-2.diff (IBM)

This patch contains the following gdb bug fixes:

Description:
Incorrect stack frame analysis.
Symptom:
gdb doesn't show the (full) stack backtrace.
Problem:
In some cases, the stack frame analysis would get confused, causing gdb to not show the full stack backtrace.

The problem was especially noticable on 64-bit, and when backtracing out of a signal handler or glibc system call.

Solution:
Improved stack frame analysis.

You should apply this patch if you are experiencing problems with stack backtraces (for 64-bit support you should apply the patch in any case).

To create the complete gdb sources, the following patches need to be applied in sequence:

gdb-5.0.tar.gz (GNU)
+ gdb-5.0-s390.diff (IBM)
+ gdb-5.0-s390-1.diff (IBM)
+ gdb-5.0-s390-2.diff (IBM)

This patch contains the following glibc bug fixes:

Description:
Warnings about zero index or base registers misleading.
Symptom:
Endless loop or crashes in user programs that use string streams.
Problem:
Using sputback on a strstreambuf object and subsequently deleting it without reading the characters back would cause an invalid memory area to be freed. That can lead to crashed or endless loops.
Solution:
Switch back to correct memory area in destructor function for the strstreambuf object.
Description:
64 bit pthread long jump function broken.
Symptom:
pthread cleanup function not called on cancel.
Problem:
The unwinding of the stack to a previous location in the pthread long jump function fails because of an incorrect address comparison.
Solution:
Fix address comparison.

Everybody should apply this patch.

To create the complete glibc sources, the following patches need to be applied in sequence:

glibc-2.2.4.tar.gz (GNU)
+ glibc-linuxthreads-2.2.4.tar.gz (GNU)
+ glibc-2.2.4-s390.diff (IBM)

recommended (2001-10-12)

This patch contains the following linux kernel bug fixes:

Description:
Pagex interrupts can overwrite program check information.
Symptom:
User program crashes.
Problem:
The pagex interrupt could overwrite the information in the lowcore about the last program check because interrupts are reenabled to early. The program check is then handled incorrectly after the pagex interrupt returns.
Solution:
Do not reenable the interrupts in the first level program check handler. Let the second level program handler decide when the interrupts should be reenabled.
Description:
Inline assembly contraints too weak for latest compiler.
Symptom:
Assembler error messages compiling the kernel.
Problem:
The contraints of some inline assemblies allow a full memory reference with offset, base and index register for instructions that only accept memory references with offset and base register.
Solution:
Reload the full memory reference to a register or use the "a" constraint in the inline assemblies.
Description:
bottom half scheduling.
Symptom:
Idle system load one instead of zero.
Problem:
The timer interrupt handler dosn't call irq_enter/irq_exit early enough causing the softirq daemon to be scheduled. The now runnable softirq daemon increases the load and is scheduled normally just to return immediatly. This only causes a slight increase in the cpu usage the load is not really one.
Solution:
Call irq_enter just after entering the timer interrupt handler and irq_exit just before leaving.
Description:
Missing symbol strstr.
Symptom:
The load of a module fails because of undefined symbol strstr.
Problem:
The strstr function is not exported by the kernel.
Solution:
Export the strstr function.
Description:
Dasd performance problem.
Symptom:
The dasd driver uses too much cpu.
Problem:
The profiling code to collect the information for /proc/dasd/statistics takes too much time.
Solution:
Deactivate the dasd profiling. To reenable it the DASD_PROFILE define needs to be set.
Description:
Proc interface for dynamic addition/removal of dasd devices.
Symptom:
Dynamic add/remove of dasd devices does not succeed.
Problem:
The /proc/dasd/devices interface doesn't accept strings ending with a newline.
Solution:
Strip newline from strings written to /proc/dasd/devices.
Description:
Stopping tape driver operations.
Symptom:
Kernel crashes after stopping tape operations.
Problem:
If a tape operations is canceled the tape i/o request is not stopped but the memory area that is used by the operation is freed. The reused memory can be clobbered by the still running i/o request.
Solution:
Wait uninterruptible for the end of tape i/o requests.
Description:
CTC i/o timeout problem.
Symptom:
Kernel message "kernel timer added twice at ...".
Problem:
The i/o timeout for the CTC channels is not deleted in all cases.
Solution:
Remove pending timer in the channel restart function.
Description:
TCP/IP problems with sockets in TIME_WAIT state.
Symptom:
Kernel crashes under heavy TCP/IP load.
Problem:
There are two problems in the common TCP/IP code with regard to the handling of sockets in the TIME_WAIT state. The first is a typo that causes the reference count of the wrong socket to be decremented and the second it a race condition. Both problems can lead to clobbered socket memory.
Solution:
Decrement reference count of the correct socket and avoid the race condition by increasing the reference count.

Everybody should apply this patch.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (GNU)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)
+ linux-2.4.7-s390-2.diff (IBM)

Release notes:

On demand timer patch
Category operating system. Contains a patch for the linux kernel 2.4.7 that will change the timing method from the regular 100 hz interrupts to on demand timer interrupts. This saves some cpu cycles in an idle linux image. The drawback is that a busy linux image will do a small amount of additional work every time the switch between user mode and kernel mode is done. In short if you are running many images under VM the on demand timers are useful but you probably don't want to use it running under LPAR or native. The patch introduces a configuration option CONFIG_NO_HZ_TIMER that lets you choose between the old and the new behavior. Note that you'll need different lcs and qeth modules if you use the no hz timer option.

This patch contains the following strace bug fix:

Description:
Follow-fork failed on 64-bit.
Symptom:
strace -f does not work on 64-bit.
Problem:
The follow-fork mechanism inserts an instruction into the target process. This was not correctly adapted to 64-bit.
Solution:
Fixed incorrect instruction.

You should apply this patch if you want to use strace on the 64-bit zSeries architecture.

To create the complete strace sources, the following patches need to be applied in sequence:

strace-4.2.20010119.tar.gz (RedHat 7.1)
+ strace-4.2.20010119-s390.diff (IBM)
+ strace-4.2.20010119-s390-1.diff (IBM)

This patch contains the following s390-tools bug fixes:

Description:
s390-tools default install location.
Symptom:
The s390-tools binaries were installed into /bin.
Problem:
As system administration tools, the default install location for the s390-tools binaries should be /sbin, not /bin.
Solution:
Change default install location to /sbin.
Description:
fdasd creates invalid partitions.
Symptom:
Error message "BUG: overlapping free space extents in FMT5 DSCB!"
Problem:
fdasd miscalculated the partition borders if the option -c is used.
Solution:
Correct calculation.

Everybody should apply this patch.

To create the complete S/390 tools sources, the following patches need to be applied in sequence:

s390-tools.tar.gz (IBM)
+ s390-tools-1.diff (IBM)
+ s390-tools-2.diff (IBM)

Note:
There is a new lkcdutils version (4.0) which contains the dump analysis tool "lcrash" with Linux for zSeries support (64-bit). With this version of lcrash, it is possible to analyze 64-bit Linux for zSeries system memory dumps. You can download it at:
"http://lkcd.sourceforge.net/download/4.0/lkcdutils".

Recommended OCO modules 31-bit

Recommended OCO modules 64-bit

2001-09-28 OCOs

Recommended OCO modules (31-bit) - qdio and qeth device drivers

The following network device drivers are compatible with the Linux kernel version 2.4.7 as of 2001-09-14 and are object code only.

HiperSockets support for qdio and qeth

The qdio and qeth OCO modules based on kernel level 2.4.7 now support HiperSockets as well as OSA-Express QDIO cards. The support of HiperSockets was tested for Linux for S/390 running under LPAR only.

In the Documentation section you can find the Linux for S/390 Device Drivers and Installation Commands manual and the new HiperSockets Device Driver manual, which describe the use of these device drivers.

Configuration considerations:

Note: If you are using the linux-2.4.7-timer.diff and have the CONFIG_NO_HZ_TIMER option switched on, you will have to use the lcs or qeth module with the timer option (e.g. lcs-2.4.7-s390-timer.o instead of lcs-2.4.7-s390-1.o)

Restrictions for QDIO base support and OSA-Express Driver:

LCS driver

The LCS driver remains unchanged since 2001-09-14.

Experimental OCO modules (64-bit) - qdio and qeth device drivers

The following experimental 64-bit device drivers are compatible with Linux kernel version 2.4.7 as of 2001-09-14 and are object code only.

The qdio and qeth OCO modules now also support HiperSockets for Linux for S/390 running under LPAR.

For configuration considerations refer to the corresponding 31-bit OCO modules as of 2001-09-28.

Note: If you are using the linux-2.4.7-timer.diff and have the CONFIG_NO_HZ_TIMER option switched on, you will have to use the modules with timer (e.g. qeth-2.4.7-s390x-2-timer.o instead of qeth-2.4.7-s390x-2.o).

Experimental OCO module (31-bit) - z90crypt device driver

The z90crypt device driver provides an I/O-like interface to any PCI Cryptographic Coprocessors (PCICC) attached to an S/390. The only cryptographic function currently supported is RSA PKCS private key decrypt.

Installation and usage are described in the included README file. Note that unless your system has at least one PCICC, this driver does not work.

2001-09-14 patches

The 2001-09-14 set of Linux Kernel version 2.4.7 (and related) recommended patches for Linux for S/390 and zSeries provides some new functions and several fixes.

Recommended 31-bit OCO modules for Linux for S/390 and zSeries are:

  • 2001-09-28   qdio and qeth with HiperSockets support
  • 2001-09-14   lcs

Together with the 2001-08-20 set of Linux kernel version 2.4.7 (and related) recommended patches, a kernel 2.4.7-based Linux for S/390 31-bit distribution can be built using:

with the 31-bit OCO-modules lcs, qdio, qeth.M.

Please check out the Restrictions page on Kernel 2.4.7.
Please see the Documentation page for the updated kernel 2.4.7 manuals:

The 2001-09-11 kernel 2.4.7 patches include the new "on-demand timer" which introduces a kernel configuration option CONFIG_NO_HZ_TIMER that lets you choose between the regular 100 Hertz timer and the new on-demand timer. The on-demand timer should improve throughput on z/VM systems running many, mostly idle Linux for S/390 guests. It may slightly impact performance running Linux for S/390 in other situations under VM (for example a few heavily loaded images), in LPAR, or in native mode.

Therefore any Linux for S/390 distribution should include a kernel built with the on-demand timer only as an alternate kernel (providing a standard timer kernel for environments where the on-demand timer may impact performance).

Important notice: The OCO-modules lcs, qdio, and qeth must be selected correctly for kernels with or without the on-demand timer activated:

Although several 64-bit related bug-fixes are included, the 64-bit tests are not yet concluded and the patches and OCO-modules which are recommended for 31-bit are still considered experimental for 64-bit environments.

Release notes:

This patch contains the following binutils bug fix:

Description:
brxlg instruction syntax.
Symptom:
Message "Error: unsupported relocation type" is issued assembling brxlg.
Problem:
The order of the operands of brxlg was entered incorrectly in the instruction table of gas.
Solution:
Correct the order of the operands of brxlg.

Everybody using the 64 bit compiler dated 2001-08-18 should apply this patch. The brxlg is rarely used but some very big functions will require it.

To create the complete binutils sources, the following patches need to be applied in sequence:
binutils-2.11.90.0.27.tar.gz (GNU)
+ binutils-2.11.90.0.27-s390.diff (IBM)
+ binutils-2.11.90.0.27-brxlg.diff (IBM)

Release notes:

This patch contains the following compiler bug fixes:

Description:
Bad prolog code with -mno-backchain option.
Symptom:
Incorrect prolog code is generated.
Problem:
Even with the -mno-backchain option, it is sometimes necessary to maintain a backchain, e.g. when the stack frame is too large. The check whether this is the case was wrong.
Solution:
Check for correct condition.
Description:
Bug in compiler common code (cse).
Symptom:
Incorrect code is generated.
Problem:
Due to a bug in the cse phase, under some (rare) circumstances it was possible that the compiler did not notice that a register was modified by an instruction, and hence generated invalid code. This can only occur at high optimization level, and has been noticed only in a single test case.
Solution:
Fix cse.
Description:
Wrong type definitions in the Fortran frontend for 64-bit.
Symptom:
The Fortran frontend and the Fortran libraries use inconsistent type definitions.
Problem:
The Fortran support libaries try to find out the sizes of the various integer data type by evaluating the ..._SIZE_TYPE macros in header files. This breaks on S/390, as e.g. LONG_SIZE_TYPE is not a compile-time constant (it depends on whether 32-bit or 64-bit code is being generated). As a result, when building the Fortran libraries for 64-bit, type definitions don't match what the Fortran compiler expects, causing a variety of run-time problems.
Solution:
Change the type definitions to work both on 32-bit and 64-bit.
Note:
This is just a workaround, not a proper fix. It is not guaranteed to work on non-S/390 architectures. This problem is fixed correctly in gcc 3.0.

As it is not easily predictable which source code triggers the code generation bugs fixed here, everyone using the compiler should apply this patch.

To create the complete compiler sources, the following patches need to be applied in sequence:

gcc-2.95.3.tar.gz (GNU)
+ gcc-2.95.3-s390.diff (IBM)
+ gcc-2.95.3-s390-1.diff (IBM)

Release notes:

This patch contains the following gdb bug fix:

Description:
gdbserver support.
Problem:
Compiling a cross debugger for S/390 is not possible.
Solution:
Provide the support for cross debugging for S/390.
Note:
The gdbserver doesn't support debugging multithreaded applications on S/390 or any other platform. This patch also fixes the target signal remapping for all platforms (for example SIGUSR1 used to be deliveres as SIGBUS).

Everybody who wants to setup a gdbserver will need this patch.

To create the complete gdb sources, the following patches need to be applied in sequence:

gdb-5.0.tar.gz (GNU)
+ gdb-5.0-s390.diff (IBM)
+ gdb-5.0-s390-1.diff (IBM)

Release notes:

This patch contains the following linux kernel bug fixes:

Description:
IUCV driver restrictions.
Symptom:
Only 20 IUCV connections can be defined.
Problem:
Static netdevice array only has room for 20 connections.
Solution:
Complete rework of the IUCV driver. Now it uses the same state machine approach like the CTC driver and dynamically allocates all structures.
Description:
Asynchronous interrupt kernel stack.
Symptom:
Kernel crashes under heavy load.
Problem:
With the new softirq scheme the kernel stack usage has increased significantly. In the worst case the kernel stack contains the stack frames for a system call, a program check, a softirq and a hard irq. If the kernel stack overflows the task structure is clobbered and this normally ends in a kernel crash.
Solution:
To reduce the kernel stack usage a second stack was introduced. This stack contains the stack frames of asynchronous interrupts and the stack frames used by execution of the softirq functions.
Description:
Memory detection routine.
Symptom:
Processes get killed with addressing exceptions.
Problem:
In the boot process the full range of addresses between the end of the kernel and the end of storage is added and later on unusable areas are recognized. The removal of these areas doesn't work and the areas are accessed as normal memory.
Solution:
Create a list of usable memory blocks early in the boot process and do not add the unusable memory in the first place.
Description:
SMP inter-processor communication.
Symptom:
Kernel crashes.
Problem:
The next pointer in the list of functions to be called on a processor might get corrupted if the storage of a list element is reused to early.
Solution:
Complete rework of smp_call_function to allow only for a single outstanding function call and add a lock to protect against concurrent uses.
Description:
Internal timestamps inexact.
Symptom:
Newer version of ping warn about "time of day goes back".
Problem:
The timestamps used in the socket buffers are created by a call over the function pointer do_get_fast_time. By default this pointer refers to a functions that just copies the content of xtime without adjusting it with the use of the hardware clock.
Solution:
Set the pointer do_get_fast_timer to a function that uses the tod clock to get precise time stamps.
Description:
IEEE emulation for tceb, tcdb and tcxb.
Symptom:
On machines without a real IEEE fpu the emulation warns about unimplemented instructions like tceb, tcdb, tcxb, diebr and didbr.
Problem:
The emulation functions for some IEEE instructions have not been implemented yet.
Solution:
Implement some of the missing IEEE emulation functions.
Note:
The two instructions diebr and didbr are still missing but the GNU C compiler is not using them right now.
Description:
Locking problems with module insertion/removal.
Symptom:
Process and/or kernel crashes.
Problem:
While modules are inserted/removed processes can crash if they are revolving page faults at the same time the module_list is changed.
Solution:
Get the modlist_lock before searching the exception tables for program checks.
Description:
Dynamic attach/detach of devices.
Symptom:
The dynamic attach of devices sometimes does not work.
Problem:
The enabling of a subchannel with msch can fail for the first try, the second try works.
Solution:
After the first msch do a stsch, check if the device really is enabled and retry if not.
Description:
Dasd statistics.
Symptom:
The information in /proc/dasd/statistics is incorrect.
Problem:
The dasd profiling information is collected after the processing for a request has finished, voiding the profiling information.
Solution:
Collect the profiling information before the request is ended.
Description:
Dasd autoprobe.
Symptom:
The removal of the dasd module inserted without parameter causes an oops.
Problem:
For autoprobe the detected dasds are not enabled and no request queue is allocated. The disable routine that is called when the module is removed tries to free the non-existent request queue.
Solution:
Add a check for this condition.
Description:
Dynamic dasd devices.
Symptom:
Attaching/detaching dasd devices from linux causes kernel crashes.
Problem:
Deactivation of a dasd device either by a set off or a machine check was not done correctly.
Solution:
Correct deactivation code.
Description:
Minidisk devices.
Symptom:
Using the minidisk discipline of the dasd driver can cause kernel crashes.
Problem:
The request queue is changed in the minidisk interrupt function without holding the device lock. A concurrent access to the request queue on a different processor can destroy the request list.
Solution:
Acquire the device lock in the interrupt function before modifying the request queue.
Description:
Debug area flush.
Symptom:
None.
Problem:
To analyse a problem it would be useful if the debug area can be flushed of old entries.
Solution:
Add an entry in the /proc filesystem that allows to flush the debug area.
Description:
Pfault handling.
Symptom:
Pfault does not improve the cpu usage of linux if VM starts paging linux guest memory.
Problem:
A check in the pfault interrupt routine for the pfault subcode is wrong. The processor resumes execution of the faulting process immediatly which causes another pfault interrupt until the maximum number of pfault interrupts is reached. Then the guest page fault is resolved synchronously.
Solution:
Fix the check.
Description:
Rebooting 64 bit linux under zVM doesn't work.
Symptom:
After all processes have been killed and all but the boot cpu have been deactivated linux stops without restarting.
Problem:
To reboot linux under VM the diagnose 8 is used to issue an IPL command to VM. The diagnose 8 is not yet capable of accessing memory above 2GB. The output buffer for the command was allocated on the kernel stack that can reside above 2GB if the machine has enough storage.
Solution:
Use a static output buffer for passing the command and protect against concurrent uses with a spinlock.
Description:
Socket time stamps in 31 bit programs under 64 bit linux.
Symptom:
31 bit programs get errors calling SIOCGSTAMP ioctl.
Problem:
An ioctl was missing in the 31 bit emulation layer.
Solution:
Add the iotcl.
Description:
stat64 call in 31 bit programs under 64 bit linux.
Symptom:
31 bit programs get wrong data calling stat64.
Problem:
The 31 bit emulation of stat64 used an incorrect stat64 structure layout.
Solution:
Use the correct stat64 structure.
Description:
Signal delivery in 31 bit programs under 64 bit linux.
Symptom:
31 bit programs are dumping their core.
Problem:
The delivery of a signal to a 31 bit program under 64 bit linux leads to segmentation faults because the signal handler was called in the 64 bit addressing mode.
Solution:
Set the correct mask for 31 bit addressing in the program status word when delivering signals.
Description:
CTC driver crashed with more then 2GB.
Symptom:
Kernel crashes if CTC is used with more then 2GB memory.
Problem:
The idal bit in the channel command words is handled incorrectly.
Solution:
Correctly set the idal bit.

Everybody should apply this patch.

To create the complete linux kernel sources, the following patches need to be applied in sequence:

linux-2.4.7.tar.gz (GNU)
+ linux-2.4.7-s390.diff (IBM)
+ linux-2.4.7-s390-1.diff (IBM)

Release notes:

On demand timer patch
Category operating system. Contains a patch for the linux kernel 2.4.7 that will change the timing method from the regular 100 hz interrupts to on demand timer interrupts. This saves some cpu cycles in an idle linux image. The drawback is that a busy linux image will do a small amount of additional work every time the switch between user mode and kernel mode is done. In short if you are running many images under VM the on demand timers are useful but you probably don't want to use it running under LPAR or native. The patch introduces a configuration option CONFIG_NO_HZ_TIMER that lets you choose between the old and the new behavior. Note that you'll need different lcs and qeth modules if you use the no hz timer option.

Release notes:

This patch contains the following s390-tools bug fixes/improvements:

Description:
fdasd: VTOC format 5 DSCB support
Symptom:
OS/390 or z/OS cannot read free space information.
Problem:
The FMT5 DSCB written by fdasd was empty.
Solution:
Fdasd writes now a correct FMT5 DSCB containing free space information.
Description:
fdasd: VTOC format 7 DSCB support
Symptom:
OS/390 or z/OS cannot read free space information on large disks (>65535 tracks).
Problem:
The FMT7 DSCB was missing.
Solution:
Fdasd writes now in case of a large disk in addition to the FMT5 a FMT7 DSCB containing free space information.
Description:
fdasd: command line mode for one partition
Symptom:
None.
Problem:
Fdasd goes for every disk in interactive mode. You could not use scripts for a large amount of disks.
Solution:
The -a option of fdasd creates one big partition using the whole disk without switching in interactive mode.
Description:
fdasd: command line mode using a config file
Symptom:
None.
Problem:
Creating more than one partition in command line mode (e.g. using scripts).
Solution:
The -c option of fdasd uses a config file to create several partitions without switching in interactive mode.
Description:
fdasd: supress messages
Symptom:
None.
Problem:
Non-interactive mode of fdasd (-a or -c) produce to much output (e.g. using scripts)
Solution:
The -s option of fdasd to suppress messages.
Description:
fdasd: wrong OS/390 data set name
Symptom:
The data set name of the same partition has changed from an OS/390 point of view.
Problem:
Fdasd has changed the OS/390 data set name for a partition in case you delete and re-create a partition within the same fdasd session.
Solution:
The OS/390 data set name does not change anymore.
Description:
fdasd: OS/390 data set name contains blanks
Symptom:
OS/390 is not able to read the data set names created by fdasd.
Problem:
The volume serial contained in the data set name was filled up with blanks in case it had less than 6 characters.
Solution:
The OS/390 data set name contains no blanks anymore and can have different length, depending on the volser length.
Description:
fdasd: read-only disk access
Symptom:
Fdasd seems to write to a read-only disk, but doesn't really write to that disk.
Problem:
Fdasd doesn't complain about read-only disks, because the fwrite function calls returned wrong values.
Solution:
fdasd checks now for read-only disks and complains about them.
Description:
fdasd: wrong free space detection while adding partitions
Symptom:
Fdasd seems not to recognize values for new partitions within the range of existing partitions, but moves the value right behind the existing partition without saying anything.
Problem:
There was a message missing.
Solution:
Fdasd gives the user a message, in case it moves input values.
Description:
fdasd: re-create the whole VTOC
Symptom:
None.
Problem:
How to re-create the whole VTOC without deleting every single partition or in case the VTOC is corrupted.
Solution:
Fdasd got a new menu entry 'r', which re-creates the VTOC and deletes all partitions.
Description:
dasdfmt: VTOC format 7 DSCB support
Symptom:
OS/390 was not able to access large disks (>65536 trks) correctly.
Problem:
There was only a FMT5 DSCB containing free space information OS/390 needs in case of a large disk a FMT7 DSCB.
Solution:
Dasdfmt writes always a FMT5 DSCB and in case of a large disk in addition a FMT7 DSCB.
Description:
dasdfmt: formatting with a blksize >4096 or <512
Symptom:
The Disk remains in 'accepted' state and is no longer usable.
Problem:
The dasd driver returns error messages and forces dasdfmt to terminate.
Solution:
Dasdfmt checks now the given blksize and complains in case blksize > 4096 or blksize < 512.
Description:
dasdfmt: booting from a non-bootable disk
Symptom:
System hangs with a 'program interrupt loop'.
Problem:
Booting from a non-bootable disk results in a program interrupt loop.
Solution:
Dasdfmt writes now S/390 compatible boot straps while formatting to get a 'disabled wait' in case of booting from a non-bootable disk.
Description:
Hashmarks for dasdfmt
Symptom:
None.
Problem:
Format progress is not visible and progress bar option is not applicable for x3270 emulation.
Solution:
Prints a hashmark every x cylinders, where x is an optional parameter.
Description:
Progress bar for dasdfmt.
Symptom:
None.
Problem:
Format progress is not visible.
Solution:
Print a progress bar using the -p option. It is updated after each cylinder.
Description:
Multi volume support for system dump (tape 3480/90)
Symptom:
Dump is incomplete.
Problem:
The dump of a linux image won't fit on a single cartridge if the memory size of the image is bigger then the capacity of the cartridge.
Solution:
Allow dumping on several tape cartridges. The zgetdump tool can copy a multi volume dump to a file system in order to analyze it.
Description:
Tape device display support.
Symptom:
The end of the system dump process is hard to find out.
Problem:
The dump process stops by loading a disabled wait psw. This fact is only reflected on the SE where it can easily be overlooked.
Solution:
Use the tape display to indicate the dump progress.
Description:
64 bit support for dasd and tape dump.
Symptom:
The 31 bit dump records will only copy up to 2GB of system storage and the registers of all processors.
Note:
To get 64 bit enabled dump tools, the s390-tools packages needs to be compiled with the 64 bit tool chain.

Everybody should apply this patch.

To create the complete s390-tools sources, the following patches need to be applied in sequence:

s390-tools.tar.gz (IBM)
+ s390-tools-1.diff (IBM)

Experimental OCO modules (64-bit)

The following experimental 64-bit device drivers are compatible with Linux kernel version 2.4.7 as of 2001-09-14 and are object code only. Documentation on their use can be found in the Documentation section.

Note: If you are using the linux-2.4.7-timer.diff and have the CONFIG_NO_HZ_TIMER option switched on, you will have to use lcs-2.4.7-s390x-timer.o module instead of lcs-2.4.7-s390x-1.o and qeth-2.4.7-s390x-timer.o instead of qeth-2.4.7-s390x-1.o.

Restrictions for QDIO base support and OSA-Express Gigabit Ethernet Driver:

Code drop 31-bit:

OCO modules (31-bit):

These network device drivers are compatible with the Linux kernel version 2.4.7 and are object code only. Documentation on their use can be found in the Linux for S/390 device drivers manual in the Documentation section.

Restrictions for QDIO base support and OSA-Express Driver:

experimental OCO modules (64-bit):

The following experimental 64-bit device drivers are compatible with Linux kernel version 2.4.7 and are object code only. Documentation on their use can be found in the Documentation section.

Restrictions for QDIO base support and OSA-Express Gigabit Ethernet Driver:

Contact the IBM team

If you want to contact the Linux on System z IBM team refer to the Contact the Linux on System z IBM team page.