Patch Name: PHNE_22566

Patch Description: s700_800 11.00 Cumulative STREAMS Patch

Creation Date: 00/12/22

Post Date: 01/01/12

Hardware Platforms - OS Releases:
	s700: 11.00
	s800: 11.00

Products: N/A

Filesets:
	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP
	Streams.STREAMS-32ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP
	Streams.STREAMS-MIN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP
	Streams.STREAMS-64ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP
	Streams.STREAMS-64SLIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP
	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP
	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP

Automatic Reboot?: Yes

Status: General Release

Critical:
	No (superseded patches were critical)
	PHNE_22381: HANG
	PHNE_22129: HANG
	PHNE_21676: PANIC
	PHNE_21584: PANIC
	PHNE_21398: HANG
	PHNE_20316: PANIC HANG MEMORY_LEAK CORRUPTION
	PHNE_20008: PANIC HANG
	PHNE_18972: PANIC HANG
	PHNE_18075: PANIC
	PHNE_17904: PANIC HANG
	PHNE_17051: PANIC
	PHNE_16732: PANIC
	PHNE_16290: HANG PANIC
	PHNE_15612: HANG PANIC
	PHNE_14706: PANIC
	PHNE_14192: CORRUPTION

Category Tags:
	defect_repair general_release critical panic halts_system
	corruption memory_leak

Path Name: /hp-ux_patches/s700_800/11.X/PHNE_22566

Symptoms:
	PHNE_22566:
	1.  Some 3rd-party streams modules cannot recognize _IOR
	    ioctls().
	    JAGad28107
	2.  poll() returns an unexpected non-zero value when
	    connect() had been called for a socket in non-blocking
	    mode and the connection has not yet been established.
	    This causes a subsequent call to connect() to set errno
	    to EALREADY unexpectedly.
	    JAGad43870

	PHNE_22381:
	1.  Some of the NFS test threads loop indefinitely on
	    streams_poll() even when data is available at the
	    stream head.
	    JAGad15958
	2.  Pass third argument to fo_select due to a FS patch.
	    JAGad27893
	3.  System panic with data page fault in canput().
	    JAGad21578

	PHNE_22129:
	1.  When a broadcast storm occurs on 4 or more Gigabit ports
	    the system hangs.
	    JAGad09699
	2.  When two user processes open the same device number at
	    the same time, the driver may be given different stream
	    head addresses when it is expecting the same stream
	    head address for both.
	    JAGad00967
	3.  Spinlock held too long is detected in processing per
	    stream SPU queue of STREAMS. This is a performance
	    problem and may result in Service Guard time-out.
	    JAGad16470

	PHNE_21676:
	1.  When using select() with a large number of BSD socket
	    file descriptors, performance degradation is observed.
	    JAGac59693
	2.  When using poll() with a large number of BSD socket
	    file descriptors, performance degradation is observed.
	    JAGad11793
	3.  Network performance degradation is observed on
	    systems with multiple CPUs and only one network
	    card. JAGac56997
	4.  When the MSG_PEEK flag is set in recv(), recvmsg(),
	    and recvfrom() system calls, less data may be
	    returned than is actually available. JAGac78642
	5.  A system panic occurs in unweldq_exec().
	    JAGab15582

	PHNE_21584:
	  1. hpstreams_clone_open() panics the system with IPF
	     (instruction page fault) if minor number is above
	     255.  JAGab73803
	  2. severe spinlock contention on the str_to_lck.
	     JAGad00981

	PHNE_21398:
	  1. IOCTLs TCGETX and TCSETX are not passed through to
	     the driver.  JAGad00969

	PHNE_20316:
	  1. The system runs out of dynamic major numbers for
	     DLKM STREAMS.
	        JAGab00251
	  2. When Connection Caching is on, tcp ports may not be
	     freed after an application exits.  This may be
	     determined with the aid of netstat.
	        JAGab21075
	  3. The ioctl command I_STACKALIVE can cause a 256 byte
	     memory corruption which may result in a system panic.
	        JAGab12970
	  4. An application may hang when polling for OOB data.
	        JAGab41375
	  5. A memory leak occurs when an application polling more
	     than 64 file descriptors is sent a kill signal.  The
	     memory leak is only significant when the above happens
	     often.
	        JAGab83796

	PHNE_20008:
	  1. SCA:Boot Panic: up_binding: attempt to UP bind on
	     multi-node platform
	     JAGab73422
	  2. TL_driver panic.  Panic at tl_unitdata+0x314
	     JAGab68611
	  3. read_sleep()/read_bufcall() data page fault panic
	     Memory corruption when waking up from read_sleep().
	     JAGab15932
	  4. hpstreams_option1() race panic. Data page fault occurs
	     when file system is full on any logical volume.
	     JAGab15459
	  5. schedule_csq_release() failed to remove an element from
	     the synchronization queue leading to a hang.
	     JAGab75315
	  6. _csq_acquire() / qenable() race leading to a hang.
	     JAGab43884

	PHNE_18972:
	  1. Thread based applications may receive invalid errno's
	     when using the XTI library call t_rcv().
	     JAGab39647
	  2. The XTI library call t_rcv() with the flag T_MORE set
	     returns corrupted data to an application making
	     multiple calls to receive large packets.
	     JAGab46803, 1653-310698
	  3. System hangs when a socket is closed and the SO_LINGER
	     option is set.
	     JAGaa94558
	  4. Data Page Fault occurs when an error condition allows
	     an osr to run out of order.
	     JAGab45580

	PHNE_18486:
	  1. System panic because of 256 byte bucket memory leak in
	     freeb_pullupmsg().
	  2. 4-way Prelude panicked while running netperf and
	     vmtrace.

	PHNE_18075:
	  1. System panics with data page fault.
	  2. When the application has eight connections waiting,
	     but repeated calls to select never return 'readable'
	     for the TCP listen FD. JAGaa94326
	  3. System panics with data page fault.
	  4. During system boot-up time, DLKM fails with the
	     message "resolved symbol streams_get_sleep_lock()".
	  5. Select() will return READABLE on a socket with urgent
	     data only.
	  6. V-Class panic (data page fault) 100BT with promiscuous
	     PHY & netperf

	PHNE_17904:
	  1. Panic
	     csq_release: sqh_refcnt is less than or equal to 0.
	  2. Panic - Instruction page fault
	     if STREAMS-based pipe option is enabled.
	  3. Panic - Data Page Fault
	     Intermittent system panic due to memory corruption in
	     128-bytes bucket.
	  4. Panic
	     db_ref wraparound in dupbn, allocb_dupb
	  5. Hang
	     System hangs upon starting OTS which runs an inbound
	     thread as a driver/module in UP emulation mode on an
	     MP system.
	  6. Panic - kalloc()
	     "uprintf()" err msg causes huge amount of STREAMS mesg.
	     allocation.

	PHNE_17794:
	  1. SpecWeb Performance Enhancement.

	PHNE_17051:
	  1. With 'mult_sqh' lock being held throughout K_STHINERT
	     ioctl, performance got affected greatly.
	  2. Stack caching enhancement is added to boost SpecWeb96
	     performance through soaccept().

	PHNE_16732:
	  1. System Panic with data page fault caused by a race
	     condition between the ioctl() issued by nettl and
	     a socket close made by one of oracles processes.
	  2. Sockets do not select TRUE on exceptions of out-of
	     -band data is available.  FIX to support detecting
	     Out-of-band data  from  streams_select2()  STREAMS
	     function.

	PHNE_16290:
	  When the callers of dupb() duplicate more than 254 mblks
	  to the same datab, the 255th dupb() will cause db_ref
	  counter to be rounded to 0 since db_ref is an unsigned
	  char. This will cause freeb() to free the datab buffer
	  even there are still mblks dup'ed to it. This behavior
	  caused data page fault which leaded to system panics. We
	  have seen this on few 16-way V-class systems. The fix is
	  to return NULL to caller of the dupb() if db_ref is
	  already 255. Transport code will call copyb() first if
	  the return value from dupb() is NULL.

	PHNE_15612:
	  1. Changes made to str_plumb_ioctl() to not set
	  F_OSR_NEED_MULT_SQH bit in osr_flag. This change resolved
	  the X.25 and ATM processes hang problem.
	  2. Changes made to init_pipe_sth() to initialize 32-64bit
	  mapping functions which prevents page fault panic.
	  3. Changes made to tl_do_pcproto() to have t_getname to
	  support loop back transport.
	  4. Performance enhancements have been added, one of which
	  also prevents a hang in low memory situations.

	PHNE_14706:
	  1. Change str_dev_lookup_name() to pass correct arguments.
	  2. t_look does not return T_GODATA and T_GOEXDATA.
	  3. Memory corruption - in-memory copy of a file become
	           corrupted.
	  4. System hang from putpmsg with band 1 message on pty
	                  file descriptor.
	  5. System panic with data page fault with faulty osr
	                         pointer in hpstreams_option1().
	  6. System panic with data page fault in sth_muxid_lookup.
	  7. System panic with data page fault in putbq (via
	     hpstreams_read_int).

	PHNE_14192:
	  When a readv is done with multiple iovec's and the buffer
	  size is greater than a page and both the source (kernel)
	  and destination (user) buffers are page-aligned, then the
	  iovec accounting is done incorrectly making it appear that
	  the iovec's are not properly filled.

Defect Description:
	PHNE_22566:
	1.  An _IOR ioctl was passed in an M_IOCTL message with
	    ioc_count set to zero and b_cont set to NULL.
	    JAGad28107
	Resolution:
	    In the M_IOCTL message, if IOC_PARMLEN(cmd) is non-zero,
	    ioc_count is set to IOC_PARMLEN(cmd), and b_cont points
	    to an allocated message block.  If IOC_PARMLEN(cmd) is
	    zero, ioc_count is set to TRANSPARENT, and the message
	    block that b_cont points to contains the ioctl "arg"
	    parameter.

	2.  poll() returns successfully, instead of waiting for the
	    connection to be established, because poll() was
	    looking only at the stream state, not also at the
	    socket state.
	    JAGad43870
	Resolution:
	    Instead of calling hpstreams_poll(), which looks only
	    at the stream, pollscan() calls the socket select
	    function, which looks at both the socket and stream
	    states.

	PHNE_22381:
	1.  Some of the NFS test threads loop indefinitely on
	    streams_poll() even when data is available at the
	    stream head.
	    JAGad15958
	Resolution:
	    The race in the wakeup path when data arrives at the
	    stream head and the poll_s struct being enqueued at
	    the same stream head which caused the hang has been
	    eliminated.

	2.  Pass third argument to fo_select due to a FS patch.
	    JAGad27893
	Resolution:
	    A third argument is now passed to the fo_select
	    function pointer calls in streams to be consistent
	    with the changes made in the File System code.

	3.  This is a race condition when one side of a streams
	    pipe closes. The closing side breaks the streams
	    pointers before the other side is ready to be closed.
	    JAGad21578
	Resolution:
	    Added a check in canput to detect a NULL pointer. If
	    the pointer is NULL, return zero to indicate that the
	    stream is flow controlled and a put cannot be done.

	PHNE_22129:
	1. When a broadcast storm occurs on 4 or more Gigabit ports
	   the system hangs.
	   JAGad09699
	Resolution:
	   DLPI checks the synchronization queue. If there are too
	   many messages in the queue, DLPI would drop messages.

	2.  When two user processes open the same device number at
	    the same time, the driver may be given different stream
	    head addresses when it is expecting the same stream
	    head address for both.
	    JAGad00967
	Resolution:
	    Serialize all opens for the same major device number.

	3.  Spinlock held too long is detected in processing per
	    stream SPU queue of STREAMS. This is a performance
	    problem and may result in a Service Guard time-out.
	    JAGad16470
	Resolution:
	    The problem is fixed by avoiding the buildup of the
	    long per-cpu queues.

	PHNE_21676:
	1.  When using select() with a large number of BSD socket
	    file descriptors, performance degradation is observed.
	    JAGac59693
	Resolution:
	    Internal changes were made to enable performance
	    improvements when using select() with a large
	    number of BSD socket file descriptors.

	2.  When using poll() with a large number of BSD socket
	    file descriptors, performance degradation is observed.
	    JAGad11793
	Resolution:
	    Performance improvement related changes have been
	    made.

	3.  On a system with multiple CPUs, but only one network
	    interface card, all of the processing of incoming
	    data packets is done on one CPU.  This can lead to
	    an inefficient use of the CPUs in some cases.
	    JAGac56997
	Resolution:
	    Internal changes enable changes in the ARPA Transport
	    product to shift some of the inbound processing to
	    another CPU, when appropriate.

	4.  If the available data for the socket is stored
	    internally in multiple STREAMS messages, only the
	    data in first message is returned.
	    JAGac78642
	Resolution:
	    Internal changes enable a fix in the recv(),
	    recvmsg(), and recvfrom() system calls to retrieve
	    all of the data when using the MSG_PEEK flag.

	5.  When a driver is welded, the use of per-major locking
	    in some code paths causes a race condition in the
	    unweld and close paths, which can lead to a panic.
	    JAGab15582
	Resolution:
	    A kernel variable global_weldq_synch selects the
	    use of global or per-major locking in specific code
	    paths. Generally, per-major locking is safe to use;
	    it is the default because it provides better
	    performance. Products that use weld (e.g. ASU)
	    might need to set the kernel variable to 1 in
	    order to select global locking. This avoids the
	    race condition at the expense of some performance
	    degradation for all streams.

	PHNE_21584:
	  1. hpstreams_clone_open is not checking for invalid minor
	     number. JAGab73803
	Resolution: A check is added for valid clone minor number in
	     hpstreams_clone_open()
	  2. str_timeout and streams_untimeout, would continue
	     traversing a linked list until we reach the end even
	     if it found what it is looking for. JAGad00981
	Resolution:
	     Modified the str_timeout() and streams_untimeout() to
	     break off the for loop on finding a "sqe" on the active
	     timeout queue

	PHNE_21398:
	  1. All IOCTLs of class 'X' were processed as streams XTI
	     IOCTLs.
	Resolution:
	     Process IOCTLs with command numbers less than 50 as tty
	     IOCTLs.

	PHNE_20316:
	  1. Dynamic major numbers for DLKM STREAMS were not
	     recycled properly.
	Resolution:
	     The C_DYN_MAJOR flag was added to the cdevsw structure
	     for DLKM STREAMS.

	  2. When Connection Caching is on, the socket is always
	     bound.  This allows data to be forced into a closed
	     and cached socket.  The Stream Head may then fill up
	     with data.
	Resolution:
	     We determine whether a stack is cached before we
	     determine the message type in the stream head.

	  3. When the stream head's osr structure is in use, a new
	     osr structure is dynamically allocated.  This osr is
	     then freed twice.
	Resolution:
	     We removed one call to free.

	  4. OOB data is not handled by the FREAD flag in select.
	Resolution:
	     The select flag is set to 0 which handles OOB data.

	  5. When a poll on more than 64 file descriptors is
	     interrupted, the memory allocated for the descriptors
	     is not freed.
	Resolution:
	     The data structures are freed when poll is
	     interrupted.

	PHNE_20008:
	  1. Description:
	     The multi-node system panicked during the
	     initialization of the NFS core subsystem in the
	     boot-up process.
	Resolution:
	     Changed the TL driver, which is used by NFS, from
	     UP driver to MP driver.

	  2. Description:
	     The TL driver is a UP driver. The UP emulation
	     mechanism is broken. Thus the globals in the TL driver
	     are not protected, and race occurs. The fix is in
	     osr_open to fix the broken UP emulation mechanism.
	Resolution:
	     The logic has been corrected.

	  3. Description:
	     We need to reacquire
	     'osr->osr_sth->sth_read_osrq.osrq_lock' after waking
	     up from sleep, and release it at the end.
	Resolution:
	     A spinlock/spinunlock has been added for protection.

	  4. Description:
	     When the slave side telnetd process goes away, the
	     parent process does not cleanup the device number in
	     its proc struct's p_ttyp/p_ttyd fields.  This can lead
	     to uprintf using it.
	Resolution:
	     We now check for p_ttyp at the beginning of
	     hpstreams_close_int() and set tp->t_dev = NODEV.

	  5. Description:
	     When schedule_csq_release encountered an sqe with
	     sq_flags = SQ_HOLD, it did not remove the element from
	     the synchronization queue before it calls wakeup.
	Resolution:
	     schedule_csq_release() now calls remque() when it
	     encounters an sqe with sq_flags = SQ_HOLD.
	  6. Description:
	     This is a module/driver hang that may lead to memory
	     exhaustion.
	Resolution:
	     We modified _csq_acquire() to prevent the race by
	     moving a spinlock.

	PHNE_18972:
	  1. Description:
	     Thread based applications may receive invalid errno's
	     when using the XTI library call t_rcv().

	Resolution:
	     The following define has been added to the build rules.
	     -D_POSIX_C_SOURCE=199506L

	  2. Description:
	     There is a problem when a single message with the
	     T_MORE flag set is read by the application by calling
	     t_rcv() more than 2 times for that single message.  In
	     these circumstances the T_MORE flag will not be set
	     correctly and may result in what appears to be silent
	     data corruption to the application user.

	Resolution:
	     The code change for SR 4701-320978 was brought
	     forward to HP-UX 11.0.

	  3. Description:
	     The problem is caused by the delay between the last
	     send() and close() when the SO_LINGER option is used.

	Resolution:
	     Resolve the deadlock if putnext() is called and the
	     FIN mblk is sent down after tcp_linger() calls
	     streams_mpsleep().

	  4. Description:
	     str_istr_ioctl(), str_trans_ioctl(), etc., call
	     ioctl_dequeue_osr_wakeup() when an error is returned by
	     ioctl_sleep_until_first().  This may result in an osr
	     that is not first on the ioctl_osrq being woken up. If
	     this osr is sleeping in ioctl_sleep_until_first() we
	     are ok because it will check to see if it is first or
	     not.  If it sleeping somewhere else, then it will think
	     it is first. We now have two osr's that think they are
	     first: The one that is first and the one we just woke.
	     This leads to a corruption of the ioctl_osrq.

	Resolution:
	     ioctl_dequeue_osr_wakeup() has been changed so that it
	     checks to see if the current osr is first.  If the
	     current osr is first, then it is dequed and the next
	     osr becomes first and is woken up.  If the current osr
	     is not first, then it is dequed and no osr is woken up.

	PHNE_18486:
	  1. The memory leak is caused by freeb_pullupmsg() not
	     doing the (mh== (MHP) bp) check.

	Resolution:
	     Add the (mh== (MHP) bp) check to freeb_pullupmsg() to
	     avoid the memory leak.

	  2. This is a 256 byte memory corruption problem. The
	     problem is caused by the Streams illegally using
	     spl5 to acquire the global spl_lock.

	Resolution:
	     In unbufcall and str_mem_daemon, use the spinlock to
	     replace spl.

	PHNE_18075:
	  1. Description:
	     The function osr_free was moved beyond our check for
	     F_STH_ISATTY. osr_free was then called regardless of
	     the result of osr_run and osr_open. That causes
	     "assertion failed: (ksp->ks_inuse>=0) at L793
	     streams/str_scalls.c".

	Resolution:
	     Introduced a flag so that the osr structure must be
	     freed when osr_run returns 0 or >0, and the osr
	     structure must be freed when osr_open returns 0.

	  2. Description:
	     This only happens on V-class machines. When the user
	     process is waiting for t_accept() to return an accept
	     for a connection request TCP can return another
	     T_CONN_IND, or T_DISCON_IND for a different connection,
	     or getmsg can return EINTR. These cases are not handled
	     correctly and the user process will get an error and
	     the T_OK_ACK remains on the stream head..

	Resolution:
	     Changed t_chk_ack() so that 1) we get next message if
	     the current getmsg returned EINTR; 2) retry if we got
	     another connection request while awaiting for an ACK
	     from the previous one; 3) if it is a disconnect for
	     some other sequence number then ignore it.

	  3. Description:
	     In one of the STREAMS' header files, the DUPB macro
	     doesn't set the pointer to null if db_ref > 255.
	     That causes the macro returns invalid pointer.

	Resolution:
	     Added the "new_bp = nilp(MBLKP);" line in the DUPB
	     macro to make the new_bp a null pointer if db_ref >
	     255.

	  4. Description:
	     The optimization (Procelim) in the Production/
	     Performance kernel removes the streams_get_sleep_lock
	     function. That causes the system not be able to find
	     the function, and the system stop booting.

	Resolution:
	     Changed str_init.c to reference streams_get_sleep_lock
	     so that DLKM can find it.

	  5. Description:
	     The TCP out-of-band data (OOB) were not detected
	     correctly when we process all the 'mblks' currently
	     in the streams queue.

	Resolution:
	     The fix is to search through all received data for OOB
	     data, rather than just the first portion of the
	     received data.

	  6. Description:
	     A race condition. If a message is duplicated (through
	     dupb()), then is pulled up (through pullupmsg()), we
	     sometimes see a race condition in freeb() which causes
	     data page fault, of course, then panic. The symptoms
	     are mostly seen when fast links are involved (like
	     100BT).

	Resolution:
	     Fixed freeb() and freeb_pullupmsg() to close the race
	     window.

	PHNE_17904:
	  1. A race condition within streams which causes the global
	     lock to be released instead of the per-major lock.
	  2. A race condition  with  STREAMS-based  pipes  if  the
	     application uses fattach() and fdetach() heavily.  It
	     happens while detaching a pipe far end vnode(s) because
	     the near end is closing & the simultaneous detaching
	     the vnode explicitly.
	  3. The osr_free has been done too early causing a freed
	     sq pointer to be passed to csq_acquire.
	  4. db_ref counter wraparound to "0" which causes freeb()
	     to prematurely frees a message block that still has
	     duplicated messages somewhere.
	  5. DLPI calls streams_put_release with a target spu of -1.
	     This is the case of IPS off and the packet is supposed
	     to be processed on the current CPU(ISR stack). However,
	     in QUPMODE, target_spu is getting reset to the CPU on
	     which OTS is bound to.  Unfortunately, OTS thread UP
	     emulation binding spu is not the current CPU.  Hence,
	     starting OTS behaves as if IPS is turned ON. The packet
	     gets queued on the streams scheduling queue of the CPU
	     on which ISR is running; while software interrupt runs
	     on the CPU to which OTS is bound to.
	     Also, streams_put_release is not setting 'qp->busy' to
	     'zero'  before calling timeout_on_spu for UP emulation
	     queue. This results to any other queue's packets (such
	     as IP) getting queued at streams scheduling queue bec.
	     qp->busy is 1.
	  6. If the file system becomes full in an HFS LVM, the HFS
	     kernel code will generate an error message via:
	     uprintf("\n%s: write failed, file system is full\n",
	     fs->fs_fsmnt); uprintf() will determine the associated
	     process controlling tty and push the  "/logs: write
	     failed, file system is full" message out to it one(1)
	     character at a time.  Since the controlling tty is a
	     STREAMS-based PTY in this case, these one(1) character
	     transfers end up becoming separate message blocks that
	     point to 1 character data blocks ---- consuming a 256
	     byte kernel memory allocation for each one.

	Resolution:
	  1. Modified the LOCKs mechanism.  Remove unnecessary re-
	     leases of global locks in 'osr_link' and 'osr_pipe'.
	     Also, created a separate 'osr_popup_subr' routine to
	     segregate the behavior of 'osr_pop' from 'osr_close'.
	  2. Fix in fattach() and fdetach() associated with spipe.
	     And in FSYNC.
	  3. Fix in 'pse_open routine' of str_scalls.c.  Delay the
	     osr_free to the end of the pse_open routine.
	  4. Fix in 'allocb_dupb()' and 'dupbn()' to ensure that
	     the db_ref counters are less than or equal  to  255
	     (maximum for unsigned short).
	  5. Fix in 'streams_put_release()'.  Set the target_spu
	     correctly if MP and q_flag is QUPMODE.  Also,  set
	     qp->busy to 'zero' before calling timeout_on_spu for
	     UP emulation queue.
	  6. Fix in 'hpstreams_option1()'.  Send message downstream
	     if it is High_Priority or there's room in "ldterm" WQ;
	     otherwise, set "error", free the 'mp', and  leave  the
	     function.

	PHNE_17794:
	  1. Enhancement for SpecWEB Performance.

	Resolution:
	  1. Added new function prototypes and new IOCTL definitions
	     to enhance SpecWEB Performance.

	PHNE_17051:
	  1. Added new K_STHINSERT2 ioctl instead of using 'mult_
	     sqh' lock to improve SpecWeb96 performance.
	  2. Stack caching enhancement is added to boost SpecWeb96
	     performance through soaccept().

	PHNE_16732:
	  1. System Panic with data page fault caused by a race
	     condition between the ioctl() issued by nettl and
	     a socket close made by one of oracles processes.
	  2. Sockets do not select TRUE on exceptions of out-of
	     -band data is available. select() functionality for
	     TCP sockets is handled inside STREAMS stack  since
	     11.0; but the existing STREAMS implementation does
	     not account for TPI T_EXDATA_IND messages.

	PHNE_16290:
	  The system hits data page fault panic if a subsystem
	  dupb()'s more than 255 mblk to a same datab. This
	  typically happens on high end mutli-way systems.

	PHNE_15612:
	  1. The ATM and X.25 products were all hanging on either
	  32-bit or 64-bit system with 11.0 plus installed.
	  The cause of this is that the STREAMS system holds a
	  mult_sqh lock without releasing it.
	  2. The 64-bit system with 11.0 plus panicked because
	  the streams head structures containing 32-64bit mapping
	  functions were not initialized.
	  4. The hang was caused by stress on memory.  If there was
	  a lot of NFS traffic, then vhand would attempt to recover
	  memory by flushing the buffer cache.  Flushing NFS buffers
	  required a network connection to write the buffer and
	  generating that connection required synchronization
	  through a global sync point.  However, that could have
	  been held by a thread waiting for memory, causing a
	  deadlock.  The global sync element was split to prevent
	  this deadlock.

	PHNE_14706:
	  1. str_dev_lookup_name() should call the lookupname as:
	     lookupname(device_name, UIOSEG_KERNEL, FOLLOW_LINK,
	     (struct vnode **)0L, &vp);
	  2. t_snd() was not setting flag after TFLOW for t_look
	     to know that has been a TFLOW condition.
	  3. In hpstream_read_int(): an check should be added to see
	     whether the streams buffer is cachebuf vs. regular
	     memory. No rmapout should be performed if is cachebuf;
	     use uiomove instead.
	  4. streams canput() checks only QFULL without checking
	     QB_FULL. canput should be flow-controlled if any band
	     is blocked.
	  5. An "osr" pointer is referenced after it has been
	     already freed.
	  6. This was caused by an update to a stale pointer.
	  7. This was caused by a mishandling of a message when a
	     copyout error occurred part way through a read.

	PHNE_14192:
	  The problem is in the streams read code.  There is a
	  performance path that attempts to remap the page instead
	  of copying it if both the source (kernel buffer) and the
	  destination (user buffer) are larger than a page and are
	  page-aligned.  If these conditions were met, the pages
	  were remapped, but the accounting was done incorrectly
	  making the readv fail to work properly.

SR:
	1653250332 1653252882 1653256198 1653256974 5003431122
	5003431130 5003437541 1653284307 1653265603 5003455352
	4701411280 4701418335 5003455568 1653310698 8606131817
	8606140332 8606146615 8606158563 8606152239 8606158777

Patch Files:
	
	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/include/sys/stream.h
	/usr/conf/h/stream.h
	/usr/include/sys/stropts.h
	/usr/conf/h/stropts.h

	Streams.STREAMS-32ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/libnsl_s.a
	/usr/lib/libxti.a

	Streams.STREAMS-MIN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/lib/libnsl_s.2
	/usr/lib/libxti.2

	Streams.STREAMS-64ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/pa20_64/libxti.a

	Streams.STREAMS-64SLIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/pa20_64/libxti.2

	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP:
	/usr/conf/lib/libstream.a

	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP:
	/usr/conf/lib/libstream.a

what(1) Output:
	
	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP:
	/usr/conf/lib/libstream.a:
		STREAMS: Date: 2000/12/15 12:45:00 Revision: r11ros 
			PATCH_11.00 (PHNE_22566)

	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP:
	/usr/conf/lib/libstream.a:
		STREAMS: Date: 2000/12/15 12:45:00 Revision: r11ros 
			PATCH_11.00 (PHNE_22566)

	Streams.STREAMS-32ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/libnsl_s.a:
		STREAMS:        Revision: B.11.00  $Date: 99/07/07 1
			4:00:00 $

	Streams.STREAMS-MIN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/lib/libnsl_s.2:
		STREAMS:        Revision: B.11.00  $Date: 99/07/07 1
			4:00:00 $

	Streams.STREAMS-32ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/libxti.a:
		STREAMS:        Revision: B.11.00  $Date: 99/07/07 1
			4:00:00 $

	Streams.STREAMS-MIN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/lib/libxti.2:
		STREAMS:        Revision: B.11.00  $Date: 99/07/07 1
			4:00:00 $

	Streams.STREAMS-64ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/pa20_64/libxti.a:
		STREAMS:        Revision: B.11.00  $Date: 99/07/07 1
			4:00:00 $

	Streams.STREAMS-64SLIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	/usr/lib/pa20_64/libxti.2:
		STREAMS:        Revision: B.11.00  $Date: 99/07/07 1
			4:00:00 $

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/include/sys/stream.h:
		stream.h: $Revision: 1.9.118.14 $ $Date: 98/04/22 11
			:57:43 $

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/conf/h/stream.h:
		stream.h: $Revision: 1.9.118.14 $ $Date: 98/04/22 11
			:57:43 $

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/include/sys/stropts.h:
		stropts.h: $Revision: 1.14.105.4 $ $Date: 97/06/26 1
			4:02:06 $

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	/usr/conf/h/stropts.h:
		stropts.h: $Revision: 1.14.105.4 $ $Date: 97/06/26 1
			4:02:06 $

cksum(1) Output:
	
	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP:
	3370203209 616684 /usr/conf/lib/libstream.a

	Streams.STREAMS2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP:
	42033152 1264736 /usr/conf/lib/libstream.a

	Streams.STREAMS-32ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	2144429678 158712 /usr/lib/libnsl_s.a

	Streams.STREAMS-MIN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	1546569899 122880 /usr/lib/libnsl_s.2

	Streams.STREAMS-32ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	2710599972 161196 /usr/lib/libxti.a

	Streams.STREAMS-MIN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	562300237 126976 /usr/lib/libxti.2

	Streams.STREAMS-64ALIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	2975445493 297606 /usr/lib/pa20_64/libxti.a

	Streams.STREAMS-64SLIB,fr=B.11.00,fa=HP-UX_B.11.00_32/64,
		v=HP:
	1907797315 119416 /usr/lib/pa20_64/libxti.2

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	1832411441 32882 /usr/include/sys/stream.h

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	1832411441 32882 /usr/conf/h/stream.h

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	947063964 22961 /usr/include/sys/stropts.h

	Streams.STREAMS-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32/64,v=HP:
	947063964 22961 /usr/conf/h/stropts.h

Patch Conflicts: None

Patch Dependencies:
	s700: 11.00: PHNE_17662
	s800: 11.00: PHNE_17662

Hardware Dependencies: None

Other Dependencies:
	This patch can resolve a race condition and a panic in the
	Terminal I/O subsystem. However, on multiprocessor systems
	it can introduce performance degradation. The performance
	degradation can be slight to severe, depending on the use
	of the system. We recommend that you install the Terminal
	I/O patch PHNE_19616 or a superseding patch together with
	this patch. The performance degradation results from binding
	child processes of "rlogin" and "remsh" to a single CPU.

Supersedes:
	PHNE_14192 PHNE_14706 PHNE_15612 PHNE_16290 PHNE_16732 PHNE_17051
	PHNE_17794 PHNE_17904 PHNE_18075 PHNE_18486 PHNE_18972 PHNE_20008
	PHNE_20316 PHNE_21398 PHNE_21584 PHNE_21676 PHNE_22129 PHNE_22381

Equivalent Patches: None

Patch Package Size: 00 KBytes

Installation Instructions:
	Please review all instructions and the Hewlett-Packard
	SupportLine User Guide or your Hewlett-Packard support terms
	and conditions for precautions, scope of license,
	restrictions, and, limitation of liability and warranties,
	before installing this patch.
	------------------------------------------------------------
	1. Back up your system before installing a patch.

	2. Login as root.

	3. Copy the patch to the /tmp directory.

	4. Move to the /tmp directory and unshar the patch:

		cd /tmp
		sh PHNE_22566

	5. Run swinstall to install the patch:

		swinstall -x autoreboot=true -x patch_match_target=true \
			  -s /tmp/PHNE_22566.depot

	By default swinstall will archive the original software in 
	/var/adm/sw/save/PHNE_22566.  If you do not wish to retain a
	copy of the original software, use the patch_save_files option:

		swinstall -x autoreboot=true -x patch_match_target=true \
			  -x patch_save_files=false -s /tmp/PHNE_22566.depot

	WARNING: If patch_save_files is false when a patch is installed,
		 the patch cannot be deinstalled.  Please be careful
		 when using this feature.

	For future reference, the contents of the PHNE_22566.text file is 
	available in the product readme:

		swlist -l product -a readme -d @ /tmp/PHNE_22566.depot

	To put this patch on a magnetic tape and install from the
	tape drive, use the command:

		dd if=/tmp/PHNE_22566.depot of=/dev/rmt/0m bs=2k

Special Installation Instructions: None

