[OpenAFS-devel] Progress with OpenAFS-1.2.8 on HP-UX 11.22

Douglas E. Engert deengert@anl.gov
Fri, 24 Jan 2003 16:37:21 -0600


More progress on OpenAFS on HP UX 11.22 on Itanium. I now have the readdir 
somewhat working in 32 and 64 bit mode, thanks to a tip from Srikanth Vishwanathan.

But there are still problems. 

I am attaching a diff file for the 1.2.8 source. This file can also be 
found at: ftp://achilles.ctd.anl.gov/pub/DEE/cdiff.hpux1122.20030124
and the source with these changes at: 
ftp://achilles.ctd.anl.gov/pub/DEE/oa128.hp1122.tar

The main changes include:
 
  o Changes to Makefiles and param files for hp_ux1122 as defined by AFS_HPUX1122_ENV 
    and compiler flags and options. Only the STATIC.64 kernel is built. 
    All the non-kernel code is 32 bit. 

  o The code no longer lock on the "VM Empire", as it is not needed

  o Convert the AFS_GLOCK to a beta_semaphore, as alpha_semaphores are
    not supported. 

  o Some spinlock code was replaced, as the SPL6 and SPLX are not supported. 

  o Changes to sleep and wakeup to release and acquire the AFS_GLOCK
    over a sleep. This also uses the HP get_sleep_lock I think it is correct.  
  
  o  The code refers to mpproc_info for updating stats, I #ifdefed these
     out, so I could get it to compile, This needs to be fixed.

  o the VFS afs_readdir, afs_readdir2 and afs_readdir3 need a lot of work!
    It looks like even in 32 bit mode, the dirent entries need to be
    aligned on 8 byte boundaries. (See the use of DIRPAD to define 3 or 7)
    The dirent entries used in the kernel, and the the 32 and 64 bit mods for 
    the user are all different sizes. 
    The code in these three routines is so convoluted I am surprised it
    ever worked! And the comments in the code about the HP with NFS, having stack
    problems, makes it even worse!
    (I am not comfortable with the change I have made, but at least now
     "ls" and "ls -l"  work. but "pwd" does not! 

 o The afsHash was called for HP, but not sure why. I have it commented
   out in one place. Needs to be looked at.

 o I can get a PAG. It appears that if some routines are not defined the
   compiler can generate the wrong code. crdup() was not being defined,
   because HP added a #ifdef for FINE_GRAINED_PROTO_FILES to the cred.h
   There may be other places where this is a problem.
 
 o Some HP hearers indicate kmem_alloc is being replaced by kalloc, so I changes
   these too.
    
 o The mbuf.h and code to use it was still being included even though the 
   code was not being called. 

 o LWP depended on accessing the stack pointer. It is now using the same code
   as the Linux IA64 for the hardware context.

 o df does not show /afs as being mounted. Although during one test boot it did.
   I had been playing around with /etc/mnttab. That might have done it. 
  
 o There are still lots of compiler warning messages.  

Some additional comments.
 
 o I am testing on a uniprocessor, so don't know if the locking is actually 
   working. 

 o I have read some data from AFS, and looked at publicly readable data,
   I have not tried to write to AFS. 

 o I have gotten a ticket, but have not attempted to use it at all. 

 o fs and vos appear to work, but I have not tried very many functions. 

 o You will also need an updated config.guess and config.sub that know as about 
   ia64-hp-hpux11.22 I got it from somewhere, (Its Friday afternoon, my brain is not
   working.) 

  
Carl, Can you look over these changes, and see if the locking looks OK? 
If yoiu can seperate out any 11.i vs 11.22 features that would be good too.

ANy other comments or suggestions are welcome too!


Thanks. 


*** ./,Makefile.in	Tue Sep 10 17:33:24 2002
--- ./Makefile.in	Tue Dec 17 14:34:14 2002
***************
*** 243,249 ****
  
  tviced: project viced vlserver libafsrpc libafsauthent
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun*_5*|rs_aix*|*linux*|hp_ux110) \
  		${COMPILE_PART1} tviced  ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT viced for ${SYS_NAME} ;; \
--- 243,249 ----
  
  tviced: project viced vlserver libafsrpc libafsauthent
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun*_5*|rs_aix*|*linux*|hp_ux11*) \
  		${COMPILE_PART1} tviced  ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT viced for ${SYS_NAME} ;; \
***************
*** 264,270 ****
  
  gtx: project null auth # kauth rxkad ?
  	case ${SYS_NAME} in \
! 	  rs_aix* | sun4x_5? | sgi_6? | *linux* | ppc_darwin* | *fbsd*) \
  		$(RM) -f ${TOP_LIBDIR}/libtermlib.a; \
  		ln -s libnull.a ${TOP_LIBDIR}/libtermlib.a; \
  		${COMPILE_PART1} gtx ${COMPILE_PART2};; \
--- 264,270 ----
  
  gtx: project null auth # kauth rxkad ?
  	case ${SYS_NAME} in \
! 	  rs_aix* | sun4x_5? | sgi_6? | *linux* | ppc_darwin* | *fbsd* | hp_ux1122) \
  		$(RM) -f ${TOP_LIBDIR}/libtermlib.a; \
  		ln -s libnull.a ${TOP_LIBDIR}/libtermlib.a; \
  		${COMPILE_PART1} gtx ${COMPILE_PART2};; \
***************
*** 414,420 ****
  
  tbutc: project bubasics butm budb bucoord cmd butc
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix4*|*linux*|hp_ux110) \
  		${COMPILE_PART1} tbutc ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT butc for ${SYS_NAME} ;; \
--- 414,420 ----
  
  tbutc: project bubasics butm budb bucoord cmd butc
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix4*|*linux*|hp_ux11*) \
  		${COMPILE_PART1} tbutc ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT butc for ${SYS_NAME} ;; \
***************
*** 437,443 ****
  # pthread based user space RX library
  libafsrpc: rx rxkad des
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110|*fbsd*) \
  	${COMPILE_PART1} libafsrpc  ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT libafsrpc for ${SYS_NAME} ;; \
--- 437,443 ----
  # pthread based user space RX library
  libafsrpc: rx rxkad des
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux11*|*fbsd*) \
  	${COMPILE_PART1} libafsrpc  ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT libafsrpc for ${SYS_NAME} ;; \
***************
*** 445,451 ****
  
  libafsauthent: ubik auth kauth libafsrpc
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110|*fbsd*) \
  	${COMPILE_PART1} libafsauthent  ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT libafsrpc for ${SYS_NAME} ;; \
--- 445,451 ----
  
  libafsauthent: ubik auth kauth libafsrpc
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux11*|*fbsd*) \
  	${COMPILE_PART1} libafsauthent  ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building MT libafsrpc for ${SYS_NAME} ;; \
***************
*** 453,459 ****
  
  shlibafsrpc: rx rxkad des
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|sunx86_*|rs_aix*|*linux*|hp_ux110) \
  	${COMPILE_PART1} shlibafsrpc ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building shared libafsrpc for ${SYS_NAME} ;; \
--- 453,459 ----
  
  shlibafsrpc: rx rxkad des
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|sunx86_*|rs_aix*|*linux*|hp_ux11*) \
  	${COMPILE_PART1} shlibafsrpc ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building shared libafsrpc for ${SYS_NAME} ;; \
***************
*** 461,467 ****
  
  shlibafsauthent: ubik auth kauth shlibafsrpc
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|sunx86_*|rs_aix*|*linux*|hp_ux110) \
  	${COMPILE_PART1} shlibafsauthent ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building shared libafsrpc for ${SYS_NAME} ;; \
--- 461,467 ----
  
  shlibafsauthent: ubik auth kauth shlibafsrpc
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|sunx86_*|rs_aix*|*linux*|hp_ux11*) \
  	${COMPILE_PART1} shlibafsauthent ${COMPILE_PART2} ;; \
  	*) \
  		echo Not building shared libafsrpc for ${SYS_NAME} ;; \
***************
*** 481,487 ****
  
  libadmin: libafsauthent bozo
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110) \
  			$(MAKE) libadmin_real ;; \
  	*) \
  		echo Not building MT libadmin for ${SYS_NAME} ;; \
--- 481,487 ----
  
  libadmin: libafsauthent bozo
  	case ${SYS_NAME} in \
! 	alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux11*) \
  			$(MAKE) libadmin_real ;; \
  	*) \
  		echo Not building MT libadmin for ${SYS_NAME} ;; \
*** ./src/afs/,sysincludes.h	Thu Nov 14 14:20:39 2002
--- ./src/afs/sysincludes.h	Tue Dec 17 13:33:30 2002
***************
*** 219,224 ****
--- 219,227 ----
  struct vfspage;			/* for vnode.h compiler warnings */
  #    include "../h/swap.h"	/* for struct swpdbd, for vnode.h compiler warnings */
  #    include "../h/dbd.h"	/* for union idbd, for vnode.h compiler warnings */
+ #ifdef AFS_HPUX1122_ENV
+ #    include "h/resource.h"
+ #endif
  #  endif /* AFS_HPUX_ENV */
  #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD40_ENV)
  #  include <sys/uio.h>
***************
*** 270,276 ****
--- 273,281 ----
  #ifdef	AFS_SUN5_ENV
  #  include "../h/time.h"
  #else
+ #if !defined(AFS_HPUX_ENV)
  #  include "../h/mbuf.h"
+ #endif
  #endif /* AFS_SUN5_ENV */
  
  #include "../rpc/types.h"
*** ./src/afs/HPUX/,osi_vnodeops.c	Thu Nov 14 14:08:34 2002
--- ./src/afs/HPUX/osi_vnodeops.c	Fri Jan 24 09:59:34 2003
***************
*** 49,55 ****
--- 49,66 ----
  
  #define vtoblksz(vp)	((vp)->v_vfsp->vfs_bsize)
  
+ #if defined(AFS_HPUX1122_ENV)
+ /* We no longer need to lock on the VM Empire,
+  * or at least that is what is claimed. 
+  * so we will noopt the vmemp_ routines
+  * This needs to be looked at closer. DEE
+  */
+ #define vmemp_lockx()
+ #define vmemp_returnx(a)
+ #define vmemp_unlockx()
+ #endif
  
+ #if !defined(AFS_HPUX1122_ENV)
  /*
   * Copy an mbuf to the contiguous area pointed to by cp.
   * Skip <off> bytes and copy <len> bytes.
***************
*** 92,97 ****
--- 103,109 ----
  
  	return (len);
  }
+ #endif
  
  /* 
   *  Note that the standard Sun vnode interface doesn't haven't an vop_lockf(), so this
code is
***************
*** 160,166 ****
--- 172,182 ----
  }
  
  
+ #if defined(AFS_HPUX1122_ENV)
+ #include "machine/vm/vmparam.h"
+ #else
  #include "../machine/vmparam.h"	/* For KERNELSPACE */
+ #endif
  #include "../h/debug.h"
  #include "../h/types.h"
  #include "../h/param.h"
***************
*** 1262,1268 ****
--- 1278,1287 ----
      if (change_to_fstore)
         afspgin_update_dbd(vm_info, bsize);
      
+ #if !defined(AFS_HPUX1122_ENV)
+ /*DEE needs to be fixed */
      mpproc_info[getprocindex()].cnt.v_exfod += count;
+ #endif
      vmemp_unlockx();      /* free up VM empire */
      *ret_startindex = startindex;
      
***************
*** 1628,1633 ****
--- 1647,1654 ----
  	/*
  	 * Update statistics
  	 */
+ #if !defined(AFS_HPUX1122_ENV)
+ /*DEE many changes on 11.22 needs to be looked at */
  	if (steal) {
  	    if (flags & PF_DEACT) {
  		mpproc_info[getprocindex()].cnt.v_pswpout += npages;
***************
*** 1638,1643 ****
--- 1659,1665 ----
  		mpproc_info[getprocindex()].cnt.v_pgpgout += npages;
  	    }
  	}
+ #endif
  
  	/*
  	 * If time and patience have delivered enough
***************
*** 1984,1992 ****
--- 2006,2024 ----
  	return(ENOTTY);
  }
  
+ #if defined(AFS_HPUX1122_ENV)
+ /* looks like even if appl is 32 bit, we need to round to 8 bytes */
+ /* DEE This had no effect, it must not be being used */
+ 
+ #define roundtoint(x)   (((x) + (sizeof(long) - 1)) & ~(sizeof(long) - 1))
+ #define reclen(dp)      roundtoint(((dp)->d_namlen + 1 + (sizeof(u_long)) +\
+                                 sizeof(u_int) + 2 * sizeof(u_short)))
+ #else
+ 
  #define roundtoint(x)   (((x) + (sizeof(int) - 1)) & ~(sizeof(int) - 1))
  #define reclen(dp)      roundtoint(((dp)->d_namlen + 1 + (sizeof(u_long)) +\
                                  2 * sizeof(u_short)))
+ #endif
  
  int
  afs_readdir(vp, uiop, cred)
*** ./src/afs/HPUX/,osi_machdep.h	Tue Nov 26 17:40:38 2002
--- ./src/afs/HPUX/osi_machdep.h	Tue Jan 21 16:54:02 2003
***************
*** 49,58 ****
--- 49,63 ----
   * HP uses global mutex to protect afs land
   */
  
+ #if !defined(AFS_HPUX1122_ENV)
  extern sema_t afs_global_sema;
+ #else
+ extern b_sema_t afs_global_sema;
+ #endif
  
  extern void osi_InitGlock(void);
  
+ #if !defined(AFS_HPUX1122_ENV)
  extern void       afsHash(int nbuckets);
  extern sv_sema_t *afsHashInsertFind(tid_t key);
  extern sv_sema_t *afsHashFind(tid_t key);
***************
*** 61,71 ****
  #define AFS_GLOCK_PID   kt_tid(u.u_kthreadp)
  #define AFS_SAVE_SEMA   afsHashInsertFind(AFS_GLOCK_PID)
  #define AFS_FIND_SEMA   afsHashFind(AFS_GLOCK_PID)
  #define AFS_GLOCK()     MP_PXSEMA(&afs_global_sema, AFS_SAVE_SEMA)
  #define AFS_GUNLOCK()   (AFS_ASSERT_GLOCK(), MP_VXSEMA(&afs_global_sema,AFS_FIND_SEMA),
(!uniprocessor ? (afsHashRelease(AFS_GLOCK_PID),0) : 0))
  #define ISAFS_GLOCK()   (!uniprocessor ? owns_sema(&afs_global_sema):1)
  
! #define AFS_RXGLOCK() 
  #define AFS_RXGUNLOCK()
  #define ISAFS_RXGLOCK() 1
  
--- 66,84 ----
  #define AFS_GLOCK_PID   kt_tid(u.u_kthreadp)
  #define AFS_SAVE_SEMA   afsHashInsertFind(AFS_GLOCK_PID)
  #define AFS_FIND_SEMA   afsHashFind(AFS_GLOCK_PID)
+ 
  #define AFS_GLOCK()     MP_PXSEMA(&afs_global_sema, AFS_SAVE_SEMA)
  #define AFS_GUNLOCK()   (AFS_ASSERT_GLOCK(), MP_VXSEMA(&afs_global_sema,AFS_FIND_SEMA),
(!uniprocessor ? (afsHashRelease(AFS_GLOCK_PID),0) : 0))
  #define ISAFS_GLOCK()   (!uniprocessor ? owns_sema(&afs_global_sema):1)
  
! #else
! #define AFS_GLOCK()  b_psema(&afs_global_sema) 
! #define AFS_GUNLOCK() b_vsema(&afs_global_sema)
! #define ISAFS_GLOCK() b_owns_sema(&afs_global_sema)
! 
! #endif
! 
! #define AFS_RXGLOCK()
  #define AFS_RXGUNLOCK()
  #define ISAFS_RXGLOCK() 1
  
***************
*** 75,80 ****
--- 88,94 ----
  #define USERPRI     NET_SPLX(splvar)
  #endif /* KERNEL */
  
+ #if !defined(AFS_HPUX1122_ENV)
  /* 
   * On HP, the global lock is an alpha semaphore, hence it is automatically
   * released and reacquired aroubd a sleep() and wakeup().
***************
*** 82,94 ****
--- 96,130 ----
  
  #define	afs_osi_Sleep(x)	sleep((caddr_t) x,PZERO-2)
  #define	afs_osi_Wakeup(x)	wakeup((caddr_t) x)
+ #else
+ /*
+  *DEE On 11.22 global lock is a beta semaphore, hence we nned to
+  * release and reacquire around sllep and wakeup. We also need to
+  * use the get_sleep_lock.
+  * afs_osi_Sleep and afs_osi_Wakeup are defined
+  */
+ void afs_osi_Sleep(char *event);
+ void afs_osi_Wakeup(char *event);
+ #endif
+ 
  #define	osi_NullHandle(x)	((x)->proc == (caddr_t) 0)
  
+ #if !defined(AFS_HPUX1122_ENV)
  extern caddr_t kmem_alloc();
+ #else
+ #undef kmem_alloc
+ #undef kmem_free
+ #define kmem_alloc(a) kmalloc(a, M_IHV, M_WAITOK)
+ #define kmem_free(a,b)  kfree(a, M_IHV)
+ #endif
  #include <sys/kthread_iface.h>	/* for kt_cred() */
  
  /* Expected to be available as a patch from HP */
  /* See section D of the top level README for details */
+ #if defined(AFS_HPUX1122_ENV)
+ #include <sys/vfs_vm.h>
+ #else
  #include <vfs_vm.h>
+ #endif
  
  #endif /* _OSI_MACHDEP_H_ */
*** ./src/afs/HPUX/,osi_vfsops.c	Tue Apr 23 20:41:30 2002
--- ./src/afs/HPUX/osi_vfsops.c	Wed Jan  8 14:52:58 2003
***************
*** 182,187 ****
--- 182,188 ----
  static int afs_Starting = 0;
  
  #pragma align 64
+ #if !defined(AFS_HPUX1122_ENV)
  sema_t afs_global_sema = {
     NULL, 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, /* sa_type */
     0, 0, 0, 0, 0, 0, 0, NULL, /* sa_link */
***************
*** 190,195 ****
--- 191,199 ----
     , 0, 0, 0, NULL
  #endif
    };
+ #else
+ b_sema_t afs_global_sema = {0}; 
+ #endif
  
  void
  osi_InitGlock()
***************
*** 200,207 ****
      if ( !afs_Starting ) {
  	afs_Starting = 1;
  	SPINUNLOCK_USAV(sched_lock, context);
! 	initsema(&afs_global_sema, 1, FILESYS_SEMA_PRI, FILESYS_SEMA_ORDER);
!         afsHash(64);	/* 64 buckets */
      } else {
  	SPINUNLOCK_USAV(sched_lock, context);
      }
--- 204,211 ----
      if ( !afs_Starting ) {
  	afs_Starting = 1;
  	SPINUNLOCK_USAV(sched_lock, context);
! 	b_initsema(&afs_global_sema, 1,  NFS_LOCK_ORDER2, "AFS GLOCK");
!         /* afsHash(64); */	/* 64 buckets */
      } else {
  	SPINUNLOCK_USAV(sched_lock, context);
      }
*** ./src/afs/HPUX/,osi_groups.c	Thu Jan  9 10:24:17 2003
--- ./src/afs/HPUX/osi_groups.c	Mon Jan 20 15:09:16 2003
***************
*** 133,141 ****
--- 133,146 ----
      int *gp;
      struct ucred *newcr;
      ulong_t s;
+ #if defined(AFS_HPUX1122_ENV)
+ 	register ulong_t context;
+ #endif
  
      AFS_STATCNT(afs_setgroups);
      
+ #if 1
+ /*DEE SKIP THIS FOR NOW! */
      if (!change_parent)
  	{
  	    newcr = (struct ucred *)crdup(*cred);
***************
*** 147,156 ****
--- 152,168 ----
  	    /* somebody else might have a pointer to this structure.
  	     ** make sure we do not have a race condition */
  	    newcr = *cred;
+ #if defined(AFS_HPUX1122_ENV)
+ 		/*DEE all of the uniprocessor spinlocks are not defined. */
+ 		/* I assume the UP and MP are now handled together */
+ 		MP_SPINLOCK_USAV(cred_lock, context);
+ #else
  	    s = UP_SPL6();
  	    SPINLOCK(cred_lock);
+ #endif
  	}
      
+  
      /* copy the group info */
      gp = newcr->cr_groups;
      while (ngroups--)
***************
*** 157,163 ****
  	*gp++ = *gidset++;
      for ( ; gp < &(newcr)->cr_groups[NGROUPS]; gp++)
  	*gp = ((gid_t) -1);
!     
      if ( !change_parent)
  	{
  	    /* replace the new cred structure in the proc area */
--- 169,175 ----
  	*gp++ = *gidset++;
      for ( ; gp < &(newcr)->cr_groups[NGROUPS]; gp++)
  	*gp = ((gid_t) -1);
!  
      if ( !change_parent)
  	{
  	    /* replace the new cred structure in the proc area */
***************
*** 168,175 ****
--- 180,193 ----
  	}
      else
  	{
+ #if defined(AFS_HPUX1122_ENV)
+ 		MP_SPINUNLOCK_USAV(cred_lock, context);
+ #else
  	    (void) UP_SPLX(s);
  	    SPINUNLOCK(cred_lock);
+ #endif
  	}
+ 
+ #endif
      return (setuerror(0), 0);
  }
*** ./src/afs/HPUX/,osi_sleep.c	Thu Jul 12 14:58:20 2001
--- ./src/afs/HPUX/osi_sleep.c	Tue Jan 21 10:10:11 2003
***************
*** 16,24 ****
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
  #include "../afs/afs_stats.h"   /* afs statistics */
  
  
  
- 
  static char waitV;
  
  /* call procedure aproc with arock as an argument, in ams milliseconds */
--- 16,27 ----
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
  #include "../afs/afs_stats.h"   /* afs statistics */
  
+ #if defined(AFS_HPUX1122_ENV)
+ void afs_osi_Wakeup(char *event);
+ void afs_osi_Sleep(char *event);
+ #endif
  
  
  static char waitV;
  
  /* call procedure aproc with arock as an argument, in ams milliseconds */
***************
*** 106,108 ****
--- 109,196 ----
      } while (osi_Time() < endTime);
      return code;
  }
+ 
+ #if defined(AFS_HPUX1122_ENV)
+ 
+ /* on HP 11.22 we are using beta semiphore for AFS_GLOCK */
+ 
+ typedef struct afs_event {
+     struct afs_event *next;     /* next in hash chain */
+     char *event;                /* lwp event: an address */
+     int refcount;               /* Is it in use? */
+     int seq;                    /* Sequence number: this is incremented
+                                    by wakeup calls; wait will not return until
+                                    it changes */
+ } afs_event_t;
+ 
+ #define HASHSIZE 128
+ afs_event_t *afs_evhasht[HASHSIZE];/* Hash table for events */
+ #define afs_evhash(event)       (afs_uint32) ((((long)event)>>2) & (HASHSIZE-1));
+ int afs_evhashcnt = 0;
+ 
+ /* Get and initialize event structure corresponding to lwp event (i.e. address)
+  * */
+ static afs_event_t *afs_getevent(char *event)
+ {
+     afs_event_t *evp, *newp = 0;
+     int hashcode;
+ 
+     AFS_ASSERT_GLOCK();
+     hashcode = afs_evhash(event);
+     evp = afs_evhasht[hashcode];
+     while (evp) {
+         if (evp->event == event) {
+             evp->refcount++;
+             return evp;
+         }
+         if (evp->refcount == 0)
+             newp = evp;
+         evp = evp->next;
+     }
+     if (!newp) {
+         newp = (afs_event_t *) osi_AllocSmallSpace(sizeof (afs_event_t));
+         afs_evhashcnt++;
+         newp->next = afs_evhasht[hashcode];
+         afs_evhasht[hashcode] = newp;
+         newp->seq = 0;
+     }
+     newp->event = event;
+     newp->refcount = 1;
+     return newp;
+ }
+ 
+ 
+ /* Release the specified event */
+ #define relevent(evp) ((evp)->refcount--)
+ 
+ void afs_osi_Sleep(char *event)
+ {
+     struct afs_event *evp;
+     int seq;
+ 
+     evp = afs_getevent(event);
+     seq = evp->seq;
+     while (seq == evp->seq) {
+         AFS_ASSERT_GLOCK();
+ 	get_sleep_lock(event);
+         AFS_GUNLOCK();
+         sleep(event, PZERO-2);
+         AFS_GLOCK();
+     }
+     relevent(evp);
+ }
+ 
+ void afs_osi_Wakeup(char *event)
+ {
+     struct afs_event *evp;
+     lock_t * sleep_lock;
+ 
+     evp = afs_getevent(event);
+     sleep_lock = get_sleep_lock(event);
+     if (evp->refcount > 1) {
+         evp->seq++;
+         wakeup(event);
+     }
+     spinunlock(sleep_lock);
+ }
+ #endif
*** ./src/afs/VNOPS/,afs_vnop_readdir.c	Fri Nov 22 13:14:53 2002
--- ./src/afs/VNOPS/afs_vnop_readdir.c	Fri Jan 24 14:18:17 2003
***************
*** 32,37 ****
--- 32,42 ----
  #include "../afs/afs_osidnlc.h"
  
  
+ #if	defined(AFS_HPUX1122_ENV)
+ #define DIRPAD 7
+ #else
+ #define DIRPAD 3
+ #endif
  /**
   * A few definitions. This is until we have a proper header file
   * which ahs prototypes for all functions
***************
*** 172,178 ****
      u_short	d_reclen;
      u_short	d_namlen;
  };
! #define NDIRSIZ_LEN(len)   ((sizeof (struct dirent)+4 - (MAXNAMLEN+1)) + (((len)+1 + 3) &~
3))
  #endif
  #endif /* !defined(UKERNEL) */
  
--- 177,183 ----
      u_short	d_reclen;
      u_short	d_namlen;
  };
! #define NDIRSIZ_LEN(len)   ((sizeof (struct dirent)+4 - (MAXNAMLEN+1)) + (((len)+1 +
DIRPAD) &~ DIRPAD))
  #endif
  #endif /* !defined(UKERNEL) */
  
***************
*** 198,206 ****
   *
   *
  */
  #if	defined(AFS_HPUX100_ENV)
  #define DIRSIZ_LEN(len) \
!     ((sizeof (struct __dirent) - (_MAXNAMLEN+1)) + (((len)+1 + 3) &~ 3))
  #else
  #if	defined(AFS_SUN56_ENV)
  #define DIRSIZ_LEN(len) ((18 + (len) + 1 + 7) & ~7 )
--- 203,212 ----
   *
   *
  */
+ 
  #if	defined(AFS_HPUX100_ENV)
  #define DIRSIZ_LEN(len) \
!     ((sizeof (struct __dirent) - (_MAXNAMLEN+1)) + (((len)+1 + DIRPAD) &~ DIRPAD))
  #else
  #if	defined(AFS_SUN56_ENV)
  #define DIRSIZ_LEN(len) ((18 + (len) + 1 + 7) & ~7 )
***************
*** 406,412 ****
  
      /* pad out the remaining characters with zeros */
      if (code == 0) { 
! 	AFS_UIOMOVE(bufofzeros, ((slen + 4) & ~3) - slen, UIO_READ,
  		    auio, code);
      }
      AFS_MOVE_LOCK();
--- 412,418 ----
  
      /* pad out the remaining characters with zeros */
      if (code == 0) { 
! 	AFS_UIOMOVE(bufofzeros, ((slen + 1 + DIRPAD) & ~DIRPAD) - slen, UIO_READ,
  		    auio, code);
      }
      AFS_MOVE_LOCK();
***************
*** 620,626 ****
  		    AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen, UIO_READ, auio, code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (DIRSIZ_LEN(o_slen) < rlen) {
--- 626,632 ----
  		    AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen, UIO_READ, auio,
code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (DIRSIZ_LEN(o_slen) < rlen) {
***************
*** 683,689 ****
  		    AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen, UIO_READ, auio, code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (DIRSIZ_LEN(o_slen) < rlen) {
--- 689,695 ----
  		    AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen, UIO_READ, auio,
code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (DIRSIZ_LEN(o_slen) < rlen) {
***************
*** 734,740 ****
  		AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  	    /* pad out the remaining characters with zeros */
  	    if (code == 0) {
! 		AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen,
  			    UIO_READ, auio, code);
  	    }
  	    /* pad out the difference between rlen and slen... */
--- 740,746 ----
  		AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  	    /* pad out the remaining characters with zeros */
  	    if (code == 0) {
! 		AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen,
  			    UIO_READ, auio, code);
  	    }
  	    /* pad out the difference between rlen and slen... */
***************
*** 882,888 ****
  		}
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen, UIO_READ, auio, code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (NDIRSIZ_LEN(o_slen) < rlen) {
--- 888,894 ----
  		}
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen, UIO_READ, auio,
code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (NDIRSIZ_LEN(o_slen) < rlen) {
***************
*** 931,937 ****
  		    AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen, UIO_READ, auio, code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (NDIRSIZ_LEN(o_slen) < rlen) {
--- 937,943 ----
  		    AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  		/* pad out the remaining characters with zeros */
  		if (code == 0) {
! 		    AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen, UIO_READ, auio,
code);
  		}
  		/* pad out the difference between rlen and slen... */
  		if (NDIRSIZ_LEN(o_slen) < rlen) {
***************
*** 977,983 ****
  		AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  	    /* pad out the remaining characters with zeros */
  	    if (code == 0) {
! 		AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen, UIO_READ, auio, code);
  	    }
  	    /* pad out the difference between rlen and slen... */
  	    if (NDIRSIZ_LEN(o_slen) < rlen) {
--- 983,989 ----
  		AFS_UIOMOVE(ode->name, o_slen, UIO_READ, auio, code);
  	    /* pad out the remaining characters with zeros */
  	    if (code == 0) {
! 		AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen, UIO_READ, auio,
code);
  	    }
  	    /* pad out the difference between rlen and slen... */
  	    if (NDIRSIZ_LEN(o_slen) < rlen) {
*** ./src/afs/,afs_util.c	Thu Nov 14 15:03:57 2002
--- ./src/afs/afs_util.c	Tue Dec 17 17:09:06 2002
***************
*** 119,125 ****
--- 119,129 ----
  
  afs_warn(a,b,c,d,e,f,g,h,i,j)
  char *a;
+ #if defined( AFS_USE_VOID_PTR)
+ void *b, *c, *d, *e, *f, *g, *h, *i, *j;
+ #else
  long b,c,d,e,f,g,h,i,j;
+ #endif
  {
      AFS_STATCNT(afs_warn);
      
***************
*** 148,154 ****
--- 152,162 ----
  
  afs_warnuser(a,b,c,d,e,f,g,h,i,j)
  char *a;
+ #if defined( AFS_USE_VOID_PTR)
+ void *b, *c, *d, *e, *f, *g, *h, *i, *j;
+ #else
  long b,c,d,e,f,g,h,i,j;
+ #endif
  {
      AFS_STATCNT(afs_warnuser);
      if (afs_showflags & GAGUSER)
*** ./src/afs/,afs_osi.c	Tue Sep 10 17:33:27 2002
--- ./src/afs/afs_osi.c	Tue Jan  7 10:58:14 2003
***************
*** 402,407 ****
--- 402,411 ----
  #endif
  #ifdef AFS_HPUX_ENV
      {
+ #if !defined(AFS_HPUX1122_ENV)
+ /*DEE drop the setting of the clock for now. spl7 is not
+  * known on hpux11.22
+  */
      register ulong_t s;
      struct timeval t;
      t.tv_sec = atv->tv_sec;
***************
*** 408,413 ****
--- 412,418 ----
      t.tv_usec = atv->tv_usec;
      s = spl7(); time = t; (void) splx(s);
      resettodr(atv);
+ #endif
      }
  #else
      {
*** ./src/afsd/,Makefile.in	Fri Oct 12 23:20:44 2001
--- ./src/afsd/Makefile.in	Wed Dec 18 13:38:12 2002
***************
*** 112,117 ****
--- 112,120 ----
  		hp_ux10? | hp_ux11? ) \
  			${INSTALL} -f afs.rc.hpux10 ${DEST}/root.client/usr/vice/etc/dkload/afs.rc ;\
  			${INSTALL} -f afs.hpux102.driver ${DEST}/root.client/usr/vice/etc/afs.driver ;;\
+ 		hp_ux1122 ) \
+ 			${INSTALL} -f afs.rc.hpux10 ${DEST}/root.client/usr/vice/etc/dkload/afs.rc ;\
+ 			${INSTALL} -f afs.hpux1122.driver ${DEST}/root.client/usr/vice/etc/afs.driver ;;\
  		alpha_dux* ) \
  			${INSTALL} -f afs.rc.alpha_dux40 ${DEST}/root.client/usr/vice/etc/dkload/afs.rc ;;\
                  hp?00_ux10? ) \
*** ./src/afsd/,afs.hpux1122.driver	Wed Dec 18 13:42:48 2002
--- ./src/afsd/afs.hpux1122.driver	Wed Dec 18 13:43:29 2002
***************
*** 0 ****
--- 1,126 ----
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ * 
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
+ 
+ *
+ * $Revision: 1.2 $
+ *
+ * The following devices are those that can be specified in the system
+ * description file.  The name specified must agree with the name shown,
+ * or with an alias.
+ *
+ * name          handle          type    mask    block   char
+ *
+ $DEVICE
+ afs             afsc            10      100       -1      -1
+ ** Reserved for Third Party and User Drivers.
+ *               ---             -       -       -1      38
+ *               ---             -       -       -1      39
+ *               ---             -       -       -1      40
+ *               ---             -       -       -1      41
+ *               ---             -       -       -1      42
+ *               ---             -       -       -1      43
+ *               ---             -       -       8       -1
+ *               ---             -       -       15      -1
+ *               ---             -       -       16      -1
+ *               ---             -       -       17      -1
+ *               ---             -       -       18      -1
+ $$$
+ 
+ $CDIO
+ *
+ * The following entries form the cdio table.
+ * field 1: cdio name
+ * field 2: required, optional
+ *
+ $$$
+ 
+ $DRIVER_INSTALL
+ ***************************************************************************
+ * Driver install table
+ *
+ * This table contains the name of drivers which have converged I/O header
+ * structures and install entry points.  Drivers in this table should not
+ * be defined in the driver table above.
+ ***************************************************************************
+ * Driver     Block major     Char major
+ $$$
+ 
+ $ALIAS
+ *
+ * The following entries form the alias table.
+ * field 1: product #    field 2: driver name
+ *
+ $$$
+ 
+ $TUNABLE
+ *
+ * The following entries form the tunable parameter table.  Any of these
+ * values can be overwritten in the dfile.  However, before changing any
+ * value, know the ramifications of your change.
+ *
+ $$$
+ 
+ $DRIVER_DEPENDENCY
+ *
+ * Driver dependency table, if one driver is present, what
+ * other drivers should also be in the dfile.
+ * NOTE: A maximum of 6 dependency entries my follow the driver name.
+ * NOTE: This mechanism does not support chaining.  In other words, if
+ *       a driver is included as a dependency, that driver will not be
+ *       checked for its dependencies.
+ *
+ * Driver name   <dependency>  <dependency> .....
+ *
+ $$$
+ 
+ $DRIVER_LIBRARY
+ *
+ * The driver/library table.  This table defines which libraries a given
+ * driver depends on.  If the driver is included in the dfile, then the
+ * libraries that driver depends on will be included on the ld(1) command
+ * line.  Only optional libraries *need* to be specified in this table,
+ * (but required ones can be included, as well).
+ *
+ * Driver handle    <libraries>
+ *
+ * subsystems first 
+ afs             libafs64.nonfs.a
+ $$$
+ 
+ $LIBRARY
+ *
+ * The library table.  Each element in the library table describes
+ * one unique library.  The flag member is a boolean value, it is
+ * initialized to 1 if the library should *always* be included on
+ * the ld(1) command line, or 0 if the library is optional (i.e. it
+ * is only included when one or more drivers require it).  The order
+ * of the library table determines the order of the libraries on the
+ * ld(1) command line, (i.e. defines an implicit load order).  New
+ * libraries must be added to this table.
+ * Note: libhp-ux.a must be the last entry, do not place anything after it.
+ *
+ * Library   <required>
+ *
+ libafs64.nonfs.a        0
+ $$$
+ 
+ $SUBSYSTEMS_DEFINE
+ * Subsystem #define table.  For any subsystem that is found in the dfile
+ * and appears below, a #define is generated in the conf.c file.  This
+ * is used to include any space defined in space.h.
+ afs
+ $$$
+ 
+ $DRIVER_PRODUCT
+ * 
+ * Driver product table.  The following generates a table of supported products
+ * for a given interface card.  The input is a driver handle followed by a list
+ * of product/vendor id's. What is produced is a table of these product/vendor
+ * id's to be used by the interface driver for further qualification during
+ * booting and the setting of root device location.
+ *
+ $$$
*** ./src/config/,afs_sysnames.h	Tue Sep 10 17:33:45 2002
--- ./src/config/afs_sysnames.h	Tue Dec 17 13:49:07 2002
***************
*** 43,48 ****
--- 43,50 ----
  #define SYS_NAME_ID_hp800_ux101	 	 413
  #define SYS_NAME_ID_hp_ux102	 	 414
  #define SYS_NAME_ID_hp_ux110	 	 415
+ /* Assume hp_ux11i is 416 */
+ #define SYS_NAME_ID_hp_ux1122      417
  
  #define SYS_NAME_ID_mac2_51		 500	
  #define SYS_NAME_ID_mac_aux10		 501
*** ./src/config/,Makefile.hp_ux1122.in	Tue Dec 17 13:42:13 2002
--- ./src/config/Makefile.hp_ux1122.in	Tue Dec 17 13:47:47 2002
***************
*** 0 ****
--- 1,37 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ AFS_OSTYPE = HPUX
+ CC=/opt/ansic/bin/cc
+ MT_CC=/opt/ansic/bin/cc
+ XCFLAGS0=-ldld -lc -Wp,-H200000 -Wl,-a,archive_shared -DAUTH_DBM_LOG +z -Wl,+k
-D_LARGEFILE64_SOURCE
+ XCFLAGS=${XCFLAGS0} 
+ XCFLAGS64=${XCFLAGS0} +DD64
+ MT_CFLAGS=-D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV ${XCFLAGS}
+ XLIBS=@LIB_AFSDB@
+ XLIBELFA=-lelf
+ TXLIBS=/usr/lib/hpux32/libcurses.so
+ MTLIBS=-lpthread
+ SHLIB_SUFFIX=sl
+ SHLIB_LDFLAGS=-b -Bsymbolic
+ SHLIB_LINKER=ld -b
+ LWP_OPTMZ=-O
+ OPTMZ=-O
+ DBG=-g
+ RANLIB=/usr/bin/ranlib
+ INSTALL=${TOP_SRCDIR}/pinstall/pinstall
+ RM=/bin/rm
+ CP=/bin/cp
+ AR=/bin/ar
+ AS=/usr/ccs/bin/as
+ MV=/bin/mv
+ LD=/bin/ld   
+ LEX=/opt/langtools/bin/lex
+ DBM=/lib/hpux32/libndbm.so
+ PAM_CFLAGS="-b +z -Wl,+k"
+ PAMLIBS=/usr/lib/hpux32/libpam.so
+ YACC=/opt/langtools/bin/yacc
*** ./src/config/,param.hp_ux1122.h	Tue Dec 17 13:49:42 2002
--- ./src/config/param.hp_ux1122.h	Tue Dec 17 17:07:53 2002
***************
*** 0 ****
--- 1,101 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ /* THIS FILE IS AUTOMATICALLY GENERATED; DO NOT EDIT */
+ 
+ #ifndef	AFS_PARAM_H
+ #define	AFS_PARAM_H
+ 
+ #define AFS_HPUX_ENV	1
+ #define	AFS_HPUX90_ENV	1
+ #define	AFS_HPUX100_ENV	1
+ #define	AFS_HPUX101_ENV	1
+ #define	AFS_HPUX102_ENV	1
+ #define	AFS_HPUX110_ENV	1
+ #define AFS_HPUX1122_ENV 1
+ 
+ #define AFS_64BIT_ENV		1       /* Defines afs_int32 as int, not long. */
+ #if defined(__LP64__)
+ #define AFS_64BITPOINTER_ENV	1	/* pointers are 64 bits. */
+ #endif
+ 
+ #include <afs/afs_sysnames.h>
+ 
+ #define AFS_SYSCALL	48 /* slot reserved for AFS */
+ 
+ /* Machine / Operating system information */
+ #define SYS_NAME	"hp_ux1122"
+ #define SYS_NAME_ID	SYS_NAME_ID_hp_ux1122
+ #define AFSBIG_ENDIAN	1
+ #define AFS_HAVE_FFS    1
+ #define AFS_HAVE_STATVFS 1	/* System supports statvfs */
+ #define AFS_GLOBAL_SUNLOCK 1
+ #define RXK_LISTENER_ENV   1
+ #define AFS_USERSPACE_IP_ADDR 1
+ #define AFS_GCPAGS		0       /* if nonzero, garbage collect PAGs */
+ #define AFS_USE_VOID_PTR 1
+ /*
+  * #define AFS_VM_RDWR_ENV	1
+  */
+ #define AFS_TEXT_ENV	1	/* Older kernels use TEXT */
+ #define AFS_USE_GETTIMEOFDAY 1  /* use gettimeofday to implement rx clock */
+ #define NEARINODE_HINT  1   /* hint to ufs module to scatter inodes on disk*/
+ #define nearInodeHash(volid, hval) {                                 \
+                 unsigned char*  ts = (unsigned char*)&(volid)+sizeof(volid)-1;\
+                 for ( (hval)=0; ts >= (unsigned char*)&(volid); ts--){\
+                     (hval) *= 173;                      \
+                     (hval) += *ts;                      \
+                 }                                       \
+                 }
+ 
+ /* Extra kernel definitions (from kdefs file) */
+ #ifdef KERNEL
+ #define _KERNEL 1
+ #define	afsio_iov	uio_iov
+ #define	afsio_iovcnt	uio_iovcnt
+ #define	afsio_offset	uio_offset
+ #define	afsio_seg	uio_seg
+ #define	afsio_resid	uio_resid
+ #define	AFS_UIOSYS	UIOSEG_KERNEL
+ #define	AFS_UIOUSER	UIOSEG_USER
+ #define	AFS_CLBYTES	CLBYTES
+ #define	AFS_MINCHANGE	2
+ #define	osi_GetTime(x)	do { struct timeval osi_GetTimeVar; uniqtime(&osi_GetTimeVar);
(x)->tv_sec = osi_GetTimeVar.tv_sec; (x)->tv_usec = osi_GetTimeVar.tv_usec; } while(0)
+ #define	AFS_KALLOC	kmem_alloc
+ #define	AFS_KFREE	kmem_free
+ #define	VATTR_NULL	vattr_null
+ 
+ #if defined(__LP64__)
+ #define AFS_HPUX_64BIT_ENV 1
+ #endif
+ 
+ #ifndef UKERNEL
+ /*
+  * On HP-UX, sys/socket.h includes sys/uio.h, and sys/file.h and
+  * sys/uio.h #include each other, and there's no simple way to avoid a
+  * warning about the struct uio declaration not being visible outside
+  * of some prototype or other.  So, we put in a tenative declaration to
+  * supress the warnings.
+  */
+ struct uio;
+ 
+ #define memset(A, B, S) bzero(A, S)
+ #define memcpy(B, A, S) bcopy(A, B, S)
+ #define memcmp(A, B, S) bcmp(A, B, S)
+ #endif
+ #endif /* KERNEL */
+ #define	AFS_DIRENT	
+ /* Non-standard definitions */
+ #ifndef	EDQUOT
+ #define	EDQUOT		69	/* Disc quota exceeded 		*/
+ #endif
+ 
+ #define USE_UCONTEXT        /* should be in afsconfig.h */
+ 
+ #endif /* AFS_PARAM_H */
*** ./src/dir/,dir.c	Wed Aug 21 15:53:25 2002
--- ./src/dir/dir.c	Tue Dec 17 14:04:35 2002
***************
*** 76,82 ****
  #ifndef AFS_LINUX20_ENV
  #include "../netinet/in.h"
  #endif
! #if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV)
  #include "../h/mbuf.h"
  #endif
  #else /* !defined(UKERNEL) */
--- 76,82 ----
  #ifndef AFS_LINUX20_ENV
  #include "../netinet/in.h"
  #endif
! #if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) &&!defined(AFS_HPUX1122_ENV)
  #include "../h/mbuf.h"
  #endif
  #else /* !defined(UKERNEL) */
*** ./src/libafs/,MakefileProto.HPUX.in	Thu Nov 14 14:08:41 2002
--- ./src/libafs/MakefileProto.HPUX.in	Mon Jan 20 15:32:48 2003
***************
*** 66,71 ****
--- 66,72 ----
  # seems to hang).  When the compiler sees the +ES1.Xindirect_calls
  # option, however, it issues a warning and turns off +Z.
  #
+ <hp_ux110 hp_ux102>
  KDEFS= +ES1.Xindirect_calls +XixdU +Hx0 +ESlit +ESsfc +ESssf -Wp,-H300000 -D_KERNEL
-D_KERNEL_BUILD -D_UNSUPPORTED \
  	-DMP +R500 -Wl,+k $(CPU_KDEFS)
  KDEFS_32 = +DA1.0 +DS1.0
***************
*** 73,78 ****
--- 74,91 ----
  # warning 478: "+Z" and "+ES1.Xindirect_calls" are mutually exclusive. "+Z" ignored.
  # warning 530: LP64 migration: Casting from loose to strict alignment: Resulting pointer
may be misaligned.
  KDEFS_64 = +DA2.0W +DS2.0 +M2 +W 478,530
+ 
+ <all>
+ 
+ <hp_ux1122>
+ KDEFS= +kernel -Wp,-H300000 -D_KERNEL -D_KERNEL_BUILD -D_UNSUPPORTED \
+   -DFINE_GRAINED_PROTO_FILES \
+   -DMP -Wl,+k $(CPU_KDEFS)
+ KDEFS_32 =
+ KDEFS_64 = +DD64
+ 
+ <all>
+ 
  DEFINES= -DAFSDEBUG -DKERNEL -DAFS -DVICE -DNFS -DUFS -DINET -DQUOTA -DGETMOUNT
-DHPONCPLUS
  OPTF=${OPT} 
  OPTF2=${OPT2} 
***************
*** 90,100 ****
  
  include Makefile.common
  
  BITS = 64 32
  
  setup:
  	-$(RM) -f  h net dux machine netinet nfs rpc s200 ufs sys
! 	ln -s /usr/include/sys h
  	ln -s /etc/conf/net net
  	ln -s /etc/conf/dux dux
  	ln -s /etc/conf/machine machine
--- 103,117 ----
  
  include Makefile.common
  
+ <hp_ux110 hp_ux102>
  BITS = 64 32
+ <hp_ux1122>
+ BITS = 64
+ <all>
  
  setup:
  	-$(RM) -f  h net dux machine netinet nfs rpc s200 ufs sys
! 	ln -fs /etc/conf/h h
  	ln -s /etc/conf/net net
  	ln -s /etc/conf/dux dux
  	ln -s /etc/conf/machine machine
***************
*** 102,108 ****
--- 119,129 ----
  	ln -s /etc/conf/nfs nfs
  	ln -s /usr/include/rpc rpc
  	ln -s /etc/conf/machine s200
+ <hp_ux110 hp_ux102>
  	ln -s /etc/conf/ufs ufs
+ <hp_ux1122>
+ 	ln -fs /etc/conf/sys ufs
+ <all>
  	ln -s /usr/include/sys sys
  	for b in $(BITS); do \
  	    for t in $(KOBJ); do \
*** ./src/libafs/,Makefile.common	Tue Jan 21 08:50:07 2003
--- ./src/libafs/Makefile.common	Tue Jan 21 08:52:44 2003
***************
*** 19,25 ****
  
  .c.o:
  	$(CC) $(CFLAGS) -c $<
! CRULE1=	$(CC) $(CFLAGS) -c $?
  CRULE2=	$(CC) $(OPTF) $(CFLAGS) -c $?
  CRULE3=	$(CC) $(OPTF2) $(CFLAGS) -c $?
  CRULE4=	$(CC) $(DBG) $(CFLAGS) -c $?
--- 19,25 ----
  
  .c.o:
  	$(CC) $(CFLAGS) -c $<
! CRULE1=	$(CC) -g0 $(CFLAGS) -c $?
  CRULE2=	$(CC) $(OPTF) $(CFLAGS) -c $?
  CRULE3=	$(CC) $(OPTF2) $(CFLAGS) -c $?
  CRULE4=	$(CC) $(DBG) $(CFLAGS) -c $?
*** ./src/libuafs/,MakefileProto.HPUX.in	Fri Sep  7 18:35:24 2001
--- ./src/libuafs/MakefileProto.HPUX.in	Tue Dec 17 14:12:06 2002
***************
*** 30,41 ****
--- 30,49 ----
  # System specific build commands and flags
  CC = /opt/ansic/bin/cc
  DEFINES= -D_REENTRANT -DAFSDEBUG -DKERNEL -DUKERNEL -DAFS -DVICE
+ <hp_ux102 hp_ux110>
  KOPTS=-Wp,-H200000 -Wl,-a,archive +DA1.0 +z
+ <hp_ux1122>
+ KOPTS=-Wp,-H200000 -Wl,-a,archive_shared
+ <all>
  CFLAGS=-I. -I.. -I${TOP_SRCDIR}/config ${FSINCLUDES} $(DEFINES) $(KOPTS) ${DBUG}
  OPTF=-O
  WEBOPTS = -I../nsapi -DNETSCAPE_NSAPI -DNET_SSL -DXP_UNIX -DMCC_HTTPD
  
+ <hp_ux102 hp_ux110>
  TEST_CFLAGS= -Wp,-H200000 +DA1.0 +z -D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV -Dhpux
-DAFS_HPUX_ENV
+ <hp_ux1122>
+ TEST_CFLAGS= -Wp,-H200000 -D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV -Dhpux
-DAFS_HPUX_ENV
+ <all>
  TEST_LDFLAGS=
  TEST_LIBS=-lnsl -lm -lpthread -ldld -lc
  
*** ./src/lwp/,lwp.h	Sun Aug 25 23:34:10 2002
--- ./src/lwp/lwp.h	Tue Dec 17 14:14:41 2002
***************
*** 293,302 ****
--- 293,311 ----
   * cases, and also between machines apparently running the same OS
   * version.
   */
+ /*
+  * On ia64 where the ucontext is used, it can be an extra 48K
+  * Need to account for this.  There might be two of these on the
+  * stack too. This needs to be checked.
+  */
+ #if defined(USE_UCONTEXT) && defined(HAVE_UCONTEXT_H)
+ #define AFS_LWP_MINSTACKSIZE  (288 * 1024)
+ #else
  #if defined(AFS_LINUX22_ENV)
  #define AFS_LWP_MINSTACKSIZE	(192 * 1024)
  #else
  #define AFS_LWP_MINSTACKSIZE	(48 * 1024)
+ #endif
  #endif
  
  /* Action to take on stack overflow. */
*** ./src/lwp/,Makefile.in	Wed Sep 19 17:25:25 2001
--- ./src/lwp/Makefile.in	Tue Dec 17 14:13:07 2002
***************
*** 87,93 ****
  		${CC} -E -I${TOP_INCDIR} process.S >process.ss ; \
  		${AS} process.ss -o process.o ;  \
  		$(RM) -f process.S ;;\
! 	hp_ux110 ) \
  		${CC} ${CFLAGS} -c process.c;; \
  	*) \
  		/lib/cpp -P -I${TOP_INCDIR} process.s process.ss; \
--- 87,93 ----
  		${CC} -E -I${TOP_INCDIR} process.S >process.ss ; \
  		${AS} process.ss -o process.o ;  \
  		$(RM) -f process.S ;;\
! 	hp_ux11* ) \
  		${CC} ${CFLAGS} -c process.c;; \
  	*) \
  		/lib/cpp -P -I${TOP_INCDIR} process.s process.ss; \
*** ./src/pinstall/,install.c	Wed Aug 21 15:53:27 2002
--- ./src/pinstall/install.c	Tue Dec 17 14:20:20 2002
***************
*** 163,169 ****
  static int
  quickStrip (iname, oname, ignored, copy_only)
  char *iname, *oname; {
! 	int pid, status;
  	static char *strip[] = {
  		"strip", 0, 0,
  	};
--- 163,170 ----
  static int
  quickStrip (iname, oname, ignored, copy_only)
  char *iname, *oname; {
! 	int status;
! 	pid_t pid;
  	static char *strip[] = {
  		"strip", 0, 0,
  	};
***************
*** 187,193 ****
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid) {
  			perror("waitpid");
  			return -1;
  		}
--- 188,194 ----
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid && errno != ECHILD) {
  			perror("waitpid");
  			return -1;
  		}
***************
*** 233,239 ****
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid) {
  			perror("waitpid");
  			return -1;
  		}
--- 234,240 ----
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid && errno != ECHILD) {
  			perror("waitpid");
  			return -1;
  		}
***************
*** 272,278 ****
  static
  quickStrip (iname, oname, ignored, copy_only)
  char *iname, *oname; {
! 	int pid, status;
  	static char *strip[] = {
  		"strip", 0, 0,
  	};
--- 273,280 ----
  static
  quickStrip (iname, oname, ignored, copy_only)
  char *iname, *oname; {
! 	int status;
! 	pid_t pid;
  	static char *strip[] = {
  		"strip", 0, 0,
  	};
***************
*** 296,302 ****
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid) {
  			perror("waitpid");
  			return -1;
  		}
--- 298,304 ----
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid && errno != ECHILD) {
  			perror("waitpid");
  			return -1;
  		}
***************
*** 334,340 ****
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid) {
  			perror("waitpid");
  			return -1;
  		}
--- 336,342 ----
  		exit(1);
  
  	    default:			/* parent	*/
! 		if (waitpid(pid, &status, 0) != pid && errno != ECHILD) {
  			perror("waitpid");
  			return -1;
  		}
*** ./src/rx/,rx_packet.c	Tue Sep 10 17:33:55 2002
--- ./src/rx/rx_packet.c	Tue Dec 17 15:54:15 2002
***************
*** 33,39 ****
  #include "../afs/sysincludes.h"
  #endif
  #include "../h/socket.h"
! #if !defined(AFS_SUN5_ENV) &&  !defined(AFS_LINUX20_ENV)
  #if	!defined(AFS_OSF_ENV) && !defined(AFS_AIX41_ENV)
  #include "../sys/mount.h"   /* it gets pulled in by something later anyway */
  #endif
--- 33,39 ----
  #include "../afs/sysincludes.h"
  #endif
  #include "../h/socket.h"
! #if !defined(AFS_SUN5_ENV) &&  !defined(AFS_LINUX20_ENV) && !defined(AFS_HPUX1122_ENV)
  #if	!defined(AFS_OSF_ENV) && !defined(AFS_AIX41_ENV)
  #include "../sys/mount.h"   /* it gets pulled in by something later anyway */
  #endif
***************
*** 959,965 ****
   * message receipt is done in rxk_input or rx_put.
   */
  
! #ifdef AFS_SUN5_ENV
  /*
   * Copy an mblock to the contiguous area pointed to by cp.
   * MTUXXX Supposed to skip <off> bytes and copy <len> bytes,
--- 959,965 ----
   * message receipt is done in rxk_input or rx_put.
   */
  
! #if defined(AFS_SUN5_ENV) || defined(AFS_HPUX1122_ENV)
  /*
   * Copy an mblock to the contiguous area pointed to by cp.
   * MTUXXX Supposed to skip <off> bytes and copy <len> bytes,
***************
*** 1081,1087 ****
  
  #if !defined(AFS_LINUX20_ENV)
  int rx_mb_to_packet(amb, free, hdr_len, data_len, phandle)
! #ifdef	AFS_SUN5_ENV
  mblk_t *amb;
  #else
  struct mbuf *amb;
--- 1081,1087 ----
  
  #if !defined(AFS_LINUX20_ENV)
  int rx_mb_to_packet(amb, free, hdr_len, data_len, phandle)
! #if defined(AFS_SUN5_ENV) || defined(AFS_HPUX1122_ENV)
  mblk_t *amb;
  #else
  struct mbuf *amb;
*** ./src/rx/HPUX/,rx_kmutex.h	Thu Nov 14 14:12:51 2002
--- ./src/rx/HPUX/rx_kmutex.h	Tue Dec 17 15:50:23 2002
***************
*** 112,122 ****
--- 112,129 ----
  
  #define MUTEX_TRYENTER(a) b_cpsema(a)
  
+ #ifdef AFS_HPUX1122_ENV
  #define MUTEX_ENTER(a) \
+ 	((b_owns_sema(a)) ? osi_Panic("Already Held") : b_psema(a))
+ #define MUTEX_EXIT(a) \
+ 	((b_owns_sema(a)) ? b_vsema(a) : osi_Panic("mutex not held"))
+ #else
+ #define MUTEX_ENTER(a) \
      ((b_owns_sema(a)) ? (osi_Panic("Already Held"), 0) : b_psema(a))
  
  #define MUTEX_EXIT(a) \
      ((b_owns_sema(a)) ? b_vsema(a) : (osi_Panic("mutex not held"), 0))
+ #endif
  
  #undef MUTEX_ISMINE
  #define MUTEX_ISMINE(a) b_owns_sema(a)
*** ./src/rx/,rx_kcommon.h	Thu Nov 14 16:27:16 2002
--- ./src/rx/rx_kcommon.h	Tue Dec 17 14:22:11 2002
***************
*** 41,47 ****
--- 41,49 ----
  #include "../h/dir.h"
  #endif
  #include "../h/buf.h"
+ #if !defined(AFS_HPUX1122_ENV)
  #include "../h/mbuf.h"
+ #endif
  #else
  #if defined(AFS_XBSD_ENV)
  #include "../h/dirent.h"
*** ./src/rx/,rx_kcommon.c	Thu Dec 19 14:11:36 2002
--- ./src/rx/rx_kcommon.c	Thu Dec 19 14:11:23 2002
***************
*** 750,756 ****
--- 750,758 ----
  {
      register afs_int32 code;
      struct socket *newSocket;
+ #if !defined(AFS_HPUX1122_ENV)
      register struct mbuf *nam;
+ #endif
      struct sockaddr_in myaddr;
      int wow;
  #ifdef AFS_HPUX110_ENV
***************
*** 804,810 ****
--- 806,814 ----
      code = sobind(newSocket, bindnam, addrsize);
      if (code) {
         soclose(newSocket);
+ #if !defined(AFS_HPUX1122_ENV)
         m_freem(nam);
+ #endif
         goto bad;
      }
  
*** ./,acinclude.m4	Wed Dec  4 18:45:26 2002
--- ./acinclude.m4	Tue Dec 17 13:24:43 2002
***************
*** 292,297 ****
--- 292,300 ----
  		hppa*-hp-hpux11*)
  			AFS_SYSNAME="hp_ux110"
  			;;
+ 		ia64-hp-hpux*)
+ 			AFS_SYSNAME="hp_ux1122"
+ 			;;
  		hppa*-hp-hpux10*)
  			AFS_SYSNAME="hp_ux102"
  			;;