Dear SCO Customer, Support Level Supplement (SLS) PTF4004A, the UnixWare 2.1.3 lbolt patch, resolves a problem where, after running successfully for 248 days, a UNIX system becomes unstable; it behaves unpredictably, freezes or panics. This can readily be seen when trying to unmount a filesystem. The UNIX kernel maintains a count "lbolt" (lightning bolt) of the number of clock ticks (100 per second) since startup. This count is used internally for fine-grained timestamping in various kernel modules, and is also available to commands in the return value of the times(2) system call. lbolt is a long (signed 32-bit) variable. When the system has run for 248 days without rebooting, lbolt suddenly wraps from a high positive number to a low negative number, and after 497 days it again reaches its initial value of 0. Most uses of lbolt, and the return value from times(2), are good. However, in some places, kernel modules have assumed that lbolt would always be positive and increasing. For example, they have assumed that lbolt_now >= lbolt_just_before, which is (briefly) not so after 248 days, or that lbolt cannot have value 0 once started. Commands may have interpreted any negative value from times(2) as failure. Additionally, the Directory Name Lookup Cache uses a negative array index once lbolt becomes negative. Support Level Supplement (SLS) PTF4004A, the UnixWare 2.1.3 lbolt patch, contains fixed versions of kernel drivers that misused lbolt, and those commands and library calls (getrusage(3BSD) and times(3BSD)) that mistook the return value from times(2). When PTF4004A is installed, the system remains stable after 248 days, and after 497 days. For testing purposes only, SLS PTF4004A supports the boot parameter LBOLT=. For example, LBOLT=0x7ffa81c0 (in /stand/boot or typed at the boot prompt) will start lbolt from that number instead of from 0, so that after 1 hour lbolt will become negative; or if LBOLT=0xffff0000, then within 11 minutes lbolt will become 0 for an instant. However, note that use of this test parameter might introduce errors that would not be seen on a normal system. SLS PTF4004A spans many components. To avoid conflict with other Supplements, it contains some additional fixes, not necessarily related to the 248-day lbolt issue. Some system calls converted a "seconds" argument into lbolt "ticks", multiplying by HZ (100) without first checking whether the result would wrap. Several such instances have been fixed, notably the sleep(3C) system call. PTF4004A includes the four Virtual Memory Fixes from PTF4002B, the Virtual Memory Supplement for UnixWare. These fixes resolve problems with systems with more than 1GB of physical memory running out of kernel virtual memory; systems with more than 2GB needing /stand mip and sip programs copied from /etc/initprog; a panic in hat_pteload() caused by page_get_aligned(); and a panic in swap_free() caused by page_abort_l(). PTF4004A also includes the Machine Check Exception fixes from PTF3387, the Pentium Pro MCE Handling and Reporting Supplement: MCE status registers are reset on startup; MCEs are better reported; and the Pentium Pro Erratum #59 spurious MCE may be avoided by tuning P6ERRATUM59 to 1 (on sB1; with perhaps small impact on performance). PTF4004A also addresses the issue where lockf(3C) sometimes fails with "45 EDEADLK" even though there are no deadlock conditions. Future UnixWare 2.1.3 Supplements will include the PTF4004A lbolt fixes, where applicable to the files they update. To avoid conflict with future supplements, installation of PTF4004A checks whether any of its contents has been updated by a later supplement, and in each such case restores the later version of the file. Thus, PTF4004A can safely be installed or reinstalled, regardless of whatever supplements are already present on the system. Contents -------- /etc/conf/dtune.d/svc /etc/conf/mtune.d/svc /etc/conf/pack.d/cmux/Driver_atup.o Driver_mp.o /etc/conf/pack.d/cpqw/Driver_atup.o Driver_mp.o /etc/conf/pack.d/dow/Driver_atup.o Driver_mp.o /etc/conf/pack.d/fp/Driver_atup.o Driver_mp.o /etc/conf/pack.d/fs/Driver_atup.o Driver_mp.o /etc/conf/pack.d/ide/Driver.o /etc/conf/pack.d/io/Driver_atup.o Driver_mp.o /etc/conf/pack.d/kbd/Driver_atup.o Driver_mp.o /etc/conf/pack.d/ldterm/Driver_atup.o Driver_mp.o /etc/conf/pack.d/mem/Driver_atup.o Driver_mp.o /etc/conf/pack.d/nucfs/Driver_atup.o Driver_mp.o /etc/conf/pack.d/proc/Driver_atup.o Driver_mp.o /etc/conf/pack.d/ripx/Driver.o /etc/conf/pack.d/sdi/Driver_atup.o Driver_mp.o /etc/conf/pack.d/sfs/Driver_atup.o Driver_mp.o /etc/conf/pack.d/svc/Driver_atup.o Driver_mp.o space.c /etc/conf/pack.d/vxfs/vj_atup.o vj_mp.o vx_atup.o vx_mp.o /etc/conf/pack.d/xnamfs/Driver_atup.o Driver_mp.o /usr/X/bin/System_Monitor /usr/bin/csh /usr/ccs/lib/libc89.a /usr/sbin/cs /usr/sbin/hostmibd /usr/sbin/rtpm /usr/ucblib/libucb.a Software Notes and Recommendations ---------------------------------- PTF4004A should only be installed on SCO UnixWare Release 2.1.3. If the acp, bsdcompat, compaq, ccs, cmds, desktop, netmgt, nuc, nwnet, osmp, vxfs or PTF3387 package is installed after PTF4004A has been installed, PTF4004A should be installed again afterwards. The mem drivers in PTF4004A are identical to the mem drivers in PTF4002B - Virtual Memory Fixes for UnixWare 2.1.3. There is no need to install PTF4002B if you have already installed ptf4004a. The svc drivers in PTF4004A support PTF3387 MCE functionality, but with tunable P6ERRATUM59 instead of editing svc/space.c. There is no need to install PTF3387 if you have already installed PTF4004A. 2GB MEMRANGE boot restrictions can be removed after installing PTF4004A. The correct 4GB /stand/mip and /stand/sip files remain even after PTF4004A has been removed. Installation Instructions ------------------------- 1. Download the ptf4004a.Z file to the /tmp directory on your machine. 2. As root, uncompress the file and add the package to your system using these commands: $ su # uncompress /tmp/ptf4004a.Z # pkgadd -d /tmp/ptf4004a 3. Shut down and reboot the system after installing this package. The release notes displayed prior to installation can be found in /var/sadm/pkg/ptf4004/install/ptf4004.txt Removal Instructions -------------------- 1. As root, remove the package using these commands: # pkgrm ptf4004 2. Shut down and reboot the system after removing this package. If you have questions regarding this SLS, or the product on which it is installed, please contact your software supplier. We appreciate your business. SCO Support Services