The latest variant for RTU 6.0 is Variant 43. ================================================================================ RTU Version 6.0V43 Release Notes June 8, 1998 1. What's In This Kit The RTU version 6.0V43 kit includes the following items: 1. One 1/4-inch cartridge tape: Qty Label 1 RTU 6.0V43 2. These release notes. 2. Overview of Features Version 6.0V43 is a release of RTU that exists only for the rt-5400, rt-5600, and rt-6000 platforms. The 6.0V43 release is intended to correct the following problems: o Executing killall in a particular scenario, causes init to hang in a loop waiting for all its child processes to die. If init looses SIGCLD when the last child dies, it hangs waiting for the signal to occur. (SCR 5487) o Standalone xpiformat would fail with message unrecognized drive type - 8000 platforms only. (BSQR 7977) o Problem would appear as an xterm not coming up - 8000 platforms only. (BSQR 8035) o The poll and select system calls have been cleaned up, eliminating bugs which caused both missed events and spurious wakeups. The mapping between select and poll (select uses the poll facilities to implement select on sockets and streams) has been improved, resulting in correct behavior of select on sockets and streams - 6000 and 8000 platforms only. (BSQR 8039, BSQR 8111, and SCR 5668) o Section 5.3, entitled Uptime Clock and getuptime(3), of the Real-Time a nd Multiprocessing Manual introduces the functionality of the uptime clock. One RTU Version 6.0V43 Release Notes Page 1 sentence in the first paragraph states the counter is simulated in software with a base clock frequency of 120 hertz, resulting in a granularity of 8.333 milliseconds. In reality, this counter was updated at 60 hz intervals resulting in a granularity of 16.666 milliseconds. This fix corrected the counter update to 120 hz intervals. Now the counter is being updated at the interval stated in the aforementioned manual - for 6000 and 8000 platforms only. (SCR 5644) o Fix problems with mapping VME A24 and A32 address space from the second VME bus on a dual VME bus Series 8000 machine. Under RTU V6.0A the system call mmap() and the device driver support routine ioa_ptov() did not correctly map VME A24 and A32 address space on the second VME bus. This variant corrects these problems - for 8000 platforms only. (SCR 5704) o The in-core inodes representing open character special devices are marked as "dirty" when access/modification/change times are updated (ie. during a read(2) or write(2) operation). These "dirty" inodes are found by sync(2) and are synchronously written to disk. While a character device inode is being written to disk, an operation taking tens of milliseconds, character I/O to the device is blocked. This condition results in an application not being able to access the inode and, thus, the device for a period of 20 milliseconds or more each time a sync occurs. To correct this condition, the updates of character device inodes is now performed in a delayed rather than synchronous fashion. (SCRs 5642, 5490, 5491, 5492 and BSQR 7576) o The existing mechanism used by RTU for restoring AST context could, under certain conditions, result in a large number of AST saved contexts residing on a task's stack. This can cause a root thread's stack to continually grow or a non-root thread's stack to bottom out. This stack growth problem has been fixed in this variant but requires an application to be relinked against the RTU Version 6.0V43 Release Notes Page 2 libraries provided in this kit. (SCR 5748) o Configurable limits on: the amount of receive buffer space concurrently allocated (netblimit), the amount of STREAMS data buffers allocated, (strmaxbuf); the amount of STREAMS data structures allocated, (strthresh); the default reporting level for network interface drivers, (err_level). Better accounting for STREAMS data structures. In addition, a number of locking races in the network code were fixed - for 6000 and 8000 platforms only. (SCR 7810) o Systems hang very occasionally on boot. Waiting for instruction cache to empty out before reboot rectifys this problem - for 6000 platforms only. (SCR 5600) o Allow more than 256 open sockets, TLI STREAMs, TCP connections, and UDP endpoints - 8000 platforms only. o The device count for sockmod and timod are now ignored altogether by the modules. However, it must still be supplied (even if zero) in the config file. Per-stream control blocks are now allocated dynamically (upon I_PUSH) instead of statically (at boot time). o The device count for tcp and udp can now be as high as 1024. o New "devices" tcp1, tcp2, tcp3, udp1, udp2, and udp3 must be configured if the tcp or udp device count is more than 256; each one allows 256 more open streams, and must be allocated in order. For instance, if the device count for tcp is above 256, you must add the line tcp1 0 0 to your config file. If it is above 512, you must also add tcp2 0 0 If it is above 768, you must also add RTU Version 6.0V43 Release Notes Page 3 tcp3 0 0 udp1, udp2, and udp3 are used similarly. o For this variant, the device count for tcp should be twice the number of tcp connections desired. o Prior to this fix, plockin(2) might return an error (ENOMEM) if the region being locked included already-locked and/or physmem pages (in effect, these were being counted twice). An unnecessary and premature decision has been removed, and the function now returns ENOMEM only when the request contains more currently-unlocked pages than there is core available, - 6000 and 8000 platforms only. (SCRs 5488, 5565, 5814 and BSQR 8115) o A config which supports symmetric devices required by the sp-2650 layered product has been merged with the fix for mapping on the second VMEBus - 8000 platform only. (SCR 5841) o Two problems connected to 1/2" tape drives on the Xylogics 472 controller have been corrected in the xmt driver. The first problem was that writing multiple EOFs beyond EOT was not detected. This condition is now checked for. The second problem was that EOFs were not correctly detected when the tape drive was set at 800 bpi density. This situation is now resolved. (5600/5700 machines) (SCRs 5874, 5903) o A large timeshareing application which uses a very large amount of CPU time encountered a problem, whereby a task obtained an incorrect scheduling priority. Code that stores the priority values was corrected - 8000 platforms only. (SCR #5808) o A problem in the tty driver that allowed writing past an internal buffer has been fixed - 8000 platforms. (SCR 6067) o On an 8000, when an SPS is programmed to control more than one CPU, ASTs are now delivered to all controlled CPU's with the RTU Version 6.0V43 Release Notes Page 4 desired frequency. Previously, the first CPU would get regular ASTs, and the other CPUs would receive ASTs sporadically - 8000 platforms. (SCR 6057) o Several networking problems have been fixed - 8000 platforms. (SCR 6117) o In the sockmod module, eliminated duplicate de-allocation of buffers which could lead to memory corruption and panics. Also in the sockmod module, (input and service procedures) additional checks were added for existence of the socket private data structures. This prevents panics when the data structures have already been released but the Streams procedures are still trying to put messages on the queue. o Handling of messages by the icmp module is made similar to that in other transport modules to prevent panics in pullupmsg. o Streams utility routine pullupmsg() is corrected to eliminate the possibility of a data block being released while it is still in use which could lead to memory corruption and panics. o The MVIO parallel printer driver (strpp) has been corrected to avoid unnecessary enabling of queues after the stream has been closed. This could cause panics especially when printer is off-line initially. o An occasional inability of the system to accommodate further clock AST requests has been fixed - 8000 platforms. (SCR 6109) o Lance interrupt processing during reboot no longer causes a panic in rmfree() or kmem_free(). Interrupts are disabled earlier and the lance is reset to prevent stale data references after the slave CPU caches are invalidated. RTU Version 6.0V43 Release Notes Page 5 o Allocation of internal data structures associated with file locking is now performed in an MP-safe manner. On multiple CPU systems an inappropriate EDEADLK error can be received by a program issuing correctly sequenced lockf() calls. This can only occur if multiple programs run simultaneously locking and unlocking the same set of files. The EDEADLK is incorrect only if the programs are accessing the files in a deadlock-proof sequence - 6000/8000 platforms. (SCRs 5753, 6171) o Fixed the network hang problem for the case when the SO_LINGER socket option is set - 8000 platform. (SCR 6173) o I03 lance resets are now handled correctly so that network hangs with "silo underflow" error messages are alleviated - 8000 platform. (SCR 5956) o Corrected possible deadlock with the SO_LINGER option - 8000 platforms. (SCR 6206) Reassigning of vnode locks to socket locks led to breaking the locking for the socket's vnode and eventually to netd hangs. This reassigning of vnode locks was eliminated - 8000 platform. (SCR 5827) The maximum size of the kernel heap has been increased to 16 Megabytes on 8000 platforms only. The kernel heap is still limited to 4 megabytes on 5000 and 6000 platforms. (SCR 6207) o Tape exceptions resulting in one random (but configuration dependent) byte corrupting the kernel image have been eliminated by a modification to the ssad driver. Also the kernel will no longer panic when encountering the rare event in which the tape request sense fails - 8000 platforms. (SCR 6220) Changing terminal parameters (e.g., by getty) while output is in progress will no longer risk hanging the duart port (/dev/tty*) - RTU Version 6.0V43 Release Notes Page 6 8000 platforms. (SCRs 6166, 6127) The setsockopt() function now works as documented and provides correct handling of the SO_LINGER option. Also, an overflow of linger timer value is prevented - 8000 platforms. (SCR 6174) o The lockf() routine now correctly merges adjacent record locks into a single lock. (SCR 6210) o Heap memory corruption which occurs with the configurable kmem_buckets on, is eliminated. This problem was introduced in variant 6.0V11. (BSQR 8827, 8876) o Opening more than half the configured number of TCP connections no longer causes random system failures. (SCR 6439) o Non-blocking connect() call works correctly now; i.e. returns immediately with correct error codes. Also, functions of select(), shutdown(), close() calls when the socket is set to non-blocking mode are correct. (SC R 5974) o A TCP deadlock has been eliminated. (SCR 6484) o The memory allocator used in the nawk utility has been replaced with a faster version to optimize performance with large scripts. (S6418) o Enhanced ability of the ddx utility to strip blank-padded text files, such as those being imported from other systems. (S6180) o On 8000 systems, the ability to generate crashdumps has been improved. (S6645) o The EtherNet driver is now capable of allocating MultiBus IOmaps over a larger range of MultiBus addresses, making the system better able to cope with EtherNet traffic loads. (SCRs 6704,6219) RTU Version 6.0V43 Release Notes Page 7 o Several causes of tlp_miss panics in the kernel code for TCP/IP have been fixed. (SCR 6753) o The tape retension command now correctly blocks waiting for completion to prevent potential system crash. (SCR 6345) o It is now possible to redirect and disable VME interrupts on a per-level basis. (SCR 6798) o Fixed sys3.c ioctl routine so that the FIOASYNC ioctl for SIGIO works properly. (SCR 6718) o Pipe and device nodes are now handled correctly during selective restor operations. (SCR 5861) o The ioctl routine in the ccs driver will now return EINVAL for unsupported options. (SCR 5988) o A known problem exists where device numbers greater than 127 cannot be used. As a work around, the following major device numbers have been freed up for used by customers. o 5000 Series Machines 64 thru 126 12 thru 14, 60, 66, 74 thru 78, 110 thru 126. o 6000 Series Machines 64 thru 126 12 thru 15, 24, 29, 33, 37, 55, 60, 66, 74 thru 78, 110 thru 126. o 8000 Series Machines 64 thru 126 6, 9, 11 thru 16, 19, 22, 24, 29 thru 34, 36 thru 37, 48, 54 thru 56, 60, 110 thru 126. o When the TCP/IP drivers respond with SYN ACKs, the correct sequence numbers will be sent - for 5000 and 6000 platforms only. (SCR 6802) o Year 2000 and beyond date problems. RTU Version 6.0V43 Release Notes Page 8 3. Prerequisites This kit is only required for 5400, 5600, and 6000 platform machines running 6.0/6.0A versions of the RTU operating system. If you are installing RTU Version 6.0V43 on a running system you will need approximately 11000 disk blocks on your system ("/") partition before you begin installing RTU Version 6.0V43 on top of your current installation. RTU Version 6.0V43 Release Notes Page 9 4. Installation Procedure ** Read these release notes in their entirety before installing RTU 6.0V43.** WARNING If you plan to upgrade to RT-8000 6.0B after installing this release, you must also load the equivalent RT-8000 6.0BV variant. There have been new kernel modules added to RT-8000 6.0V since the release of 6.0B. If RT-8000 6.0B is installed on top of this variant, the build of the the kernel may fail since outdated versions of these modules will have been loaded. Contact Customer Service to obtain the latest RT-8000 6.0BV variant before you begin installation of RT-8000 6.0B. To install the RTU 6.0V43 software, perform the following steps: 1. Login as root. 2. Due to a change in the install script you must make sure that the /update directory is completely empty. Remove all files and directories that exist in this directory. 3. Reboot to single-user mode using /etc/shutdown or: # /etc/reboot -s 4. Make sure you are in the at&t universe: # universe att 5. Make sure your current directory is root: # cd / 6. Place the RTU 6.0V43 tape into the drive and read it: # cpio -ivmCdu < /dev/rctp 7. Run the 6.0V43 software installation script using the command: # /install/i_rtu_6.0V RTU Version 6.0V43 Release Notes Page 10 Original copies of certain files modified by the installation script are saved in the directory /PRE_RTU_6.0V. To save space after the installation, you may remove this directory. RTU Version 6.0V43 Release Notes Page 11 5. Notes o New Configurables (6000 and 8000 platforms only): There are new configurables that you may want to set. These are as follows: i. limit on the amount of receive buffer space concurrently allocated. The name of the configurable is netblimit, and has a default of zero, which disables the checking. This should be used if incoming traffic is consuming all of heap space, and a good value to use is 1000000. ii. limit on the amount of STREAMs data structures allocated. The configurable is strthresh, and has a default of zero, which disables the checking. This is intended to be a firewall to protect against memory-exhaustion deadlocks, and will cause, if the limit is exceeded, most stream-building operations (especially open(2) I_LINK, I_PLINK, and I_PUSH ioctls) to fail with ENOSR, it should be used carefully and allocated generously: at least 500000. iii. limit on the amount of STREAMs data buffers allocated. This configurable is strmaxbuf, and has a default of zero, which disables checking. This is a superset of netblimit, in that it affects all streams data buffers, and so must be larger than netblimit to be effective. This is intended to be a firewall against memory-exhaustion deadlocks; exceeding this limit will cause all data-generating operations (especially write(2), putmsg(2), and putpmsg(2)) to fail with ENOSR, so it must be used carefully, allowing at least twice netblimit, or at least 1000000. iv. err_level sets the default reporting level for network interface drivers. This value can be set for an individual RTU Version 6.0V43 Release Notes Page 12 interface via errlvl(8). The Legal values for this configurable are ERR_WARNING, ERR_SERIOUS, and ERR_FATAL. These values have the following meanings: o ERR_WARNING: informational messages; may be ignored or turned off with impunity. o ERR_SERIOUS: implies loss of data (checksum errors and the like). Upper-level protocols should retransmit. The system manager should consider taking corrective action. o ERR_FATAL: implies that the driver decided that the interface hardware needed to be reset, and is doing so. To change these configurables add the name followed by the appropriate value into your system config file, located at /usr/uts. Then reconfigure your system. For information on how to do this, please refer to the section in your System Administrator's Guide on Configuring RTU. RTU Version 6.0V43 Release Notes Page 13 CONTENTS 1. What's In This Kit............................................ 1 2. Overview of Features.......................................... 1 3. Prerequisites................................................. 9 4. Installation Procedure........................................ 10 5. Notes......................................................... 12 RTU Version 6.0V43 Release Notes Page i