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

Carl E. Davidson carl_davidson@hp.com
Tue, 28 Jan 2003 12:00:24 -0800


Hi Doug,

Thanks for the update. I was out of the office yesterday, so I didn't
see this until this morning. I'll take a look at your changes as soon
as possible. This will probably not be until the end of the week, due
to interference from my day job. :-)

Regards,
Carl

> -----Original Message-----
> From: Douglas E. Engert [mailto:deengert@anl.gov] 
> Sent: Friday, January 24, 2003 2:37 PM
> To: Carl E. Davidson; Srikanth Vishwanathan; 
> openafs-devel@openafs.org; Derrick J Brashear
> Subject: Progress with OpenAFS-1.2.8 on HP-UX 11.22
> 
> 
> 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"
>   			;;
>