All Patches for PowerMAX 4.1 are:
audit-001 base-011 crosslibs-001 egl-001 nsu-001
base-001 base-012 crosslibs-002 inet-001 nsu-002
base-002 bkrs-001 crosslibs-003 inet-002 oam-001
base-003 cdfs-001 crosslibs-004 inet-003 trace-001
base-004 cluster-001 crypt-001 inet-004 via-001
base-005 cmds-001 crypt-002 is-001 vp-001
base-006 cmds-002 crypt-003 kdb-001 vp-002
base-007 cmds-003 crypt-int-001 man-001 vpci-001
base-008 cnd-001 crypt-int-002 man-002
base-009 cnd-002 dec-001 ncr-001
base-010 cnd-003 dec-002 netcmds-001
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: audit-001
Date Issued: 10/03/97 10:57:21
Software Package: audit pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: moto nh
Related Patches: none
Related SARS: none
Brief Description:
Year 2000 fixes for Auditrpt commands
Problem Description:
1. The auditrptv1, auditrptv4, and auditrptv5 commands:
a. will not accept dates beyond 12/31/99 when using the -h or -s
command line options and giving a date in the form
ddmmhhmmyy.
b. print dates beyond 12/31/99 incorrectly.
Problem Resolution:
1. a. Add code to parse_hour() function to parse dates beyond
12/31/99.
b. Add code to pr_cmn() function to print the year modulo 100.
Object To Be Replaced:
/etc/security/audit/auditrpt/auditrptv1
/etc/security/audit/auditrpt/auditrptv4
/etc/security/audit/auditrpt/auditrptv5
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: audit-001
Date Issued: 10/03/97 10:57:21
Software Package: audit pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: moto nh
Related Patches: none
Related SARS: none
Brief Description:
Year 2000 fixes for Auditrpt commands
Problem Description:
1. The auditrptv1, auditrptv4, and auditrptv5 commands:
a. will not accept dates beyond 12/31/99 when using the -h or -s
command line options and giving a date in the form
ddmmhhmmyy.
b. print dates beyond 12/31/99 incorrectly.
Problem Resolution:
1. a. Add code to parse_hour() function to parse dates beyond
12/31/99.
b. Add code to pr_cmn() function to print the year modulo 100.
Object To Be Replaced:
/etc/security/audit/auditrpt/auditrptv1
/etc/security/audit/auditrpt/auditrptv4
/etc/security/audit/auditrpt/auditrptv5
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-001
Date Issued: 03/12/97 12:57:25
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: nh moto
Related Patches: crypt-001 crypt-int-001 crosslibs-001
Related SARS: HM11935 HM11984 HM11995
Brief Description:
Fixes for libthread, libnsl, libsocket, libc, io, svc, proc, and xfs.
Problem Description:
1. Occasionally, binding a socket to a local address fails with
"Protocol error".
The error occurs in a process which has been forked and has
previously created a thread. This process uses two sockets bound to a
local address. One of these processes is forked for each VOD client.
Sometimes, both sockets bind OK, but at other times the first or second
bind fails.
The program is linked against the following libraries:
-lsocket -lnsl -lthread -lgen
2. a. LWPs hang up on their process's p->p_squpdate spin lock.
b. LWPs never wakeup out of a block() call.
3. XFS doesn't work with Ada.
4. POSIX library utilizes rv in a manner which bothers Ada.
5. Fixed Priority processes cause system hang.
6. Forked process hangs in sigaction(). The MediaHawk Video Server forks
a process for each video stream. The first thing the forked process
does is call sigaction() to reset several signals to their
default action (the main process used sigaction to make these
signals execute a handler which printed a message).
Sometimes, one of the forked processes hangs, and this stops the main
server from doing anything else since it waits on a semaphore which
should be sent by the child process.
Problem Resolution:
1. The lwp executing bind receives a SIG_WAITING signal when it happens
to be the last lwp blocking in the kernel. This causes the bind
ioctl to restart in the kernel, which is a problem as bind cannot be
reliably restarted. SIG_WAITING should be masked for the duration of
bind call. Libsocket already contains code to do that.
It failed to work because the multithreading aspects of libnsl
were not enabled. In turn, initialization failed due to the use of a
non-existent variable in our version of libthread.
2. The systrap() routine modified l_flag without
holding the l_mutex. This caused the L_ONSQ l_flag
bit to be cleared improperly. The obvious way to fix
this problem would be to acquire the l_mutex lock
before adding in and removing the L_PRNOSTOP flag in
systrap().
However, this approach would add two lock/unlock sequences
to every system service call. Therefore, a different
approach to fixing this problem was taken. The approach
was to key off of the u.u_made_syscall flag in the u-area
instead of using the L_PRNOSTOP flag in the lwp structure.
The setting and clearing of u.u_made_syscall track the
previous clearing and setting of L_PRNOSTOP closely enough
to be used as a substitute.
Only issig() needed to be changed to check for u_made_syscall
instead of L_PRNOSTOP.
3. Problem was with zerofill of mapped file writes which are the exact
size of the data extent. Ada rounds file sizes to a multiple
of pagesize and therefore many of the extent allocation requests
are exactly the same size as the update.
4. The posix real time extensions in libthread (counting semaphores
and message queues) use reschedule variables. These posix features were
implemented prior to having per-lwp rvs, and therefore these features
were not originally multithreaded. Over time an rv used by an lwp was
required to be defined in a specific place, and the posix features also
did not use this location. Changes were to multithread posix features
and use rvs in the required locations. Additional changes were made
to properly initialize the library in both static and dynamic versions.
5. The immediate cause of the stallout is an infinite loop in the
threads library. The loop is in a `daemon lwp' which the threads
library sets up to support callout services (_thr_servecallout).
The daemon uses _lwp_cond_wait to wait for the next condition.
_lwp_cond_wait is implemented in terms of the syscall block(2).
Block, however, under certain conditions will send the calling
process SIGWAITING, and return immediately with EINTR instead of
blocking. It is then up to the sigwaiting handler in the
threads library (__thr_sigwaitinghndlr) to clean up the
conditions that are causing block(2) to avoid blocking. If it
doesn't, then the daemon will loop forever on the _lwp_cond_wait
service, trying & failing to sleep to the next event.
The reason sigwaiting doesn't clear things up is that, under
certain circumstances, it asks a `housekeeping lwp'
(_thr_housekeeper) to fix things up for it. However, the
housekeeping thread runs at a lower priority. It therefore
never gets a chance to run, with the daemon process spinning
at a priority above it.
The fix consists of asking the sigwaiting handler to disable
itself and asking the housekeeping thread to reenable the
handler once everything is cleared up.
6. Removed all kmem_alloc(..., KM_SLEEP) calls in network buffer
memory allocation path and replaced with KM_NOSLEEP. This
prevents applications from sleeping waiting for memory.
Also replaced some standard spin locks with fast spin
locks in data transfer paths to save CPU.
Objects To Be Replaced:
/etc/conf/pack.d/xfs/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/io/Driver.o
/usr/ccs/lib/libc.a
/usr/ccs/lib/libc.so
/usr/lib/libc.so.1
/usr/lib/libthread.so
/usr/lib/libthread.a
/usr/lib/libnsl_i.so
/usr/lib/libnsl_i.a
/usr/lib/libsocket.so
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-001
Date Issued: 03/12/97 12:57:25
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: nh moto
Related Patches: crypt-001 crypt-int-001 crosslibs-001
Related SARS: HM11935 HM11984 HM11995
Brief Description:
Fixes for libthread, libnsl, libsocket, libc, io, svc, proc, and xfs.
Problem Description:
1. Occasionally, binding a socket to a local address fails with
"Protocol error".
The error occurs in a process which has been forked and has
previously created a thread. This process uses two sockets bound to a
local address. One of these processes is forked for each VOD client.
Sometimes, both sockets bind OK, but at other times the first or second
bind fails.
The program is linked against the following libraries:
-lsocket -lnsl -lthread -lgen
2. a. LWPs hang up on their process's p->p_squpdate spin lock.
b. LWPs never wakeup out of a block() call.
3. XFS doesn't work with Ada.
4. POSIX library utilizes rv in a manner which bothers Ada.
5. Fixed Priority processes cause system hang.
6. Forked process hangs in sigaction(). The MediaHawk Video Server forks
a process for each video stream. The first thing the forked process
does is call sigaction() to reset several signals to their
default action (the main process used sigaction to make these
signals execute a handler which printed a message).
Sometimes, one of the forked processes hangs, and this stops the main
server from doing anything else since it waits on a semaphore which
should be sent by the child process.
Problem Resolution:
1. The lwp executing bind receives a SIG_WAITING signal when it happens
to be the last lwp blocking in the kernel. This causes the bind
ioctl to restart in the kernel, which is a problem as bind cannot be
reliably restarted. SIG_WAITING should be masked for the duration of
bind call. Libsocket already contains code to do that.
It failed to work because the multithreading aspects of libnsl
were not enabled. In turn, initialization failed due to the use of a
non-existent variable in our version of libthread.
2. The systrap() routine modified l_flag without
holding the l_mutex. This caused the L_ONSQ l_flag
bit to be cleared improperly. The obvious way to fix
this problem would be to acquire the l_mutex lock
before adding in and removing the L_PRNOSTOP flag in
systrap().
However, this approach would add two lock/unlock sequences
to every system service call. Therefore, a different
approach to fixing this problem was taken. The approach
was to key off of the u.u_made_syscall flag in the u-area
instead of using the L_PRNOSTOP flag in the lwp structure.
The setting and clearing of u.u_made_syscall track the
previous clearing and setting of L_PRNOSTOP closely enough
to be used as a substitute.
Only issig() needed to be changed to check for u_made_syscall
instead of L_PRNOSTOP.
3. Problem was with zerofill of mapped file writes which are the exact
size of the data extent. Ada rounds file sizes to a multiple
of pagesize and therefore many of the extent allocation requests
are exactly the same size as the update.
4. The posix real time extensions in libthread (counting semaphores
and message queues) use reschedule variables. These posix features were
implemented prior to having per-lwp rvs, and therefore these features
were not originally multithreaded. Over time an rv used by an lwp was
required to be defined in a specific place, and the posix features also
did not use this location. Changes were to multithread posix features
and use rvs in the required locations. Additional changes were made
to properly initialize the library in both static and dynamic versions.
5. The immediate cause of the stallout is an infinite loop in the
threads library. The loop is in a `daemon lwp' which the threads
library sets up to support callout services (_thr_servecallout).
The daemon uses _lwp_cond_wait to wait for the next condition.
_lwp_cond_wait is implemented in terms of the syscall block(2).
Block, however, under certain conditions will send the calling
process SIGWAITING, and return immediately with EINTR instead of
blocking. It is then up to the sigwaiting handler in the
threads library (__thr_sigwaitinghndlr) to clean up the
conditions that are causing block(2) to avoid blocking. If it
doesn't, then the daemon will loop forever on the _lwp_cond_wait
service, trying & failing to sleep to the next event.
The reason sigwaiting doesn't clear things up is that, under
certain circumstances, it asks a `housekeeping lwp'
(_thr_housekeeper) to fix things up for it. However, the
housekeeping thread runs at a lower priority. It therefore
never gets a chance to run, with the daemon process spinning
at a priority above it.
The fix consists of asking the sigwaiting handler to disable
itself and asking the housekeeping thread to reenable the
handler once everything is cleared up.
6. Removed all kmem_alloc(..., KM_SLEEP) calls in network buffer
memory allocation path and replaced with KM_NOSLEEP. This
prevents applications from sleeping waiting for memory.
Also replaced some standard spin locks with fast spin
locks in data transfer paths to save CPU.
Objects To Be Replaced:
/etc/conf/pack.d/xfs/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/io/Driver.o
/usr/ccs/lib/libc.a
/usr/ccs/lib/libc.so
/usr/lib/libc.so.1
/usr/lib/libthread.so
/usr/lib/libthread.a
/usr/lib/libnsl_i.so
/usr/lib/libnsl_i.a
/usr/lib/libsocket.so
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-002
Date Issued: 04/11/97 14:11:18
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: moto
Related Patches: crosslibs-002 crypt-002 crypt-int-002
cdfs-001 ncr-001 via-001 cmds-001
Related SARS: HM11984 HM11995
Brief Description:
Fixes for various problems described below.
Problem Description:
1. Missing support for PMC->PCI bridge used in the MediaHawk
systems.
2. Need enhancement for VOD which allows the ncr disk transfer
size to be tunable.
3. When more than one rescheduling variable (RV) was located in the
same page of a multi-LWP process and one of the RVs was removed,
then the page would no longer be memory locked; even though there
were still active RVs in that same page. On a busy system, if this
page was swapped out, then a kernel page fault panic would occur
when the kernel attempted to reference one of the other still active
RVs in that page.
Additionally, if an application used memcntl(2) to memory lock a
page and that page also had an RV located within it, then when
the RV was removed the page would be unlocked; even though the
memcntl(2) page lock should have still been in effect. The reverse
situation was also a problem: when memcntl(2) was used to unlock
the page, then the page would be unlocked and the active RV would
no longer be located in a locked page.
4. lockd(1M) would not work when NIS was enabled.
5. system panics in putnext() with an invalid lock address.
6. Time-slice expiration in TS class lwps would not relinquish the
processor if the lwp was dropped in priority and at least one
other lwp was runnable at the new priority.
7. ADA/ARMS test 42 was failing on Night Hawk architectures which have
shared interrupt vectors. This ADA test was calling mpadvise(3C)
with the command MPA_CPU_INTVEC. mpadvise(3C) calls syscx(2)
with the INT_VECTOR command. mpadvise(3C) expects back from syscx(2)
an integer defining the CPU that handles the interrupt. On
architectures with shared interrupts syscx(2) was returning a mask of
the logical CPUs handling the interrupt. mpadvise(3C) did not
correctly handle this mask and passed a bad representation of the CPU
back to the ADA test.
The intstat(1M) command also calls syscx(2) with the INT_VECTOR
command and does expect back a mask of CPUs which handle a specific
vector.
8. xfs may panic with kernel address fault in findset().
9. Round-Robin selection of CPUs was not working on NH6800. Additionally,
assigning interrupts to CPUs 4-7 on an NH6408 would not work.
10. When running xactive (a customer application) the kernel panics
almost immediately with the following message.
TS scheduling class deferred a parameter change
What is causing the panics is that a priocntl(2) is changing classes.
This sets a deferred change flag. An lwp gets created which sees
the deferred change flag and sets its parameters before running.
However, the parameters it is supposed to change to are wrong.
Instead of matching the parent's deferred parameters they are zeros.
The parmsprop() routine is called in an lwp-create/fork when there are
pending parameter changes in the parent. When it calls
CL_CHANGEPARMS the parms field pointer points to a new block set to
zeros.
11. When a short timeout was specified on a block(2) call, sometimes
the timeout would occur before the LWP could enter a blocked state.
In this case, the timeout would be missed, and the LWP would fail
to return back out of the kernel. The block(2) system service with
a timeout value is used by cond_timedwait(3synch),
pthread_cond_timedwait(3pthread) and _lwp_cond_timedwait(2).
12. spl_request() and spl_manage() were not correctly setting the
system IPL values on PowerHawk (moto) systems. This caused
problems if an interrupt came which had to raise the IPL
temporarily.
13. Support lacking for disks or RAID partitions larger than 16 GB.
14. The scsi_iq_data and scsi_disk_drives arrays needed to be updated to
contain the CD-ROM drives used in testing CD-ROM file system mount
support.
15. #define's needed to be created for indices into the scsi_disk_drives
array because of #2 above.
Problem Resolution:
1. Expanded support for shared interrupts on the PowerHawk (moto)
systems to 8 devices per interrupt. This is necessary to
support the PMC->PCI expansion bucket, which requires that
all of the devices interrupt on the same (the PMC) level.
Added 'eieio' instructions in the macros used to write to PCI
space. These are necessary to ensure commands get out in
the proper sequence.
Added code to reset the secondary PCI bus on PMC-->PCI bridge
connections.
2. Change xfs to find maximum transfer size from the disk driver
and use this value instead of a fixed MAXBIOSIZE value.
Change ncr driver to support the SYM875 Ultra SCSI chip, change
to fix some problems with invalid DSTAT interrupts under heavy load,
change ncr driver to support shared interrupt vector and use
pci latency timer value giving 8 word bursts on the pci bus,
change ncr to add extra tests for successful memory allocation
after kmem_alloc() and iomem_alloc() calls with nosleep option. Change
ncr driver to support a configurable maximum transfer size of 128 KB
(default same as MAXBIOSIZE), 256 KB or 512 KB.
3. The fix is to add a nesting page memory lock for RVs, which is used
internally only by the kernel. A nesting page lock allows for more
than one lock operation to be placed on a page; the same number of
unlock operations must be issued before the page will be unlocked.
The seg_vn and seg_dz kernel segment drivers now support both a
non-nesting and nesting page memory lock. Both locking mechanisms
operate independently. That is, both a nested and non-nested page
memory lock can be in effect on the same page at the same time.
Both types of locks placed on a page must be removed before the
page will no longer be memory locked.
Crash was also modified to use the new format of the vpage_info
structure, which now contains the nesting and non-nesting page lock
information. The vpage_info structure is referenced by crash on
the "seg -f" command.
4. The getnetconfig(3N) routines would get confused by the modifications
that NIS does to the /etc/netconfig file. This would result
in getnetconfig(3N) returning an error and hence applications like
lockd(1M) would not be started on all of the transports. In the
case of lockd(1M), it would only listen on the tcp transport when it
really needs to also be running with udp and loopback transports.
5. Protect the queue by using q_putcnt field. This prevents it
from being freed until after its usage in putnext().
6. Force a preemption if an lwp expires its time slice and drops
to a priority that already contains at least one other lwp.
7. Modified syscx(2) so that, for all architectures, when it is
called with the INT_VECTOR command it returns an integer defining
the CPU which handles the interrupt. Enhanced syscx(2) to support
a new command, INT_VECTOR_MASK, which returns a mask of CPUs which
handle the shared vector. Modified the intstat(1M) utility
to pass this new command to syscx(2). This new syscx(2) command
is not documented in the man pages and is only used by intstat(1M).
8. Changed the bitmap search end condition to prevent search beyond the
end of the bitmap.
9. There were two arrays in the bsp6800 module adjacent to each other:
int cur_pb_cpu[4];
int next_pb_cpu[16];
The size of the cur_pb_cpu array is 4, but there is support
for up to 8 cpu boards. Therefore, when assigning cur_pb_cpu[4],
next_pb_cpu[0] would be overwritten, and so on. The next_pb_cpu[]
array is used for round robin selection, and hence; it didn't work
correctly for the lower 4 cpus. The size of the cur_pb_cpu array
was extended to 8.
The problems with the lack of nh6408 support for assigning interrupts
on CPUs 4-7 were just a matter of extending a switch statement to
accept those CPU IDs.
10. The fix is to copy the parents parms data into the new block.
11. The kernel block(2) system service and associated timeout routine
were modified to handle timeouts that occur before the process has
entered a blocked state. Changes were also made to properly handle
timeouts that may occur at relatively the same time that a wakeup
from another thread/LWP (via unblock(2)) occurs.
12. When storing the system IPL value, spl_request()/spl_manage()
were not multiplying the value by 4 as is required when converting
between user-ipl-values and system-ipl-values. Additionally, when
retrieving the system IPL value, spl_request()/spl_manage() were
not dividing the value by 4 as is required for the same reasons.
The issues were corrected.
13. Provided support for disks or RAID partitions larger than 16 GB.
The maximum supported size is 512 GB. In order to implement this
feature, the location of the geometry block will be redefined for
disks or RAID partitions which exceed 8 GB. (The geometry block is a
Concurrent Computer designed disk sector located near the end of the
disk which contains the partition information for the particular
media). There will be no effect on physical drives or RAID
partitions which are less than 8 GB.
If you are already using a physical disk or RAID partition which is
larger than 8 GB you may find that the disk cannot be read after
installation of this patch. The indication will be messages indicating
the inability to locate the Geometry Block or incorrect checksum on
the Geometry Block when attempts are made to mount or fsck partitions
on this disk. Should you have these problems, there are two
alternatives:
a) You may set the tunable OLD_LARGE_DISKS to a value of 1
using the config(1M) utility. Note that if you do this, the
effect of this patch is disabled and you will be unable to
utilize physical disks or RAID partitions larger than 16 GB
at any time.
b) Reformat the disk as follows:
1) Reconfigure the kernel setting the OLD_LARGE_DISKS
tunable to 1 using config(1M) as described above. Reboot
the new kernel.
2) Generate a complete backup of all useful data on the
affected drive.
3) Reconfigure the kernel by resetting OLD_LARGE_DISKS
back to 0. Reboot the new kernel.
4) Reformat the affected drive using format(1M).
Partitions should be made similar in size to the old
values to ensure that the saved data will fit back on
the disk.
5) Restore the data saved in step 2.
14. Added Plextor PX-8XCS CD-ROM, NEC CDR-1410A CD-ROM, and
Toshiba XM-3801B CD-ROM to the arrays.
15. Created #define's for SCSI_PLEXTOR_PX8XCS, SCSI_NEC_CDR1410A, and
SCSI_TOSHIBA_XM3801B.
Object To Be Replaced:
/etc/conf/pack.d/gd/Driver.o
/etc/conf/pack.d/gd/space.c
/etc/conf/pack.d/io/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/pci/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/scsi/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/ts/Driver.o
/etc/conf/pack.d/xfs/Driver.o
/etc/conf/mtune.d/gd
/usr/lib/libnsl_i.a
/usr/lib/libnsl_i.so
/usr/lib/libnsl.a
/usr/lib/libnsl.so
/usr/lib/libxti.a
/usr/lib/libxti.so
/usr/lib/libsocket.a
/usr/lib/libud.so
/usr/lib/libud.a
/usr/bin/intstat
/usr/include/sys/scsi_data.h
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-003
Date Issued: 04/11/97 15:01:01
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: nh
Related Patches: crosslibs-002 crypt-002 cypt-int-002 is-001
cdfs-001 ncr-001 via-001 cmds-001
Related SARS: HM11984 HM11995
Brief Description:
Fixes for various problems described below.
Problem Description:
1. Missing support for PMC->PCI bridge used in the MediaHawk
systems.
2. Need enhancement for VOD which allows the ncr disk transfer
size to be tunable.
3. When more than one rescheduling variable (RV) was located in the
same page of a multi-LWP process and one of the RVs was removed,
then the page would no longer be memory locked; even though there
were still active RVs in that same page. On a busy system, if this
page was swapped out, then a kernel page fault panic would occur
when the kernel attempted to reference one of the other still active
RVs in that page.
Additionally, if an application used memcntl(2) to memory lock a
page and that page also had an RV located within it, then when
the RV was removed the page would be unlocked; even though the
memcntl(2) page lock should have still been in effect. The reverse
situation was also a problem: when memcntl(2) was used to unlock
the page, then the page would be unlocked and the active RV would
no longer be located in a locked page.
4. lockd(1M) would not work when NIS was enabled.
5. system panics in putnext() with an invalid lock address.
6. Time-slice expiration in TS class lwps would not relinquish the
processor if the lwp was dropped in priority and at least one
other lwp was runnable at the new priority.
7. ADA/ARMS test 42 was failing on Night Hawk architectures which have
shared interrupt vectors. This ADA test was calling mpadvise(3C)
with the command MPA_CPU_INTVEC. mpadvise(3C) calls syscx(2)
with the INT_VECTOR command. mpadvise(3C) expects back from syscx(2)
an integer defining the CPU that handles the interrupt. On
architectures with shared interrupts syscx(2) was returning a mask of
the logical CPUs handling the interrupt. mpadvise(3C) did not
correctly handle this mask and passed a bad representation of the CPU
back to the ADA test.
The intstat(1M) command also calls syscx(2) with the INT_VECTOR
command and does expect back a mask of CPUs which handle a specific
vector.
8. xfs may panic with kernel address fault in findset().
9. Round-Robin selection of CPUs was not working on NH6800. Additionally,
assigning interrupts to CPUs 4-7 on an NH6408 would not work.
10. When running xactive (a customer application) the kernel panics
almost immediately with the following message.
TS scheduling class deferred a parameter change
What is causing the panics is that a priocntl(2) is changing classes.
This sets a deferred change flag. An lwp gets created which sees
the deferred change flag and sets its parameters before running.
However, the parameters it is supposed to change to are wrong.
Instead of matching the parent's deferred parameters they are zeros.
The parmsprop() routine is called in an lwp-create/fork when there are
pending parameter changes in the parent. When it calls
CL_CHANGEPARMS the parms field pointer points to a new block set to
zeros.
11. When a short timeout was specified on a block(2) call, sometimes
the timeout would occur before the LWP could enter a blocked state.
In this case, the timeout would be missed, and the LWP would fail
to return back out of the kernel. The block(2) system service with
a timeout value is used by cond_timedwait(3synch),
pthread_cond_timedwait(3pthread) and _lwp_cond_timedwait(2).
12. spl_request() and spl_manage() were not correctly setting the
system IPL values on PowerHawk (moto) systems. This caused
problems if an interrupt came which had to raise the IPL
temporarily.
13. Support lacking for disks or RAID partitions larger than 16 GB.
14. The scsi_iq_data and scsi_disk_drives arrays needed to be updated to
contain the CD-ROM drives used in testing CD-ROM file system mount
support.
15. #define's needed to be created for indices into the scsi_disk_drives
array because of #2 above.
Problem Resolution:
1. Expanded support for shared interrupts on the PowerHawk (moto)
systems to 8 devices per interrupt. This is necessary to
support the PMC->PCI expansion bucket, which requires that
all of the devices interrupt on the same (the PMC) level.
Added 'eieio' instructions in the macros used to write to PCI
space. These are necessary to ensure commands get out in
the proper sequence.
Added code to reset the secondary PCI bus on PMC-->PCI bridge
connections.
2. Change xfs to find maximum transfer size from the disk driver
and use this value instead of a fixed MAXBIOSIZE value.
Change ncr driver to support the SYM875 Ultra SCSI chip, change
to fix some problems with invalid DSTAT interrupts under heavy load,
change ncr driver to support shared interrupt vector and use
pci latency timer value giving 8 word bursts on the pci bus,
change ncr to add extra tests for successful memory allocation
after kmem_alloc() and iomem_alloc() calls with nosleep option. Change
ncr driver to support a configurable maximum transfer size of 128 KB
(default same as MAXBIOSIZE), 256 KB or 512 KB.
3. The fix is to add a nesting page memory lock for RVs, which is used
internally only by the kernel. A nesting page lock allows for more
than one lock operation to be placed on a page; the same number of
unlock operations must be issued before the page will be unlocked.
The seg_vn and seg_dz kernel segment drivers now support both a
non-nesting and nesting page memory lock. Both locking mechanisms
operate independently. That is, both a nested and non-nested page
memory lock can be in effect on the same page at the same time.
Both types of locks placed on a page must be removed before the
page will no longer be memory locked.
Crash was also modified to use the new format of the vpage_info
structure, which now contains the nesting and non-nesting page lock
information. The vpage_info structure is referenced by crash on
the "seg -f" command.
4. The getnetconfig(3N) routines would get confused by the modifications
that NIS does to the /etc/netconfig file. This would result
in getnetconfig(3N) returning an error and hence applications like
lockd(1M) would not be started on all of the transports. In the
case of lockd(1M), it would only listen on the tcp transport when it
really needs to also be running with udp and loopback transports.
5. Protect the queue by using q_putcnt field. This prevents it
from being freed until after its usage in putnext().
6. Force a preemption if an lwp expires its time slice and drops
to a priority that already contains at least one other lwp.
7. Modified syscx(2) so that, for all architectures, when it is
called with the INT_VECTOR command it returns an integer defining
the CPU which handles the interrupt. Enhanced syscx(2) to support
a new command, INT_VECTOR_MASK, which returns a mask of CPUs which
handle the shared vector. Modified the intstat(1M) utility
to pass this new command to syscx(2). This new syscx(2) command
is not documented in the man pages and is only used by intstat(1M).
8. Changed the bitmap search end condition to prevent search beyond the
end of the bitmap.
9. There were two arrays in the bsp6800 module adjacent to each other:
int cur_pb_cpu[4]; /* cpu board array - current eng */
int next_pb_cpu[16]; /* cpu array - next eng to use */
The size of the cur_pb_cpu array is 4, but there is support
for up to 8 cpu boards. Therefore, when assigning cur_pb_cpu[4],
next_pb_cpu[0] would be overwritten, and so on. The next_pb_cpu[]
array is used for round robin selection, and hence; it didn't work
correctly for the lower 4 cpus. The size of the cur_pb_cpu array
was extended to 8.
The problems with the lack of nh6408 support for assigning interrupts
on CPUs 4-7 were just a matter of extending a switch statement to
accept those CPU IDs.
10. The fix is to copy the parents parms data into the new block.
11. The kernel block(2) system service and associated timeout routine
were modified to handle timeouts that occur before the process has
entered a blocked state. Changes were also made to properly handle
timeouts that may occur at relatively the same time that a wakeup
from another thread/LWP (via unblock(2)) occurs.
12. When storing the system IPL value, spl_request()/spl_manage()
were not multiplying the value by 4 as is required when converting
between user-ipl-values and system-ipl-values. Additionally, when
retrieving the system IPL value, spl_request()/spl_manage() were
not dividing the value by 4 as is required for the same reasons.
The issues were corrected.
13. Provided support for disks or RAID partitions larger than 16 GB.
The maximum supported size is 512 GB. In order to implement this
feature, the location of the geometry block will be redefined for
disks or RAID partitions which exceed 8 GB. (The geometry block is a
Concurrent Computer designed disk sector located near the end of the
disk which contains the partition information for the particular
media). There will be no effect on physical drives or RAID
partitions which are less than 8 GB.
If you are already using a physical disk or RAID partition which is
larger than 8 GB you may find that the disk cannot be read after
installation of this patch. The indication will be messages indicating
the inability to locate the Geometry Block or incorrect checksum on
the Geometry Block when attempts are made to mount or fsck partitions
on this disk. Should you have these problems, there are two
alternatives:
a) You may set the tunable OLD_LARGE_DISKS to a value of 1
using the config(1M) utility. Note that if you do this, the
effect of this patch is disabled and you will be unable to
utilize physical disks or RAID partitions larger than 16 GB
at any time.
b) Reformat the disk as follows:
1) Reconfigure the kernel setting the OLD_LARGE_DISKS
tunable to 1 using config(1M) as described above. Reboot
the new kernel.
2) Generate a complete backup of all useful data on the
affected drive.
3) Reconfigure the kernel by resetting OLD_LARGE_DISKS
back to 0. Reboot the new kernel.
4) Reformat the affected drive using format(1M).
Partitions should be made similar in size to the old
values to ensure that the saved data will fit back on
the disk.
5) Restore the data saved in step 2.
14. Added Plextor PX-8XCS CD-ROM, NEC CDR-1410A CD-ROM, and
Toshiba XM-3801B CD-ROM to the arrays.
15. Created #define's for SCSI_PLEXTOR_PX8XCS, SCSI_NEC_CDR1410A, and
SCSI_TOSHIBA_XM3801B.
Object To Be Replaced:
/etc/conf/pack.d/bsp6400/Driver.o
/etc/conf/pack.d/bsp6408/Driver.o
/etc/conf/pack.d/bsp6800/Driver.o
/etc/conf/pack.d/bsp6800p/Driver.o
/etc/conf/pack.d/bsp6800t/Driver.o
/etc/conf/pack.d/bspall/Driver.o
/etc/conf/pack.d/gd/Driver.o
/etc/conf/pack.d/gd/space.c
/etc/conf/pack.d/io/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/pci/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/scsi/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/ts/Driver.o
/etc/conf/pack.d/xfs/Driver.o
/usr/lib/libnsl_i.a
/usr/lib/libnsl_i.so
/usr/lib/libnsl.a
/usr/lib/libnsl.so
/usr/lib/libxti.a
/usr/lib/libxti.so
/usr/lib/libsocket.a
/usr/lib/libud.so
/usr/lib/libud.a
/usr/bin/intstat
/usr/include/sys/scsi_data.h
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-004
Date Issued: 05/14/97 10:38:05
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: moto
Related Patches: cluster-001, cmds-002, crosslibs-003, crypt-003,
dec-001, inet-001, kdb-001, man-001, nsu-001, vp-001
Related SARS: HM12049, HM11989, HM12056
Brief Description:
Many fixes and enhancements.
Problem Description:
1. If two or more devices share an interrupt level on a Power Stack or
Power Hawk system, it is possible for the system to get a Kernel
Stack Overflow panic.
2. Need ADAPTER_GA definition to support the GA5000.
3. Shared memory locking (using the SHM_LOCK cmd to shmctl(2)) does not
work correctly for shared memory segments created in local memory.
Actually, the region would be locked down in global memory
(HM12056).
4. ls -l is very slow when listing users or group in the NIS database.
5. Some of the memory allocated during NBUFF_ALLOC calls is not freed
when a stream is closed or NBUFF_FREE is called. This affects fixed
translation network buffers only. 64 bytes of kernel heap is lost
for each page in the network buffer.
6. Using NightView to debug a user-level interrupt process would panic
the kernel.
7. Need support for 100BaseT Ethernet.
8. Need support for configuring atm networking cards on a diskless
target for the loosely-coupled system architecture (cluster pkg).
9. Serial port was not being initialized when using VGA tube instead of
terminal.
10. Xcell server would hang.
11. Poll generation number was not under a lock.
12. Virtual partitions (vp) fail on file systems larger than 2Gb.
Read/write access to large partitions may fail.
13. On MVME1604-011 systems (No SVGA), depending on how the system was
started, the kernel may experience a large (sometimes indefinite)
delay during system initialization.
14. fsrestore was not working with filesystems which were backed up from
CX/UX.
15. Locking problems in specfs.
16. Original problem was a 6202 where the system hung, i.e. no useful
activity was being done. This could actually occur on any 6200/6800
with multiple cpus (HM11989).
17. Power I/O tests failed for gt driver (HM12049).
18. /usr/include/vm/vpage.h was changed in patch 2 but not updated.
19. XFS filesystems accessed through NFS on VME transport link could
fail.
20. Debug kernel panicked on PowerMAXION with ASSERT failure.
21. Processes could hang doing lookuppn() on XFS filesystems.
Problem Resolution:
1. Code which dispatched shared interrupts would incorrectly lower the
IPL of the machine depending upon the order in which the interrupts
were registered with the system. Remove the code which changes the
IPL of the system when dispatching shared interrupts. The low level
interrupt handler has already established the proper IPL.
2. Added ADAPTER_GA to <sys/adapter_vme.h> for GA5000 port.
3. The problem was that the routine that does shared memory locking was
ignoring the NUMA policies of the region. Fixed this routine so that
it did the appropriate steps based on the NUMA policy.
4. The ls code used a very inefficient algorithm for converting user
ids to user names. It would loop doing "NIS get next passwd entry"
until it found the matching uid. Replaced getpwent loop with
getpwuid and added caching similar to method used in CX/UX.
5. Added an additional kmem_free() to str_free_fixed_netseg().
6. Problem was in hat_icachesync routine. This routine uses segment
register 12. The interrupt priority level was not high enough. A
process at a higher level would interrupt causing a panic by using
the wrong value in the segment register. Fixed code in
hat_icachesync to disable interrupts while using the segment
register.
7. This patch provides enhancements to the 'dec' Ethernet driver
package to support 100BaseT versions of the DEC DC21x4x Ethernet
chip. Information on supported controllers is available from
Concurrent support. In order to provide 100BaseT support on the
Night Hawk VME systems, this patch also provides drivers for the
Interphase 6200 VME to PMC bridge product. This device allows access
to PMC-based PCI cards on a VME-only system. The Concurrent 100BaseT
Ethernet PMC card is supported on this bridge and is used to provide
the 100BaseT support on these systems. Also included are online
manual pages for the 'dec' Ethernet product dec(7), and the VME to
PMC bridge.
8. Added enhancements under /etc/confnet.d and to /etc/init.d/inetinit
and /usr/sbin/netinfo. Added -D option to idmknod. Fixed cpio code
in memfs driver to preserve date and time stamp of original file.
This code is used to populate a diskless target's root file system.
9. The problem was the kernel relied on PPCBug initializing the serial
port. When a VGA tube/keyboard is attached PPCBug assumed you want
to talk to the VGA and did not initialize the serial port. Fixed
driver to initialize the serial port used for displaying messages
when the system comes up. Added initialization for low-memory
variables usually initialized by "console".
10. Problem was caused by libsocket not handling priority messages
correctly when getting the name of a socket. Fixed code to handle
priority messages.
11. A race between pollwakeup() and polladd() could result in a wrong
number being read leading to a missed poll wakeup. Put locks around
poll generation number.
12. vp using byte offsets to access disk partitions. Overflow caused by
converting partitions size (in sectors) to bytes for offset checks.
Use block(sector) addressing for access to disk. Set clean 2Gb size
limit for large partitions.
13. Keyboard controller is actually present (part of NS87303 Super I/O
chip) but not physically connected externally. For some unexplained
reason, attempts to probe the keyboard controller can result in this
erratic delay. Don't probe the keyboard controller or aux port on
-011 systems.
14. The block size is different on CX/UX, this caused problems whenever
you had a directory that was larger then 512 bytes, because PowerMAX
assumed that the boundary was at the 512 marker and CX used 1024.
Added a -o option for support of "old" cx/ux filesystems. This will
set the block size (for that session) to 1024.
15. There was one piece of the specfs code where the spec-table mutex
wasn't acquired until after we had referenced the spec-table. Moved
the code which acquired the spec-table mutex to before we reference
the spec-table.
16. The kernel contains per-cpu counters used to disable process
preemption for short periods of time. There is a window where a
process could get preempted and restarted on a different cpu while
the counters are being changed. The end result could be that the
counters are changed for the wrong cpu, which would tend to disable
process preemption on -both- the original and new cpus. Solution is
to move the preemption disable counter from per-cpu region to the
process lwp structure. In this location, the counter would remain
consistent if a process migration occurs while it is being modified.
17. The gt driver was modified to change the behavior of bsf command.
This change was non-standard so it broke the gt driver. Backed out
modifications.
18. Replacing /usr/include/vm/vpage.h with correct version.
19. Window between releasing the identity of a cached removed xnode and
destroying the identity of the disk copy. Hold the cached removed
xnode until the disk copy is removed.
20. XFS may return some pages write locked on a read call to
VOP_GETPAGE. Return all read access pages with only page read lock
set.
21. XFS may attach a page to an xnode but not return the page to the
caller of VOP_GETPAGE. Discard all readahead pages not returned to
the caller.
Object To Be Replaced:
/etc/conf/bin/idmknod
/etc/conf/cf.d/cswtch.s
/etc/conf/cf.d/intr.s
/etc/conf/pack.d/clone/Driver.o
/etc/conf/pack.d/cons/Driver.o
/etc/conf/pack.d/fs/Driver.o
/etc/conf/pack.d/gt/Driver.o
/etc/conf/pack.d/io/Driver.o
/etc/conf/pack.d/ipc/Driver.o
/etc/conf/pack.d/isa/Driver.o
/etc/conf/pack.d/kernel/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/memfs/Driver.o
/etc/conf/pack.d/mod/Driver.o
/etc/conf/pack.d/pci/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/processorfs/Driver.o
/etc/conf/pack.d/procfs/Driver.o
/etc/conf/pack.d/specfs/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/uni/Driver.o
/etc/conf/pack.d/util/Driver.o
/etc/conf/pack.d/vme/Driver.o
/etc/conf/pack.d/vp/stubs.c
/etc/conf/pack.d/xfs/Driver.o
/etc/confnet.d/configure
/sbin/ls.st
/usr/bin/ls
/usr/include/sys/adapter_vme.h
/usr/include/sys/assym_dbg.h
/usr/include/sys/assym_nodbg.h
/usr/include/sys/pci.h
/usr/include/sys/plocal.h
/usr/include/sys/syscx.h
/usr/include/sys/user.h
/usr/include/vm/vpage.h
/usr/lib/fs/ufs/fsrestore
/usr/lib/libnsl_i.a
/usr/lib/libsocket.so
/usr/lib/lp/bin/hptcp
/usr/lib/lp/model/hp.ps.net
/usr/sbin/netinfo
Special Conditions for Installation:
This must be installed before crypt-003.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-005
Date Issued: 05/14/97 10:45:33
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: nh
Related Patches: cmds-002, crypt-003, dec-001, inet-001, kdb-001,
man-001, nsu-001, vp-001
Related SARS: HM12049, HM11989, HM12056
Brief Description:
Many fixes and enhancements.
Problem Description:
1. If two or more devices share an interrupt level on a Power Stack or
Power Hawk system, it is possible for the system to get a Kernel
Stack Overflow panic.
2. Need ADAPTER_GA definition to support the GA5000.
3. Shared memory locking (using the SHM_LOCK cmd to shmctl(2)) does not
work correctly for shared memory segments created in local memory.
Actually, the region would be locked down in global memory
(HM12056).
4. ls -l is very slow when listing users or group in the NIS database.
5. Some of the memory allocated during NBUFF_ALLOC calls is not freed
when a stream is closed or NBUFF_FREE is called. This affects fixed
translation network buffers only. 64 bytes of kernel heap is lost
for each page in the network buffer.
6. Using NightView to debug a user-level interrupt process would panic
the kernel.
7. Need support for 100BaseT Ethernet.
8. Need support for configuring atm networking cards on a diskless
target for the loosely-coupled system architecture (cluster pkg).
9. Serial port was not being initialized when using VGA tube instead of
terminal.
10. Xcell server would hang.
11. Poll generation number was not under a lock.
12. Virtual partitions (vp) fail on file systems larger than 2Gb.
Read/write access to large partitions may fail.
13. On MVME1604-011 systems (No SVGA), depending on how the system was
started, the kernel may experience a large (sometimes indefinite)
delay during system initialization.
14. fsrestore was not working with filesystems which were backed up from
CX/UX.
15. Locking problems in specfs.
16. getbuslvl_nhxxxx fails due to inconsistency in the bus definition.
When mpadvise() is called with the command MPA_CPU_VMELEV the bus
definition is in the 'which' argument. This bus definition is
defined to be MPA_VMELEV_PRIMARY or MPA_VME_SECONDARY. These
constants are a 0 or 1 respectively as defined in
/usr/include/sys/resource.h.
17. Original problem was a 6202 where the system hung, i.e. no useful
activity was being done. This could actually occur on any 6200/6800
with multiple cpus (HM11989).
18. Power I/O tests failed for gt driver (HM12049).
19. /usr/include/vm/vpage.h was changed in patch 2 but not updated.
20. XFS filesystems accessed through NFS on VME transport link could
fail.
21. Debug kernel panicked on PowerMAXION with ASSERT failure.
22. Processes could hang doing lookuppn() on XFS filesystems.
Problem Resolution:
1. Code which dispatched shared interrupts would incorrectly lower the
IPL of the machine depending upon the order in which the interrupts
were registered with the system. Remove the code which changes the
IPL of the system when dispatching shared interrupts. The low level
interrupt handler has already established the proper IPL.
2. Added ADAPTER_GA to <sys/adapter_vme.h> for GA5000 port.
3. The problem was that the routine that does shared memory locking was
ignoring the NUMA policies of the region. Fixed this routine so that
it did the appropriate steps based on the NUMA policy.
4. The ls code used a very inefficient algorithm for converting user
ids to user names. It would loop doing "NIS get next passwd entry"
until it found the matching uid. Replaced getpwent loop with
getpwuid and added caching similar to method used in CX/UX.
5. Added an additional kmem_free() to str_free_fixed_netseg().
6. Problem was in hat_icachesync routine. This routine uses segment
register 12. The interrupt priority level was not high enough. A
process at a higher level would interrupt causing a panic by using
the wrong value in the segment register. Fixed code in
hat_icachesync to disable interrupts while using the segment
register.
7. This patch provides enhancements to the 'dec' Ethernet driver
package to support 100BaseT versions of the DEC DC21x4x Ethernet
chip. Information on supported controllers is available from
Concurrent support. In order to provide 100BaseT support on the
Night Hawk VME systems, this patch also provides drivers for the
Interphase 6200 VME to PMC bridge product. This device allows access
to PMC-based PCI cards on a VME-only system. The Concurrent 100BaseT
Ethernet PMC card is supported on this bridge and is used to provide
the 100BaseT support on these systems. Also included are online
manual pages for the 'dec' Ethernet product dec(7), and the VME to
PMC bridge.
8. Added enhancements under /etc/confnet.d and to /etc/init.d/inetinit
and /usr/sbin/netinfo. Added -D option to idmknod. Fixed cpio code
in memfs driver to preserve date and time stamp of original file.
This code is used to populate a diskless target's root file system.
9. The problem was the kernel relied on PPCBug initializing the serial
port. When a VGA tube/keyboard is attached PPCBug assumed you want
to talk to the VGA and did not initialize the serial port. Fixed
driver to initialize the serial port used for displaying messages
when the system comes up. Added initialization for low-memory
variables usually initialized by "console".
10. Problem was caused by libsocket not handling priority messages
correctly when getting the name of a socket. Fixed code to handle
priority messages.
11. A race between pollwakeup() and polladd() could result in a wrong
number being read leading to a missed poll wakeup. Put locks around
poll generation number.
12. vp using byte offsets to access disk partitions. Overflow caused by
converting partitions size (in sectors) to bytes for offset checks.
Use block(sector) addressing for access to disk. Set clean 2Gb size
limit for large partitions.
13. Keyboard controller is actually present (part of NS87303 Super I/O
chip) but not physically connected externally. For some unexplained
reason, attempts to probe the keyboard controller can result in this
erratic delay. Don't probe the keyboard controller or aux port on
-011 systems.
14. The block size is different on CX/UX, this caused problems whenever
you had a directory that was larger then 512 bytes, because PowerMAX
assumed that the boundary was at the 512 marker and CX used 1024.
Added a -o option for support of "old" cx/ux filesystems. This will
set the block size (for that session) to 1024.
15. There was one piece of the specfs code where the spec-table mutex
wasn't acquired until after we had referenced the spec-table. Moved
the code which acquired the spec-table mutex to before we reference
the spec-table.
16. This bus definition is converted to either VMELEV_PRIMARY or
VMELEV_SECONDARY, which is passed to syscx() which calls
getbuslvl_nhxxxx() (where xxxx is the nh platform i.e. 6400, 6800,
etc). getbuslvl_nhxxxx() expects a bus definition of the type
constructed by MAKE_BUS_ID(type, instance). Depending upon the
platform, getbuslvl_nhxxxx() fails with a EINVAL or just returns -1.
Redefined VMELEV_PRIMARY and VMELEV_SECONDARY as is required.
VMELEV_PRIMARY is defined as MAKE_BUS_ID(BUS_TYPE_VME,0), and
VMELEV_SECONDARY is defined as MAKE_BUS_ID(BUS_TYPE_VME,1).
17. The kernel contains per-cpu counters used to disable process
preemption for short periods of time. There is a window where a
process could get preempted and restarted on a different cpu while
the counters are being changed. The end result could be that the
counters are changed for the wrong cpu, which would tend to disable
process preemption on -both- the original and new cpus. Solution is
to move the preemption disable counter from per-cpu region to the
process lwp structure. In this location, the counter would remain
consistent if a process migration occurs while it is being modified.
18. The gt driver was modified to change the behavior of bsf command.
This change was non-standard so it broke the gt driver. Backed out
modifications.
19. Replacing /usr/include/vm/vpage.h with correct version.
20. Window between releasing the identity of a cached removed xnode and
destroying the identity of the disk copy. Hold the cached removed
xnode until the disk copy is removed.
21. XFS may return some pages write locked on a read call to
VOP_GETPAGE. Return all read access pages with only page read lock
set.
22. XFS may attach a page to an xnode but not return the page to the
caller of VOP_GETPAGE. Discard all readahead pages not returned to
the caller.
Object To Be Replaced:
/etc/conf/bin/idmknod
/etc/conf/cf.d/cswtch.s
/etc/conf/cf.d/intr.s
/etc/conf/pack.d/clone/Driver.o
/etc/conf/pack.d/fs/Driver.o
/etc/conf/pack.d/gt/Driver.o
/etc/conf/pack.d/io/Driver.o
/etc/conf/pack.d/ipc/Driver.o
/etc/conf/pack.d/kernel/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/memfs/Driver.o
/etc/conf/pack.d/mod/Driver.o
/etc/conf/pack.d/pci/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/processorfs/Driver.o
/etc/conf/pack.d/procfs/Driver.o
/etc/conf/pack.d/specfs/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/uni/Driver.o
/etc/conf/pack.d/util/Driver.o
/etc/conf/pack.d/vme/Driver.o
/etc/conf/pack.d/vp/stubs.c
/etc/conf/pack.d/xfs/Driver.o
/etc/confnet.d/configure
/sbin/ls.st
/usr/bin/ls
/usr/ccs/lib/libc.a
/usr/ccs/lib/libc.so
/usr/include/sys/adapter_vme.h
/usr/include/sys/assym_dbg.h
/usr/include/sys/assym_nodbg.h
/usr/include/sys/pci.h
/usr/include/sys/plocal.h
/usr/include/sys/syscx.h
/usr/include/sys/user.h
/usr/include/vm/vpage.h
/usr/lib/fs/ufs/fsrestore
/usr/lib/libc.so.1
/usr/lib/libnsl_i.a
/usr/lib/libsocket.so
/usr/lib/lp/bin/hptcp
/usr/lib/lp/model/hp.ps.net
/usr/sbin/netinfo
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-006
Date Issued: 06/09/97 13:53:01
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: moto
Related Patches: none
Related SARS: HM12090 HM12082 HM12098
Brief Description:
Fixes for various problems described below.
Problem Description:
1. The _lwp_setcontext service, when fired at an LWP which is in
server_block, is ineffective. The target LWP resumes the
server_block system call and then goes back to sleep.
Note that this doesn't fail within the debugger. When run under a
NightView session, the _lwp_setcontext works as expected.
Note also that once this occurs, the test process becomes unkillable
(cntrl-c) although a 'kill -9' will cause the process to become
"defunct", however the parent process (the ksh in my case) does not
respond.
The problem is that the trapevnudge() call in the _lwp_setcontext(2)
system service call in the kernel fails to wakeup the target
LWP that is blocked in selfblock() via server_block(2). This is due
to the fact that the "set new context" event is not recognized as
the type of event that causes an EINTR sort of return out of a
interruptably blocked sleeper.
2. While debugging a (somewhat) complex Ada test, ints8 from the
ada_arms testbed, the debugger (NightView.p) hangs while reading
the /proc file system for the process being debugged.
Other processes which then attempt to read the /proc directories
for the process being debugged (ints8) hang as well.
The problem is that user page faults were changed in release 4.1 to
now write lock the address space lock, instead of read locking
the address space. (This was done to fix an unrelated problem.)
This change causes a LWP that is stopped in the page fault code
to be holding the address space write locked. However, the /proc
code needs to read lock the address space in order to read from the
process/lwps.
3. Any dynamically linked application that is linked with the thread
library will get rescheduling variables setup for the main thread
during thread library initialization (until another mux thread is
created). All bound threads that are subsequently created also
get a rescheduling variable setup for them.
These RVs are located inside the __thread_desc_t structure and are
used for POSIX semaphores and message queues.
Additionally, any statically linked application that has
a reference to mq_send(), mq_receive(), sem_post() or
sem_wait(), will also have rescheduling variables setup
for them in that same fashion.
If the application's prdata portion of the address space is
bound to local memory, then having a RV setup locks down
one or more local memory pages. This situation prevents any
cross cpu board migration; be it for one LWP/thread or the
entire process.
4. After installing base-004, certain system configurations would not
function correctly. This only appeared to happen on nh6800 systems
containing a condor and global memory.
Problem Resolution:
1. The fix was to allow the EVF_L_NEWCTX event to wakeup LWPs.
Additionally the new context is processed by the LWP before
processing signals and events in evt_process. When a new context
is processed and the LWP is being debugged, then signals are not
deferred.
Additionally, the EVENT_WAIT() in _lwp_setcontext() was changed to
an interruptable EVENT_WAIT_SIG(), and this system service call was
made restartable, and restartable by default in the sysent table.
This allows the waiter in _lwp_setcontext() to be interrupted with
a stop request by a debugger, if the target lwp gets stopped before
modifying its context.
2. The fix involves putting a read lock on the address space back
into the user page fault routine, upageflt_cmn(). The
hat_memload() routine accepts a new hat flag, which is passed
from segvn_faultpage(), which will return an error if a translation
already exists. A new NUMA routine determines whether or not to
use the existing translation's page frame.
3. Instead of setting up RVs for the main thread and for any bound
thread at thread creation time, delay setting up these RVs until
the first call to sem_open(), sem_init(), sem_wait(), sem_post(),
or mq_open() is made. At that point, setup RVs for any thread
currently in the process that should have one (bound threads and
the main thread, if it is the only mux thread). Bound threads
created after this point also receive a RV.
Caveats:
Once any thread/LWP in a process calls one of the above routines
and its prdata is bound to local memory, then any subsequent attempt
to move this process, or any LWP within that process, to another
cpu board will fail.
Any fork() calls after any of the above routines have been called
will result in the child process also inheriting any RVs that were
created in the parent. Therefore, the child process will be created
with the same migration restrictions.
4. This patch backs out the changes to the hat_icachesync() for
re-evaluation.
Object To Be Replaced:
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/io/Driver.o
/usr/include/sys/lwp.h
/usr/include/vm/hat.h
/usr/include/vm/numa.h
/usr/lib/libposix1c.a
/usr/lib/libposix1c.so
/usr/lib/libthread.a
/usr/lib/libthread.so
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-007
Date Issued: 06/06/97 14:21:17
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: nh
Related Patches: none
Related SARS: HM12090 HM12082 HM12098
Brief Description:
Fixes for various problems described below.
Problem Description:
1. The following mpadvise() call fails (on certain platforms) :
mpadvise(MPA_CPU_VMELEV,MPA_VMELEV_PRIMARY, <levl>, <mask>);
2. The _lwp_setcontext service, when fired at an LWP which is in
server_block, is ineffective. The target LWP resumes the
server_block system call and then goes back to sleep.
Note that this doesn't fail within the debugger. When run under a
NightView session, the _lwp_setcontext works as expected.
Note also that once this occurs, the test process becomes unkillable
(cntrl-c) although a 'kill -9' will cause the process to become
"defunct", however the parent process (the ksh in my case) does not
respond.
The problem is that the trapevnudge() call in the _lwp_setcontext(2)
system service call in the kernel fails to wakeup the target
LWP that is blocked in selfblock() via server_block(2). This is due
to the fact that the "set new context" event is not recognized as
the type of event that causes an EINTR sort of return out of a
interruptably blocked sleeper.
3. While debugging a (somewhat) complex Ada test, ints8 from the
ada_arms testbed, the debugger (NightView.p) hangs while reading
the /proc file system for the process being debugged.
Other processes which then attempt to read the /proc directories
for the process being debugged (ints8) hang as well.
The problem is that user page faults were changed in release 4.1 to
now write lock the address space lock, instead of read locking
the address space. (This was done to fix an unrelated problem.)
This change causes a LWP that is stopped in the page fault code
to be holding the address space write locked. However, the /proc
code needs to read lock the address space in order to read from the
process/lwps.
4. Any dynamically linked application that is linked with the thread
library will get rescheduling variables setup for the main thread
during thread library initialization (until another mux thread is
created). All bound threads that are subsequently created also
get a rescheduling variable setup for them.
These RVs are located inside the __thread_desc_t structure and are
used for POSIX semaphores and message queues.
Additionally, any statically linked application that has
a reference to mq_send(), mq_receive(), sem_post() or
sem_wait(), will also have rescheduling variables setup
for them in that same fashion.
If the application's prdata portion of the address space is
bound to local memory, then having a RV setup locks down
one or more local memory pages. This situation prevents any
cross cpu board migration; be it for one LWP/thread or the
entire process.
5. After installing base-005, certain system configurations would not
function correctly. This only appeared to happen on nh6800 systems
containing a condor and global memory.
Problem Resolution:
1. The getcpuint() routines (on the affected platforms) were doing
poor error checking of their return value. They would do the
following:
a. Assign "cpu" to zero intially
b. Do the necessary processing to determine the correct value
of "cpu"
c. Check the value of "cpu" before returning it. If "cpu" was
still zero, then the assumption was that we did not find
what we were looking for.
The problem, of course, is that it is possible that "cpu" equal to
zero can be a valid return code (when we're dealing with cpu zero,
for example). This was corrected by changing the initial assignment
and final check to use a value of negative one instead of zero.
2. The fix was to allow the EVF_L_NEWCTX event to wakeup LWPs.
Additionally the new context is processed by the LWP before
processing signals and events in evt_process. When a new context
is processed and the LWP is being debugged, then signals are not
deferred.
Additionally, the EVENT_WAIT() in _lwp_setcontext() was changed to
an interruptable EVENT_WAIT_SIG(), and this system service call was
made restartable, and restartable by default in the sysent table.
This allows the waiter in _lwp_setcontext() to be interrupted with
a stop request by a debugger, if the target lwp gets stopped before
modifying its context.
3. The fix involves putting a read lock on the address space back
into the user page fault routine, upageflt_cmn(). The
hat_memload() routine accepts a new hat flag, which is passed
from segvn_faultpage(), which will return an error if a translation
already exists. A new NUMA routine determines whether or not to
use the existing translation's page frame.
4. Instead of setting up RVs for the main thread and for any bound
thread at thread creation time, delay setting up these RVs until
the first call to sem_open(), sem_init(), sem_wait(), sem_post(),
or mq_open() is made. At that point, setup RVs for any thread
currently in the process that should have one (bound threads and
the main thread, if it is the only mux thread). Bound threads
created after this point also receive a RV.
Caveats:
Once any thread/LWP in a process calls one of the above routines
and its prdata is bound to local memory, then any subsequent attempt
to move this process, or any LWP within that process, to another
cpu board will fail.
Any fork() calls after any of the above routines have been called
will result in the child process also inheriting any RVs that were
created in the parent. Therefore, the child process will be created
with the same migration restrictions.
5. This patch backs out the changes to the hat_icachesync() for
re-evaluation.
Object To Be Replaced:
/etc/conf/pack.d/bsp6400/Driver.o
/etc/conf/pack.d/bsp6408/Driver.o
/etc/conf/pack.d/bsp6800p/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/io/Driver.o
/usr/include/sys/lwp.h
/usr/include/vm/hat.h
/usr/include/vm/numa.h
/usr/lib/libposix1c.a
/usr/lib/libposix1c.so
/usr/lib/libthread.a
/usr/lib/libthread.so
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-008
Date Issued: 10/03/97 10:14:42
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: moto
Related Patches: none
Related SARS: HM12145
Brief Description:
Corrections for various issues described below.
Problem Description:
1. Original problem was reported that the condor traffic during
boot could cause spurious interrupts on multiprocessor systems.
Subsequent research found that other devices could have similar
interrupt problems on multiprocessor systems.
Actual problem turned out to be overwriting of the interrupt
vector tables by the non-boot processor startup.
2. While a previous patch fixed the problem of being able to issue a
_lwp_setcontext(2) to a target LWP currently blocked in
server_block(2), this fix unknowingly broke the functionality
that a locked rescheduling variable will prevent a LWP from
setting its new context from a _lwp_setcontext(2) call
until it unlocks its rescheduling variable.
3. Problems with spl_manage(3X) and iconnect(3C):
spl_manage(3X) would core dump on NH6800.
spl_manage(3X) would return the wrong previous ipl value on moto.
spl_manage(3X) and spl_request(3X) would not modify the correct
ipl memory location for moto.
On all platforms, the PL_PROBE and PL_XCALL platform independent
ipls were not set to the proper ipl level on spl_manage(3X) calls.
For iconnect(3C) ICON_CONN calls, IC_VERSION3 would not be
accepted as a valid version number.
The thread library version of iconnect(3C) would imporperly return
EINVAL for shared interrupt ic_vector values.
4. Year 2000 issues:
a. The date command does not set the date correctly when using the
mmddhhmmyy format and the desired date is beyond 12/31/99.
b. The lp command incorrectly prints time stamps in the log file if
the stamp is beyond 12/31/99.
c. The passwd command incorrectly prints password aging information
if the date last changed is beyond 12/31/99.
d. The touch command incorrectly sets a file's time stamp when using
the mmddhhmmyy format and the desired date is beyond 12/31/99.
e. The uustat command incorrectly constructs a character string
representation of the current time if the time is beyond
12/31/99.
f. The admin command writes an invalidly formatted delta date if the
date is beyond 12/31/99.
g. The cdc command
i. writes an invalidly formatted change date if the date is
beyond 12/31/99.
ii. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
h. The comb command dies with a "format error at line ..." message
when encountering a correctly or incorrectly formatted delta
date beyond 12/31/99.
i. The delta command
i. writes an invalidly formatted delta date if the date is
beyond 12/31/99.
ii. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
j. The get command
i. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
ii. dies with an "invalid cutoff date" message when given a
cutoff date beyond 12/31/99.
k. The prs command
i. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
ii. dies with an "invalid cutoff date" message when given a
cutoff date beyond 12/31/99.
l. The rmdel command dies with a "format error at line ..." message
when encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
m. The sact command needs to be recompiled due to changes in the
SCCS code.
n. The unget command needs to be recompiled due to changes in the
SCCS code.
o. The getdate() C library function incorrectly converts a date
string into a tm structure when using the %y or the %D masks if
the string represents a date beyond 12/31/99.
p. The strptime() C library function incorrectly converts a date
string into a tm structure when using the %y or the %D masks if
the string represents a date beyond 12/31/99.
q. The uucico command incorrectly constructs a character string
representation of the current time if the time is beyond
12/31/99.
r. The uuxqt command incorrectly constructs a character string
representation of the current time if the time is beyond
12/31/99.
s. The cs connection server incorrectly time stamps a log file
entry if the date is beyond 12/31/99.
t. The errpt command does not reject error log records based upon
their dates if the -e or -s command line options are given a
date beyond 12/31/99.
u. The uptime command (which is really the w command) needs to be
recompiled due to changes in the source code for the w command.
v. The w command incorrectly prints a user's login time if the
time is beyond 12/31/99.
5. XFS may show fragmentation problem with small extent
size filesystem on truncate up of empty file to high value.
XFS keeps contiguous filesystem extents in the defined
filesystem extent size (default 64Kb), writing a file with
large writes may allocate file extents larger than the
filesystem extent size if the contiguous disk space is
available. Increasing the file size to large value with
truncate was preallocating large extent sizes to the file
although the disk space is not allocated until the data
is written. This could cause a problem if the prealloated
extent size was not available.
6. System would occasionally panic at lwp_steal+0x124 with a
kernel-mode address fault.
7. ADAPTER_SLIVER definition was missing from
/usr/include/sys/adapter_vme.h
8. The latest version of LabView, which is heavily multithreaded,
would cause the system to panic with kernel-mode address faults.
9. The hat_icachesync() function was using segment register 12
temporarily to invalidate instruction cache entries for a page
that was being faulted in. It was executing at IPL level PL6.
When an "out-of-context" situation occurs (the incoming page
belongs to a different address space), hat_icachesync()
temporarily:
- saves the current value of segment register 12
- loads segment register 12 with the proper translation
table information
- invalidates the data cache entries for the page
- invalidates the instruction cache entries for the
page
- restores the saved value into segment register 12
It appears that hat_icachesync() was in the middle of
invalidating the instruction cache entries for the page
and had completed invalidating most of the cache lines for
the page (0x6d out of 0x80) when it panic'd trying to
invalidate the entries for a particular page.
Problem Resolution:
1. Correct the location of the cache initialization logic during
startup and prevent modification of the interrupt vector tables
by non-boot processors.
2. The evt_process() routine now checks for a locked rescheduling
variable before giving the LWP its new context.
3. The kernel now accepts IC_VERSION3 as a valid ICON_CONN
version number. The C and/or thread library now converts
the version 3 platform independent ipl value into the
appropriate platform dependent ipl value before calling the
kernel in this case.
The spl_request()/spl_manage() code now reads and writes
the correct ipl location in memory. spl_manage() now returns
the correct value for the previous ipl.
The probe and xcall ipls were corrected in the appropriate
tables for all platforms.
The thread library iconnect(3C) code no longer attempts to
validate the ic_vector value, since the kernel will do all
the proper interrupt vector validation.
4. Fixes for year 2000 issues:
a. Add code to process dates beyond 12/31/99.
b. Change WriteLogMsg() to print the year modulo 100.
c. Change PRT_AGE() macro to print the year modulo 100.
d. Add code to process dates beyond 12/31/99.
e. i. Change gmt() to print the year modulo 100.
ii. Change gmts() to print the year modulo 100.
f. Change date_ba() to print the year modulo 100.
g. i. Change date_ba() to print the year modulo 100.
ii. Change date_ab() to process dates beyond 12/31/99.
h. Change date_ab() to process dates beyond 12/31/99.
i. i. Change date_ba() to print the year modulo 100.
ii. Change date_ab() to process dates beyond 12/31/99.
j. i. Change date_ab() to process dates beyond 12/31/99.
ii. Change date_ab() to process dates beyond 12/31/99.
k. i. Change date_ab() to process dates beyond 12/31/99.
ii. Change date_ab() to process dates beyond 12/31/99.
l. Change date_ab() to process dates beyond 12/31/99.
m. Recompile sact.
n. Recompile unget.
o. Change parse_fmt() to correctly process dates beyond 12/31/99.
p. Change parse() to correctly process dates beyond 12/31/99.
q. Change gmt() to print the year modulo 100.
r. Change gmt() to print the year modulo 100.
s. Print the year modulo 100.
t. Add code to correctly process dates beyond 12/31/99.
u. Recompile uptime.
v. Change prtat() to print the year modulo 100.
5. Change the allocation policy for truncated up files to use
only the filesystem extent size for prealloacted extents.
6. This occurred because of the fact that we do not use locks
while examining lwps on the dispatch queue in lwp_steal().
Rather than locking, which might impact performance, an
'l_selfptr' field was added to the lwp structure. This field
is a pointer to ourself which will allow us to verify with
some degree of certainty that the lwp we are looking at is
still valid.
7. Added the definition of ADAPTER_SLIVER to
/usr/include/sys/adapter_vme.h
8. This occurred because of a race condition between sq_wakeup()
and usync_timedsetrun(). Basically, if the timer expired
on a block, usync_timedsetrun() would be called to put the
lwp back onto the run queue. If the block was going to get
unblocked because the condition it was waiting on is met,
sq_wakeup() would be called, which would then call lwp_wakeup()
to put the lwp back on the run queue. When this happened at
the same time, these routines would add an lwp to a runqueue twice,
which can be dangerous, and was the source of this problem. The
solution to this was to ensure that only one or the other tried to
add the lwp back to the runqueue.
9. This apparently occurred because an interrupt came in at
a higher IPL and switched us out.
Before changing segment register 12, we will now save the
new value inside of 'hatttp->hattt_segregs[12]'. This allows
the context-switching routines to restore our segment register
12 value when we are switched back in.
Object To Be Replaced:
/etc/conf/pack.d/kernel/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/ui/Driver.o
/etc/conf/pack.d/xfs/Driver.o
/usr/lib/libud.a
/usr/lib/libud.so
/usr/lib/libthread.a
/usr/lib/libposix1c.a
/usr/lib/libthread.so
/usr/lib/libposix1c.so
/usr/lib/libc.so.1
/usr/ccs/lib/libc.a
/usr/ccs/lib/libc.so
/usr/ccs/lib/libnc.a
/usr/ccs/lib/libp/libc.a
/usr/bin/date
/usr/bin/lp
/usr/bin/passwd
/usr/bin/touch
/usr/bin/uustat
/usr/ccs/bin/admin
/usr/ccs/bin/cdc
/usr/ccs/bin/comb
/usr/ccs/bin/delta
/usr/ccs/bin/get
/usr/ccs/bin/prs
/usr/ccs/bin/rmdel
/usr/ccs/bin/sact
/usr/ccs/bin/unget
/usr/lib/uucp/uucico
/usr/lib/uucp/uuxqt
/usr/sbin/cs
/usr/sbin/errpt
/usr/ucb/uptime
/usr/ucb/w
/usr/include/sys/adapter_vme.h
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-009
Date Issued: 10/03/97 10:28:47
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: nh
Related Patches: none
Related SARS: HM12145, HM12139
Brief Description:
Corrections for various issues described below.
Problem Description:
1. On fast Night Hawk platforms, such as the 200Mhz systems,
if a very short user-level interrupt routine is used, it
is possible for the command which resets the highest
active level in the interrupt controller to become confused
as the interrupt controller has not finished activating
that level. This may cause a subsequent kernel panic.
2. a. Support was lacking in the kernel for I/O devices connected
to the PMC connector on the PowerMaxion global memory cards.
b. Support was lacking in the kernel for secondary VME on
Power Maxion systems. This is attached to the system via
a PMC controller on the global memory card.
3. Original problem was reported that the condor traffic during
boot could cause spurious interrupts on multiprocessor systems.
Subsequent research found that other devices could have similar
interrupt problems on multiprocessor systems.
Actual problem turned out to be overwriting of the interrupt
vector tables by the non-boot processor startup.
4. While a previous patch fixed the problem of being able to issue a
_lwp_setcontext(2) to a target LWP currently blocked in
server_block(2), this fix unknowingly broke the functionality
that a locked rescheduling variable will prevent a LWP from
setting its new context from a _lwp_setcontext(2) call
until it unlocks its rescheduling variable.
5. Problems with spl_manage(3X) and iconnect(3C):
spl_manage(3X) would core dump on NH6800.
spl_manage(3X) would return the wrong previous ipl value on moto.
spl_manage(3X) and spl_request(3X) would not modify the correct
ipl memory location for moto.
On all platforms, the PL_PROBE and PL_XCALL platform independent
ipls were not set to the proper ipl level on spl_manage(3X) calls.
For iconnect(3C) ICON_CONN calls, IC_VERSION3 would not be
accepted as a valid version number.
The thread library version of iconnect(3C) would improperly
return EINVAL for shared interrupt ic_vector values.
6. Year 2000 issues:
a. The date command does not set the date correctly when using the
mmddhhmmyy format and the desired date is beyond 12/31/99.
b. The lp command incorrectly prints time stamps in the log file if
the stamp is beyond 12/31/99.
c. The passwd command incorrectly prints password aging information
if the date last changed is beyond 12/31/99.
d. The touch command incorrectly sets a file's time stamp when using
the mmddhhmmyy format and the desired date is beyond 12/31/99.
e. The uustat command incorrectly constructs a character string
representation of the current time if the time is beyond
12/31/99.
f. The admin command writes an invalidly formatted delta date if the
date is beyond 12/31/99.
g. The cdc command
i. writes an invalidly formatted change date if the date is
beyond 12/31/99.
ii. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
h. The comb command dies with a "format error at line ..." message
when encountering a correctly or incorrectly formatted delta
date beyond 12/31/99.
i. The delta command
i. writes an invalidly formatted delta date if the date is
beyond 12/31/99.
ii. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
j. The get command
i. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
ii. dies with an "invalid cutoff date" message when given a
cutoff date beyond 12/31/99.
k. The prs command
i. dies with a "format error at line ..." message when
encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
ii. dies with an "invalid cutoff date" message when given a
cutoff date beyond 12/31/99.
l. The rmdel command dies with a "format error at line ..." message
when encountering a correctly or incorrectly formatted delta date
beyond 12/31/99.
m. The sact command needs to be recompiled due to changes in the
SCCS code.
n. The unget command needs to be recompiled due to changes in the
SCCS code.
o. The getdate() C library function incorrectly converts a date
string into a tm structure when using the %y or the %D masks if
the string represents a date beyond 12/31/99.
p. The strptime() C library function incorrectly converts a date
string into a tm structure when using the %y or the %D masks if
the string represents a date beyond 12/31/99.
q. The uucico command incorrectly constructs a character string
representation of the current time if the time is beyond
12/31/99.
r. The uuxqt command incorrectly constructs a character string
representation of the current time if the time is beyond
12/31/99.
s. The cs connection server incorrectly time stamps a log file
entry if the date is beyond 12/31/99.
t. The errpt command does not reject error log records based upon
their dates if the -e or -s command line options are given a
date beyond 12/31/99.
u. The uptime command (which is really the w command) needs to be
recompiled due to changes in the source code for the w command.
v. The w command incorrectly prints a user's login time if the
time is beyond 12/31/99.
7. XFS may show fragmentation problem with small extent
size filesystem on truncate up of empty file to high value.
XFS keeps contiguous filesystem extents in the defined
filesystem extent size (default 64Kb), writing a file with
large writes may allocate file extents larger then the
filesystem extent size if the contiguous disk space is
available. Increasing the file size to large value with
truncate was preallocating large extent sizes to the file
although the disk space is not allocated until the data
is written. This could cause a problem if the prealloated
extent size was not available.
8. System would occasionally panic at lwp_steal+0x124 with a
kernel-mode address fault.
9. ADAPTER_SLIVER definition was missing from
/usr/include/sys/adapter_vme.h
10. The latest version of LabView, which is heavily multithreaded,
would cause the system to panic with kernel-mode address faults.
11. The hat_icachesync() function was using segment register 12
temporarily to invalidate instruction cache entries for a page
that was being faulted in. It was executing at IPL level PL6.
When an "out-of-context" situation occurs (the incoming page
belongs to a different address space), hat_icachesync()
temporarily:
- saves the current value of segment register 12
- loads segment register 12 with the proper translation
table information
- invalidates the data cache entries for the page
- invalidates the instruction cache entries for the
page
- restores the saved value into segment register 12
It appears that hat_icachesync() was in the middle of
invalidating the instruction cache entries for the page
and had completed invalidating most of the cache lines for
the page (0x6d out of 0x80) when it panic'd trying to
invalidate the entries for a particular page.
Problem Resolution:
1. Add a 1 microsecond delay to user-level interrupt handling
after the user level routine is called and just before the
highest active level is reset in the interrupt controller.
2. Add additional logic to the pci, vme and interrupt configuration
routines to support the additional PCI and VME buses.
3. Correct the location of the cache initialization logic during
startup and prevent modification of the interrupt vector tables
by non-boot processors.
4. The evt_process() routine now checks for a locked rescheduling
variable before giving the LWP its new context.
5. The kernel now accepts IC_VERSION3 as a valid ICON_CONN
version number. The C and/or thread library now converts
the version 3 platform independent ipl value into the
appropriate platform dependent ipl value before calling the
kernel in this case.
The probe and xcall ipls were corrected in the appropriate
tables for all platforms.
The spl_manage() routine now masks off just the read ipl value
before indexing into the ipl table. Extra bits in the read ipl
value were causing a page fault due to a bad index.
The thread library iconnect(3C) code no longer attempts to
validate the ic_vector value, since the kernel will do all the
proper interrupt vector validation.
6. Fixes for year 2000 issues:
a. Add code to process dates beyond 12/31/99.
b. Change WriteLogMsg() to print the year modulo 100.
c. Change PRT_AGE() macro to print the year modulo 100.
d. Add code to process dates beyond 12/31/99.
e. i. Change gmt() to print the year modulo 100.
ii. Change gmts() to print the year modulo 100.
f. Change date_ba() to print the year modulo 100.
g. i. Change date_ba() to print the year modulo 100.
ii. Change date_ab() to process dates beyond 12/31/99.
h. Change date_ab() to process dates beyond 12/31/99.
i. i. Change date_ba() to print the year modulo 100.
ii. Change date_ab() to process dates beyond 12/31/99.
j. i. Change date_ab() to process dates beyond 12/31/99.
ii. Change date_ab() to process dates beyond 12/31/99.
k. i. Change date_ab() to process dates beyond 12/31/99.
ii. Change date_ab() to process dates beyond 12/31/99.
l. Change date_ab() to process dates beyond 12/31/99.
m. Recompile sact.
n. Recompile unget.
o. Change parse_fmt() to correctly process dates beyond 12/31/99.
p. Change parse() to correctly process dates beyond 12/31/99.
q. Change gmt() to print the year modulo 100.
r. Change gmt() to print the year modulo 100.
s. Print the year modulo 100.
t. Add code to correctly process dates beyond 12/31/99.
u. Recompile uptime.
v. Change prtat() to print the year modulo 100.
7. Change the allocation policy for truncated up files to use
only the filesystem extent size for prealloacted extents.
8. This occurred because of the fact that we do not use locks
while examining lwps on the dispatch queue in lwp_steal().
Rather than locking, which might impact performance, an
'l_selfptr' field was added to the lwp structure. This field
is a pointer to ourself which will allow us to verify with
some degree of certainty that the lwp we are looking at is
still valid.
9. Added the definition of ADAPTER_SLIVER to
/usr/include/sys/adapter_vme.h
10. This occurred because of a race condition between sq_wakeup()
and usync_timedsetrun(). Basically, if the timer expired
on a block, usync_timedsetrun() would be called to put the
lwp back onto the run queue. If the block was going to get
unblocked because the condition it was waiting on is met,
sq_wakeup() would be called, which would then call lwp_wakeup()
to put the lwp back on the run queue. When this happened at
the same time, these routines would add an lwp to a runqueue twice,
which can be dangerous, and was the source of this problem. The
solution to this was to ensure that only one or the other tried to
add the lwp back to the runqueue.
11. This apparently occurred because an interrupt came in at
a higher IPL and switched us out.
Before changing segment register 12, we will now save the
new value inside of 'hatttp->hattt_segregs[12]'. This allows
the context-switching routines to restore our segment register
12 value when we are switched back in.
Object To Be Replaced:
/etc/conf/cf.d/intr.s
/etc/conf/pack.d/bsp6400/Driver.o
/etc/conf/pack.d/bsp6400/space.c
/etc/conf/pack.d/bsp6408/Driver.o
/etc/conf/pack.d/bsp6408/space.c
/etc/conf/pack.d/bspall/Driver.o
/etc/conf/pack.d/bspall/space.c
/etc/conf/pack.d/io/Driver.o
/etc/conf/pack.d/kernel/Driver.o
/etc/conf/pack.d/mem/Driver.o
/etc/conf/pack.d/pci/Driver.o
/etc/conf/pack.d/proc/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/vme/Driver.o
/etc/conf/pack.d/xfs/Driver.o
/etc/conf/pack.d/ui/Driver.o
/usr/lib/libud.a
/usr/lib/libud.so
/usr/lib/libthread.a
/usr/lib/libposix1c.a
/usr/lib/libthread.so
/usr/lib/libposix1c.so
/usr/lib/libc.so.1
/usr/ccs/lib/libc.a
/usr/ccs/lib/libc.so
/usr/ccs/lib/libnc.a
/usr/ccs/lib/libp/libc.a
/usr/bin/date
/usr/bin/lp
/usr/bin/passwd
/usr/bin/touch
/usr/bin/uustat
/usr/ccs/bin/admin
/usr/ccs/bin/cdc
/usr/ccs/bin/comb
/usr/ccs/bin/delta
/usr/ccs/bin/get
/usr/ccs/bin/prs
/usr/ccs/bin/rmdel
/usr/ccs/bin/sact
/usr/ccs/bin/unget
/usr/lib/uucp/uucico
/usr/lib/uucp/uuxqt
/usr/sbin/cs
/usr/sbin/errpt
/usr/ucb/uptime
/usr/ucb/w
/usr/include/sys/bus_f.h
/usr/include/sys/adapter_vme.h
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-010
Date Issued: 5/1/98
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: moto
Related Patches: trace-001, inet-004
Related SARS: HM12253, HM12254, HM12256, HM12261,
HM12291,HM12302, HM12341
Brief Description:
PowerMAX OS 4.1 base package release updates.
Problem Description:
1. ktrace was not properly tracing user level interrupts. When
processing a trace file that was acquired when user level
interrupts were active on the system, ktrace reported a vector
mismatch. The vector acquired from the iack of the interrupt
controller upon entry to the low level interrupt handler did
not agree with the vector read from the stack during return
from a user level interrupt. This problem prevented the Night
Star tools from working properly.
2. File system corruption in xfs filesystems after system failure.
3. System Level Diagnostics (powerio and powerat)
would fail to run because hwstat(1M) could not
recognize the increased number of physical CPUs.
4. NIS doesn't work with cpio(1) and tar(1)
(because they are built statically).
5. System sometimes hangs during bootup because the savecore(1M)
program is looping.
6. The essence of it is this: Because we were not ensuring that
the setting of the valid bits were complete before calling
bcopy(8C) (ie: via __inst_sync() or __inst_eieio()), it is
possible that instruction reordering in the processor is causing a
situation where the vaild-bit-setting instruction may not have
completed by the time we try to access that page. This results in
the page seeming 'invalid', giving us the address fault.
kernel-mode address fault on kernel address 0x0FFFE000
7. When a process attempts to fork(), the fork operation never
completes due to the fact that the rendezvous() portion of
the fork processing does not complete.
When a thread is blocked in sem_wait(3), mq_send(3) or mq_receive(3)
at the time of the fork(2), that thread has its rescheduling
variable locked, and is thus unable to honor a rendezvous request.
8. When joining with a multiplexed thread, it is possible that the
calling thread on thr_join()/pthread_join() will never return, with
both the calling thread and the target thread stuck while waiting
on the target thread's thread descriptor lock. This situation can
occur when the target thread is at a lower MUX thread scheduling
priority than the MUX thread calling thr_join/pthread_join().
9. fsdump(1M) was hanging during backup of some filesystems. fsdump
spawns 4 child processes, all of which ended up going to sleep
waiting for something to wake them up. It never finishes and
must be aborted.
10. When NightView is used to debug an application, the machine
will either panic in hat_icachesync() or hangup and need to be
power cycled. The panic is caused by some sort of an interrupt
occurring while flushing the data and instruction caches in
hat_icachesync(); registers are not being restored correctly
after the interrupt. The system hang is caused by a previous
attempt to fix the panic using the DISABLE() macro, which disables
external interrupts at the chip level; while external interrupts
are disabled, the machine probably incurs an exception and hangs up.
Problem Resolution:
1. The trace point logged during return from the user level interrupt
return routine, Xuserintret(), was logging the exception vector
type, (in the case of an externel interrupt a 5), instead of the
vector number. Xuserintret() was modified to log the vector.
2. Fix an initialization ordering problem on the xfs freespace
bitmap recovery.
3. The cpuboards[] index was corrected in
cpu_config() of /usr/bin/hwstat to allow
indexing for the increased number of CPUs.
4. Build static and dynamic versions of tar(1) and cpio(1).
Dynamic by default, in /usr/bin. Static versions in /sbin.
5. savecore(1M) fixed to handle core sizes that are an odd
multiple of 4K pages.
6. The fix was to add the __inst_eieio().
7. The fix is to unlock the rescheduling variable just before
calling the kernel to block on the semaphore or message
queue, and to relock the rescheduling variable upon return
from the kernel.
8. When the target thread calls thr_exit() in order to exit the
process, it will check to see if any other thread wishes to join
with it. If so, it will wake up any thread waiting to join
with it. After the wakeup, the target/current thread may be
preempted while already holding its own thread lock. Change the
code to not preempt the current thread in this case, thus preventing
the deadlock.
9. The problem was found to be in the handling of fsdump(1M) signals.
It was using SIGTRAP to pass control of the tape drive between
3 child "slave" processes. The problem would occur when one
of these slave processes would miss its SIGTRAP signal that told
the slave that it now had control of the tape. This was because
there was a small window between the time it checked whether the
signal had already occurred before going into a pause().
The others were hung because the slave that missed the signal
would never notify the "next" slave that it was now its turn to
use the tape. Changed fsdump to use a combination of
sigset()/sighold() in place of signal(), and to use
sigpause()/sighold() in place of the pause(). Removed the
setjmp()/longjmp() code that had previously been used to try to
remove this same timing window. Even though this problem was never
seen with xfsdump, the same potential for the problem existed,
so it was also fixed.
10. Inside hat_icachesync(), once it is determined that cache
flushes should be attempted, IPL is raised to PLHI via splx()
to protect the cache flushes from interference. At the very end
of hat_icachesync() when everything is completed, IPL is
lowered via splx() to where it was upon entry.
Object To Be Replaced:
/etc/conf/cf.d/intr.s
/etc/conf/pack.d/xfs/Driver.o
/etc/conf/pack.d/mem/Driver.o
/sbin/cpio.st
/sbin/tar.st
/usr/bin/cpio
/usr/bin/hwstat
/usr/sbin/savecore
/usr/sbin/tar
/usr/lib/libthread.a
/usr/lib/libthread.so
/usr/lib/fs/ufs/fsdump
/usr/lib/fs/xfs/xfsdump
Special Conditions for Installation:
None
Possible Side Effects:
None
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-011
Date Issued: 5/1/98
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: nh
Related Patches: trace-001, inet-004
Related SARS: HM12253, HM12254, HM12256, HM12261,
HM12291, HM12302, HM12341
Brief Description:
PowerMAX OS 4.1 base package release updates.
Problem Description:
1. ktrace was not properly tracing user level interrupts. When
processing a trace file that was acquired when user level
interrupts were active on the system, ktrace reported a vector
mismatch. The vector acquired from the iack of the interrupt
controller upon entry to the low level interrupt handler did
not agree with the vector read from the stack during return
from a user level interrupt. This problem prevented the Night
Star tools from working properly.
2. On TurboHawk and PowerMAXION systems, the svme_intr() routine
is used to read interrupt pending status from the Tundra that
supports secondary VME and process all pending secondary VME
interrupts. The interrupts were different secondary VME levels
(1-7) and may be intended to be handled by different CPUs.
3. On TurboHawk and PowerMAXION systems, the interval timers on
processor cards 4-7 were not being synchronized to the epoch
during system initialization.
4. mpadvise(3C) fails when performing query as to what CPUs are assigned
to VME IRQ levels.
5. File system corruption in xfs filesystems after system failure.
6. System Level Diagnostics (powerio and powerat) would fail
to run on a TurboHawk system because hwstat(1M) could
not recognize the increased number of physical CPUs.
7. NIS doesn't work with cpio(1) and tar(1)
(because they are built statically).
8. System sometimes hangs during bootup because the savecore(1M)
program is looping.
9. Fixes a problem with mpadvise(3C) on nh6400 and nh6408 systems.
The problem was visible when the following command was run:
mpadvise(3C)(MPA_CPU_VMELEV,MPA_VMELEV_PRIMARY,6,&mask);
The above command would always fail with EINVAL.
10. The essence of it is this: Because we were not ensuring that
the setting of the valid bits were complete before calling
bcopy(8C) (ie: via __inst_sync() or __inst_eieio()), it is
possible that instruction reordering in the processor is causing a
situation where the vaild-bit-setting instruction may not have
completed by the time we try to access that page. This results in
the page seeming 'invalid', giving us the address fault.
kernel-mode address fault on kernel address 0x0FFFE000
11. When a process attempts to fork(), the fork operation never
completes due to the fact that the rendezvous() portion of
the fork processing does not complete.
When a thread is blocked in sem_wait(3), mq_send(3) or mq_receive(3)
at the time of the fork(2), that thread has its rescheduling
variable locked, and is thus unable to honor a rendezvous request.
12. When joining with a multiplexed thread, it is possible that the
calling thread on thr_join()/pthread_join() will never return, with
both the calling thread and the target thread stuck while waiting
on the target thread's thread descriptor lock. This situation can
occur when the target thread is at a lower MUX thread scheduling
priority than the MUX thread calling thr_join/pthread_join().
13. fsdump(1M) was hanging during backup of some filesystems. fsdump
spawns 4 child processes, all of which ended up going to sleep
waiting for something to wake them up. It never finishes and
must be aborted.
14. When NightView is used to debug an application, the machine
will either panic in hat_icachesync() or hangup and need to be
power cycled. The panic is caused by some sort of an interrupt
occurring while flushing the data and instruction caches in
hat_icachesync(); registers are not being restored correctly
after the interrupt. The system hang is caused by a previous
attempt to fix the panic using the DISABLE() macro, which disables
external interrupts at the chip level; while external interrupts
are disabled, the machine probably incurs an exception and hangs up.
Problem Resolution:
1. The trace point logged during return from the user level interrupt
return routine, Xuserintret(), was logging the exception vector
type, (in the case of an externel interrupt a 5), instead of the
vector number. Xuserintret() was modified to log the vector.
2. The svme_intr() routine was changed so that only the interrupt
generating the original request is handled.
3. The routine reload_swtimer() was enhanced to load the epoch into
the interval timers on all processor cards present in the system.
4. Modification to config_ints_p.c (getbuslvl_nh6408()) to insert
missing break statements into a switch statement.
5. Fix an initialization ordering problem on the xfs freespace
bitmap recovery.
6. The cpuboards[] index was corrected in cpu_config() of
/usr/bin/hwstat to allow indexing for the increased number
of CPUs in TurboHawk systems.
7. Build static and dynamic versions of tar(1) and cpio(1).
Dynamic by default, in /usr/bin. Static versions in /sbin.
8. savecore(1M) fixed to handle core sizes that are an odd
multiple of 4K pages.
9. The essential problem is that when the code for getbuslvl_nh640x()
was re-written with switch()/case statements, 'break;' was not
included at the end of the case statements, so it always fell
through to the error return and would never call the function which
did the real work (getcpuint_nh640x()). In fact, the call to that
function was optimized out of the generated code because it was
unreachable.
10. The fix was to add the __inst_eieio().
11. The fix is to unlock the rescheduling variable just before
calling the kernel to block on the semaphore or message
queue, and to relock the rescheduling variable upon return
from the kernel.
12. When the target thread calls thr_exit() in order to exit the
process, it will check to see if any other thread wishes to join
with it. If so, it will wake up any thread waiting to join
with it. After the wakeup, the target/current thread may be
preempted while already holding its own thread lock. Change the
code to not preempt the current thread in this case, thus preventing
the deadlock.
13. The problem was found to be in the handling of fsdump(1M) signals.
It was using SIGTRAP to pass control of the tape drive between
3 child "slave" processes. The problem would occur when one
of these slave processes would miss its SIGTRAP signal that told
the slave that it now had control of the tape. This was because
there was a small window between the time it checked whether the
signal had already occurred before going into a pause().
The others were hung because the slave that missed the signal
would never notify the "next" slave that it was now its turn to
use the tape. Changed fsdump to use a combination of
sigset()/sighold() in place of signal(), and to use
sigpause()/sighold() in place of the pause(). Removed the
setjmp()/longjmp() code that had previously been used to try to
remove this same timing window. Even though this problem was never
seen with xfsdump, the same potential for the problem existed,
so it was also fixed.
14. Inside hat_icachesync(), once it is determined that cache
flushes should be attempted, IPL is raised to PLHI via splx()
to protect the cache flushes from interference. At the very end
of hat_icachesync() when everything is completed, IPL is
lowered via splx() to where it was upon entry.
Object To Be Replaced:
/etc/conf/cf.d/intr.s
/etc/conf/pack.d/vme/Driver.o
/etc/conf/pack.d/svc/Driver.o
/etc/conf/pack.d/bsp6408/Driver.o
/etc/conf/pack.d/xfs/Driver.o
/etc/conf/pack.d/mem/Driver.o
/sbin/cpio.st
/sbin/tar.st
/usr/bin/cpio
/usr/bin/hwstat
/usr/sbin/savecore
/usr/sbin/tar
/usr/lib/libthread.a
/usr/lib/libthread.so
/usr/lib/fs/ufs/fsdump
/usr/lib/fs/xfs/xfsdump
Special Conditions for Installation:
None
Possible Side Effects:
Without this patch, user-level drivers will not work properly
on a NH-6408 running PowerMAX 4.1 Operating System.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: base-012
Date Issued: 10/14/1999 13:42:56
Software Package: base pkg (Version 4.1)
OS Release: PowerMAX OS 4.1
Architectures: moto
Platforms: Power Hawk 610, PowerStack
Related Patches: none
Related SARS: none
Brief Description:
PowerMAX OS 4.1 base package release updates
Problem Description:
1. If the system time is changed to certain dates in the 21st century,
the date written to the hardware Time Of Century Clock is
mishandled. On a subsequent system reboot, the system time is set
wrong because the date read from the hardware Time Of Century
Clock is incorrect.
Problem Resolution:
1. The kernel now writes the correct date to the hardware Time Of
Century Clock when the system time is changed, thereby ensuring
the system time is correctly set upon system reboot.
Object To Be Replaced:
/etc/conf/pack.d/svc/Driver.o
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: bkrs-001
Date Issued: 10/03/97 11:12:34
Software Package: bkrs pkg (Version 4.1)
OS Release: PowerMAX_OS 4.1
Architectures: moto nh
Related Patches: none
Related SARS: none
Brief Description:
Fixes for year 2000 problems in the backup/restore package
Problem Description:
1. The bkreg command does not correctly format a backup rotation
start date if it is beyond 12/31/99.
2. The bkhistory command needs to include the new static C library
getdate() function.
3. The restore and urestore commands need to include the new
static C library getdate() function.
Problem Resolution:
1. In bkget_rotatestart() function, print the year modulo 100.
2. Recompile bkhistory with the new libc.a.
3. Recompile restore and urestore with the new libc.a.
Object To Be Replaced:
/usr/sbin/bkreg
/usr/sbin/urestore
/sbin/bkhistory
/sbin/restore
Special Conditions for Installation:
None.
Possible Side Effects:
None.
return to index
================================================================================
Concurrent Computer Corporation Software Development
Software Patch Report
Patch Name: bkrs-001
Date Issued: