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: