From 2324b69082f1fb151e560f78562bf4431f5456ab Mon Sep 17 00:00:00 2001 From: Douglas Engert Date: Wed, 28 May 2003 19:08:37 +0000 Subject: [PATCH] STABLE12-hpux11i-ia64-hpux-1122-20030523 FIXES 1490 so 1.2.10 will support hpux 11i and 11.22 --- Makefile.in | 22 ++--- acinclude.m4 | 8 +- src/afs/HPUX/osi_groups.c | 13 +++ src/afs/HPUX/osi_machdep.h | 30 +++++++ src/afs/HPUX/osi_sleep.c | 68 ++++++++++++++- src/afs/HPUX/osi_vfsops.c | 8 ++ src/afs/HPUX/osi_vnodeops.c | 52 ++++++++++- src/afs/VNOPS/afs_vnop_attrs.c | 8 ++ src/afs/VNOPS/afs_vnop_readdir.c | 23 +++-- src/afs/afs_osi.c | 6 ++ src/afs/afs_util.c | 4 + src/afs/sysincludes.h | 5 ++ src/afsd/Makefile.in | 3 + src/afsd/afs.hpux1122.driver | 126 +++++++++++++++++++++++++++ src/config/Makefile.hp_ux11i.in | 37 ++++++++ src/config/Makefile.ia64_hpux1122.in | 37 ++++++++ src/config/afs_sysnames.h | 3 + src/config/param.hp_ux11i.h | 96 ++++++++++++++++++++ src/config/param.hp_ux11i_usr.h | 64 ++++++++++++++ src/config/param.ia64_hpux1122.h | 102 ++++++++++++++++++++++ src/config/param.ia64_hpux1122_usr.h | 65 ++++++++++++++ src/dir/dir.c | 2 +- src/libafs/MakefileProto.HPUX.in | 28 +++++- src/libuafs/MakefileProto.HPUX.in | 8 ++ src/lwp/Makefile.in | 2 +- src/lwp/lwp.h | 10 +++ src/lwp/process.c | 10 +++ src/pam/Makefile.in | 6 +- src/pinstall/install.c | 7 +- src/rx/HPUX/rx_kmutex.h | 7 ++ src/rx/rx_kcommon.c | 4 + src/rx/rx_kcommon.h | 2 + src/rx/rx_packet.c | 6 +- src/venus/Makefile.in | 2 + src/viced/viced.c | 4 +- 35 files changed, 841 insertions(+), 37 deletions(-) create mode 100644 src/afsd/afs.hpux1122.driver create mode 100644 src/config/Makefile.hp_ux11i.in create mode 100644 src/config/Makefile.ia64_hpux1122.in create mode 100644 src/config/param.hp_ux11i.h create mode 100644 src/config/param.hp_ux11i_usr.h create mode 100644 src/config/param.ia64_hpux1122.h create mode 100644 src/config/param.ia64_hpux1122_usr.h diff --git a/Makefile.in b/Makefile.in index 5fc92dfe1..56a5f5e93 100644 --- a/Makefile.in +++ b/Makefile.in @@ -137,7 +137,7 @@ comerr: util cmd: comerr @case ${SYS_NAME} in \ - sgi_6* | sun4x_5[789] | hp_ux11* | sparc64_linux* | alpha_linux* ) \ + sgi_6* | sun4x_5[789] | hp_ux11* | ia64_hpux* | sparc64_linux* | alpha_linux* ) \ ${COMPILE_PART1} cmd ${COMPILE_PART2}64 ;; \ *) \ ${COMPILE_PART1} cmd ${COMPILE_PART2} ;; \ @@ -243,7 +243,7 @@ viced: project vlserver audit tviced: project viced vlserver libafsrpc libafsauthent case ${SYS_NAME} in \ - alpha_dux*|sgi_*|sun*_5*|rs_aix*|*linux*|hp_ux110) \ + alpha_dux*|sgi_*|sun*_5*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*) \ ${COMPILE_PART1} tviced ${COMPILE_PART2} ;; \ *) \ echo Not building MT viced for ${SYS_NAME} ;; \ @@ -264,7 +264,7 @@ null: project gtx: project null auth # kauth rxkad ? case ${SYS_NAME} in \ - rs_aix* | sun*_5? | sgi_6? | *linux* | ppc_darwin* | *fbsd*) \ + rs_aix* | sun*_5? | sgi_6? | *linux* | ppc_darwin* | *fbsd* | ia64_hpux*) \ $(RM) -f ${TOP_LIBDIR}/libtermlib.a; \ ln -s libnull.a ${TOP_LIBDIR}/libtermlib.a; \ ${COMPILE_PART1} gtx ${COMPILE_PART2};; \ @@ -295,7 +295,7 @@ bozo: project ntp audit vfsck: vol set -x; \ case ${SYS_NAME} in \ - sgi_* | *linux* | rs_aix42 | ppc_darwin* | hp_ux* | *fbsd* | *_obsd* | sun*_4* ) \ + sgi_* | *linux* | rs_aix42 | ppc_darwin* | hp_ux* | ia64_hpux* | *fbsd* | *_obsd* | sun*_4* ) \ echo skip vfsck for ${SYS_NAME} ;; \ * ) \ ${COMPILE_PART1} vfsck ${COMPILE_PART2} ;; \ @@ -316,7 +316,7 @@ login: project kauth rxkad echo Skipping pam/login for parisc_linux24 ;; \ amd64_linux24) \ echo Skipping pam/login for amd64_linux24 ;; \ - sun*_* | hp_ux11* | *linux* | *fbsd* ) \ + sun*_* | hp_ux11* | ia64_hpux* | *linux* | *fbsd* ) \ ${COMPILE_PART1} pam ${COMPILE_PART2} ;; \ ppc_darwin* | *_obsd* ) \ echo Skipping login for ${SYS_NAME} ;; \ @@ -416,7 +416,7 @@ butc: project bubasics butm budb bucoord cmd tbutc: project bubasics butm budb bucoord cmd butc case ${SYS_NAME} in \ - alpha_dux*|sgi_*|sun*_*|rs_aix4*|*linux*|hp_ux110) \ + alpha_dux*|sgi_*|sun*_*|rs_aix4*|*linux*|hp_ux11*|ia64_hpux*) \ ${COMPILE_PART1} tbutc ${COMPILE_PART2} ;; \ *) \ echo Not building MT butc for ${SYS_NAME} ;; \ @@ -439,7 +439,7 @@ tests: rxtests ubiktests # pthread based user space RX library libafsrpc: rx rxkad des case ${SYS_NAME} in \ - alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux110|*fbsd*) \ + alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*|*fbsd*) \ ${COMPILE_PART1} libafsrpc ${COMPILE_PART2} ;; \ *) \ echo Not building MT libafsrpc for ${SYS_NAME} ;; \ @@ -447,7 +447,7 @@ libafsrpc: rx rxkad des libafsauthent: ubik auth kauth libafsrpc case ${SYS_NAME} in \ - alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux110|*fbsd*) \ + alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*|*fbsd*) \ ${COMPILE_PART1} libafsauthent ${COMPILE_PART2} ;; \ *) \ echo Not building MT libafsrpc for ${SYS_NAME} ;; \ @@ -457,7 +457,7 @@ shlibafsrpc: rx rxkad des case ${SYS_NAME} in \ amd64_linux24) \ echo Skipping shlibafsprc for amd64_linux24 ;; \ - alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux110) \ + alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*) \ ${COMPILE_PART1} shlibafsrpc ${COMPILE_PART2} ;; \ *) \ echo Not building shared libafsrpc for ${SYS_NAME} ;; \ @@ -467,7 +467,7 @@ shlibafsauthent: ubik auth kauth shlibafsrpc case ${SYS_NAME} in \ amd64_linux24) \ echo Skipping shlibafsauthent for amd64_linux24 ;; \ - alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux110) \ + alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*) \ ${COMPILE_PART1} shlibafsauthent ${COMPILE_PART2} ;; \ *) \ echo Not building shared libafsrpc for ${SYS_NAME} ;; \ @@ -487,7 +487,7 @@ libadmin_real: libadmin: libafsauthent bozo case ${SYS_NAME} in \ - alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux110) \ + alpha_dux*|sgi_*|sun*_*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*) \ $(MAKE) libadmin_real ;; \ *) \ echo Not building MT libadmin for ${SYS_NAME} ;; \ diff --git a/acinclude.m4 b/acinclude.m4 index 7a507921b..81ee1126c 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -347,9 +347,15 @@ else i?86-*-freebsd4.6*) AFS_SYSNAME="i386_fbsd_46" ;; - hppa*-hp-hpux11*) + hppa*-hp-hpux11.0*) AFS_SYSNAME="hp_ux110" ;; + hppa*-hp-hpux11.11) + AFS_SYSNAME="hp_ux11i" + ;; + ia64-hp-hpux*) + AFS_SYSNAME="ia64_hpux1122" + ;; hppa*-hp-hpux10*) AFS_SYSNAME="hp_ux102" ;; diff --git a/src/afs/HPUX/osi_groups.c b/src/afs/HPUX/osi_groups.c index 49ac59497..1d2ac6506 100644 --- a/src/afs/HPUX/osi_groups.c +++ b/src/afs/HPUX/osi_groups.c @@ -133,6 +133,9 @@ afs_setgroups( int *gp; struct ucred *newcr; ulong_t s; +#if defined(AFS_HPUX110_ENV) + register ulong_t context; +#endif AFS_STATCNT(afs_setgroups); @@ -147,8 +150,14 @@ afs_setgroups( /* somebody else might have a pointer to this structure. ** make sure we do not have a race condition */ newcr = *cred; +#if defined(AFS_HPUX110_ENV) + /* 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 */ @@ -168,8 +177,12 @@ afs_setgroups( } else { +#if defined(AFS_HPUX110_ENV) + MP_SPINUNLOCK_USAV(cred_lock, context); +#else (void) UP_SPLX(s); SPINUNLOCK(cred_lock); +#endif } return (setuerror(0), 0); } diff --git a/src/afs/HPUX/osi_machdep.h b/src/afs/HPUX/osi_machdep.h index 2ea602166..e7b8312f4 100644 --- a/src/afs/HPUX/osi_machdep.h +++ b/src/afs/HPUX/osi_machdep.h @@ -49,10 +49,15 @@ extern struct timeval time; * HP uses global mutex to protect afs land */ +#if !defined(AFS_HPUX110_ENV) extern sema_t afs_global_sema; +#else +extern b_sema_t afs_global_sema; +#endif extern void osi_InitGlock(void); +#if !defined(AFS_HPUX110_ENV) extern void afsHash(int nbuckets); extern sv_sema_t *afsHashInsertFind(tid_t key); extern sv_sema_t *afsHashFind(tid_t key); @@ -64,6 +69,11 @@ extern void afsHashRelease(tid_t key); #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() @@ -75,6 +85,7 @@ extern void afsHashRelease(tid_t key); #define USERPRI NET_SPLX(splvar) #endif /* KERNEL */ +#if !defined(AFS_HPUX110_ENV) /* * On HP, the global lock is an alpha semaphore, hence it is automatically * released and reacquired aroubd a sleep() and wakeup(). @@ -82,13 +93,32 @@ extern void afsHashRelease(tid_t key); #define afs_osi_Sleep(x) sleep((caddr_t) x,PZERO-2) #define afs_osi_Wakeup(x) wakeup((caddr_t) x) +#else +/* + * On 11.* global lock is a beta semaphore, hence we need to + * release and reacquire around sleep and wakeup. We also need to + * use the get_sleep_lock. + * afs_osi_Sleep and afs_osi_Wakeup are defined + */ +void afs_osi_Sleep(void *event); +int afs_osi_Wakeup(void *event); +#endif + + #define osi_NullHandle(x) ((x)->proc == (caddr_t) 0) +#if !defined(AFS_HPUX110_ENV) extern caddr_t kmem_alloc(); +#endif + #include /* 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_HPUX110_ENV) +#include +#else #include +#endif #endif /* _OSI_MACHDEP_H_ */ diff --git a/src/afs/HPUX/osi_sleep.c b/src/afs/HPUX/osi_sleep.c index 248c8585d..0c9e87437 100644 --- a/src/afs/HPUX/osi_sleep.c +++ b/src/afs/HPUX/osi_sleep.c @@ -18,8 +18,9 @@ RCSID("$Header$"); - +#if !defined(AFS_HPUX110_ENV) static char waitV; +#endif /* call procedure aproc with arock as an argument, in ams milliseconds */ static int afs_osi_CallProc(aproc, arock, ams) @@ -30,10 +31,14 @@ static int afs_osi_CallProc(aproc, arock, ams) int code; AFS_STATCNT(osi_CallProc); +#if !defined(AFS_HPUX110_ENV) AFS_GUNLOCK(); +#endif /* hz is in cycles/second, and timeout's 3rd parm is in cycles */ code = timeout(aproc, arock, (ams * afs_hz)/1000 + 1); +#if !defined(AFS_HPUX110_ENV) AFS_GLOCK(); +#endif return code; } @@ -45,17 +50,34 @@ static int afs_osi_CancelProc(aproc, arock) int code = 0; AFS_STATCNT(osi_CancelProc); +#if !defined(AFS_HPUX110_ENV) AFS_GUNLOCK(); +#endif code = untimeout(aproc, arock); +#if !defined(AFS_HPUX110_ENV) AFS_GLOCK(); +#endif return code; } +#if defined(AFS_HPUX110_ENV) +static void AfsWaitHack(char * event) +{ + lock_t * sleep_lock; + + AFS_STATCNT(WaitHack); + sleep_lock = get_sleep_lock(event); + wakeup(event); + spinunlock(sleep_lock); +} +#else + static void AfsWaitHack() { AFS_STATCNT(WaitHack); wakeup(&waitV); } +#endif void afs_osi_InitWaitHandle(struct afs_osi_WaitHandle *achandle) { @@ -72,7 +94,11 @@ void afs_osi_CancelWait(struct afs_osi_WaitHandle *achandle) proc = achandle->proc; if (proc == 0) return; achandle->proc = (caddr_t) 0; /* so dude can figure out he was signalled */ +#if defined(AFS_HPUX110_ENV) + afs_osi_Wakeup((char *)achandle); +#else afs_osi_Wakeup(&waitV); +#endif } /* afs_osi_Wait @@ -83,6 +109,10 @@ int afs_osi_Wait(afs_int32 ams, struct afs_osi_WaitHandle *ahandle, int aintok) { int code; afs_int32 endTime, tid; +#if defined(AFS_HPUX110_ENV) + char localwait; + char * event; +#endif AFS_STATCNT(osi_Wait); endTime = osi_Time() + (ams/1000); @@ -92,12 +122,24 @@ int afs_osi_Wait(afs_int32 ams, struct afs_osi_WaitHandle *ahandle, int aintok) AFS_ASSERT_GLOCK(); code = 0; /* do not do anything for solaris, digital, AIX, and SGI MP */ +#if defined(AFS_HPUX110_ENV) + if (ahandle) { + event = (char *) ahandle; + } + else { + event = &localwait; + } + afs_osi_CallProc(AfsWaitHack, event, ams); + afs_osi_Sleep(event); + afs_osi_CancelProc(AfsWaitHack, event); +#else afs_osi_CallProc(AfsWaitHack, (char *) u.u_procp, ams); afs_osi_Sleep(&waitV); /* for HP 10.0 */ /* do not do anything for solaris, digital, and SGI MP */ afs_osi_CancelProc(AfsWaitHack, (char *) u.u_procp); if (code) break; /* if something happened, quit now */ +#endif /* if we we're cancelled, quit now */ if (ahandle && (ahandle->proc == (caddr_t) 0)) { /* we've been signalled */ @@ -106,3 +148,27 @@ int afs_osi_Wait(afs_int32 ams, struct afs_osi_WaitHandle *ahandle, int aintok) } while (osi_Time() < endTime); return code; } + +#if defined(AFS_HPUX110_ENV) +void afs_osi_Sleep(void *event) +{ + lock_t * sleep_lock; + + AFS_ASSERT_GLOCK(); + get_sleep_lock(event); + AFS_GUNLOCK(); + sleep((caddr_t) event, PZERO-2); + AFS_GLOCK(); +} + +int afs_osi_Wakeup(void *event) +{ + lock_t * sleep_lock; + + sleep_lock = get_sleep_lock(event); + wakeup((caddr_t) event); + spinunlock(sleep_lock); + return 0; +} +#endif + diff --git a/src/afs/HPUX/osi_vfsops.c b/src/afs/HPUX/osi_vfsops.c index 26624c3b5..04d12aaeb 100644 --- a/src/afs/HPUX/osi_vfsops.c +++ b/src/afs/HPUX/osi_vfsops.c @@ -182,6 +182,9 @@ struct vfsops Afs_vfsops = { static int afs_Starting = 0; #pragma align 64 +#if defined(AFS_HPUX110_ENV) +b_sema_t afs_global_sema = {0}; +#else 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,6 +193,7 @@ sema_t afs_global_sema = { , 0, 0, 0, NULL #endif }; +#endif void osi_InitGlock() @@ -200,8 +204,12 @@ osi_InitGlock() if ( !afs_Starting ) { afs_Starting = 1; SPINUNLOCK_USAV(sched_lock, context); +#if defined(AFS_HPUX110_ENV) + b_initsema(&afs_global_sema, 1, NFS_LOCK_ORDER2, "AFS GLOCK"); +#else initsema(&afs_global_sema, 1, FILESYS_SEMA_PRI, FILESYS_SEMA_ORDER); afsHash(64); /* 64 buckets */ +#endif } else { SPINUNLOCK_USAV(sched_lock, context); } diff --git a/src/afs/HPUX/osi_vnodeops.c b/src/afs/HPUX/osi_vnodeops.c index cafe4b5e4..d12f84bc2 100644 --- a/src/afs/HPUX/osi_vnodeops.c +++ b/src/afs/HPUX/osi_vnodeops.c @@ -49,7 +49,20 @@ extern int afs_close(); #define vtoblksz(vp) ((vp)->v_vfsp->vfs_bsize) +#if defined(AFS_HPUX110_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. + */ +#define vmemp_lockx() +#undef vmemp_returnx +#define vmemp_returnx(a) return(a) +#define vmemp_unlockx() +#endif + +#if !defined(AFS_HPUX110_ENV) /* * Copy an mbuf to the contiguous area pointed to by cp. * Skip bytes and copy bytes. @@ -92,6 +105,7 @@ m_cpytoc(m, off, len, cp) return (len); } +#endif /* * Note that the standard Sun vnode interface doesn't haven't an vop_lockf(), so this code is @@ -160,7 +174,11 @@ afs_lockf( vp, flag, len, cred, fp, LB, UB ) } -#include "../machine/vmparam.h" /* For KERNELSPACE */ +#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,7 +1280,11 @@ retry: if (change_to_fstore) afspgin_update_dbd(vm_info, bsize); +#if defined(AFS_HPUX110_ENV) + getppdp()->cnt.v_exfod += count; +#else mpproc_info[getprocindex()].cnt.v_exfod += count; +#endif vmemp_unlockx(); /* free up VM empire */ *ret_startindex = startindex; @@ -1630,12 +1652,21 @@ afs_pageout(vp,prp, start, end, flags) */ if (steal) { if (flags & PF_DEACT) { +#if defined(AFS_HPUX110_ENV) + getppdp()->cnt.v_pswpout += npages; +#else mpproc_info[getprocindex()].cnt.v_pswpout += npages; +#endif /* sar_bswapout += ptod(npages);*/ } else if (vhand) { +#if defined(AFS_HPUX110_ENV) + getppdp()->cnt.v_pgout++; + getppdp()->cnt.v_pgpgout += npages; +#else mpproc_info[getprocindex()].cnt.v_pgout++; mpproc_info[getprocindex()].cnt.v_pgpgout += npages; +#endif } } @@ -1889,7 +1920,11 @@ afs_swapfs_len(bp) afs_mmap(vp, off, size_bytes, access) struct vnode *vp; u_int off; +#if defined(AFS_HPUX1111_ENV) + u_long size_bytes; +#else u_int size_bytes; +#endif int access; { long bsize = vtoblksz(vp); @@ -1923,7 +1958,11 @@ int afs_unmap(vp,off, size_bytes,access) struct vnode *vp; u_int off; +#if defined(AFS_HPUX1111_ENV) + u_long size_bytes; +#else u_int size_bytes; +#endif int access; { return 0; @@ -1945,6 +1984,7 @@ afs_read_ahead(vp, prp, wrt, space, vaddr, rhead_cnt) int afs_prealloc(vp, size, ignore_minfree, reserved) struct vnode *vp; + /* DEE on 11.22 following is off_t */ size_t size; int ignore_minfree; int reserved; @@ -1984,9 +2024,19 @@ afs_ioctl(vp, com, data, flag, cred) return(ENOTTY); } +#if defined(AFS_HPUX1111_ENV) +/* looks like even if appl is 32 bit, we need to round to 8 bytes */ +/* 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) diff --git a/src/afs/VNOPS/afs_vnop_attrs.c b/src/afs/VNOPS/afs_vnop_attrs.c index f78dafe44..f8ed5f7bf 100644 --- a/src/afs/VNOPS/afs_vnop_attrs.c +++ b/src/afs/VNOPS/afs_vnop_attrs.c @@ -33,6 +33,9 @@ RCSID("$Header$"); extern afs_rwlock_t afs_xcbhash; struct afs_exporter *afs_nfsexporter; extern struct vcache *afs_globalVp; +#if defined(AFS_HPUX110_ENV) +extern struct vfs *afs_globalVFS; +#endif /* copy out attributes from cache entry */ afs_CopyOutAttrs(avc, attrs) @@ -160,6 +163,11 @@ afs_CopyOutAttrs(avc, attrs) #else attrs->va_rdev = 1; #endif + +#if defined(AFS_HPUX110_ENV) + if (afs_globalVFS) attrs->va_fstype = afs_globalVFS->vfs_mtype; +#endif + /* * Below return 0 (and not 1) blocks if the file is zero length. This conforms * better with the other filesystems that do return 0. diff --git a/src/afs/VNOPS/afs_vnop_readdir.c b/src/afs/VNOPS/afs_vnop_readdir.c index 8bcbcc4e5..a9e886cde 100644 --- a/src/afs/VNOPS/afs_vnop_readdir.c +++ b/src/afs/VNOPS/afs_vnop_readdir.c @@ -31,6 +31,11 @@ RCSID("$Header$"); #include "../afs/nfsclient.h" #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 @@ -172,7 +177,7 @@ struct minnfs_direct { u_short d_reclen; u_short d_namlen; }; -#define NDIRSIZ_LEN(len) ((sizeof (struct dirent)+4 - (MAXNAMLEN+1)) + (((len)+1 + 3) &~ 3)) +#define NDIRSIZ_LEN(len) ((sizeof (struct dirent)+4 - (MAXNAMLEN+1)) + (((len)+1 + DIRPAD) &~ DIRPAD)) #endif #endif /* !defined(UKERNEL) */ @@ -200,7 +205,7 @@ int afs_rd_stash_i = 0; */ #if defined(AFS_HPUX100_ENV) #define DIRSIZ_LEN(len) \ - ((sizeof (struct __dirent) - (_MAXNAMLEN+1)) + (((len)+1 + 3) &~ 3)) + ((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,7 +411,7 @@ int off; /* pad out the remaining characters with zeros */ if (code == 0) { - AFS_UIOMOVE(bufofzeros, ((slen + 4) & ~3) - slen, UIO_READ, + AFS_UIOMOVE(bufofzeros, ((slen + 1 + DIRPAD) & ~DIRPAD) - slen, UIO_READ, auio, code); } AFS_MOVE_LOCK(); @@ -620,7 +625,7 @@ tagain: 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); + 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,7 +688,7 @@ tagain: 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); + 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,7 +739,7 @@ tagain: 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, + AFS_UIOMOVE(bufofzeros, ((o_slen + 1 + DIRPAD) & ~DIRPAD) - o_slen, UIO_READ, auio, code); } /* pad out the difference between rlen and slen... */ @@ -882,7 +887,7 @@ tagain: } /* pad out the remaining characters with zeros */ if (code == 0) { - AFS_UIOMOVE(bufofzeros, ((o_slen + 4) & ~3) - o_slen, UIO_READ, auio, code); + 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,7 +936,7 @@ tagain: 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); + 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,7 +982,7 @@ tagain: 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); + 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) { diff --git a/src/afs/afs_osi.c b/src/afs/afs_osi.c index 277786a83..89a38d4e8 100644 --- a/src/afs/afs_osi.c +++ b/src/afs/afs_osi.c @@ -399,12 +399,18 @@ afs_osi_SetTime(atv) #endif #ifdef AFS_HPUX_ENV { +#if !defined(AFS_HPUX1122_ENV) + /* 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; t.tv_usec = atv->tv_usec; s = spl7(); time = t; (void) splx(s); resettodr(atv); +#endif } #else { diff --git a/src/afs/afs_util.c b/src/afs/afs_util.c index 4fc259bba..3a745276e 100644 --- a/src/afs/afs_util.c +++ b/src/afs/afs_util.c @@ -150,7 +150,11 @@ extern afs_int32 afs_showflags; 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); diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h index 5f5d0aab6..4539cf9d2 100644 --- a/src/afs/sysincludes.h +++ b/src/afs/sysincludes.h @@ -219,6 +219,9 @@ typedef unsigned short etap_event_t; 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_HPUX110_ENV +# include "../h/resource.h" +#endif # endif /* AFS_HPUX_ENV */ #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD40_ENV) # include @@ -270,7 +273,9 @@ MALLOC_DECLARE(M_AFS); #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" diff --git a/src/afsd/Makefile.in b/src/afsd/Makefile.in index f07062e07..f9ab85da2 100644 --- a/src/afsd/Makefile.in +++ b/src/afsd/Makefile.in @@ -111,6 +111,9 @@ dest: ${DEST}/root.client/usr/vice/etc/afsd ${DEST}/etc/vsys ${INSTALL} -f afs.rc.solaris.2_5 ${DEST}/root.client/usr/vice/etc/modload/afs.rc ;;\ alpha_osf* ) \ ${INSTALL} -f afs.rc.alpha ${DEST}/root.client/usr/vice/etc/dkload/afs.rc ;;\ + ia64_hpux1122 ) \ + ${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 ;;\ 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 ;;\ diff --git a/src/afsd/afs.hpux1122.driver b/src/afsd/afs.hpux1122.driver new file mode 100644 index 000000000..5aa04291c --- /dev/null +++ b/src/afsd/afs.hpux1122.driver @@ -0,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$ +* +* 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 ..... +* +$$$ + +$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 +* +* 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 +* +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. +* +$$$ diff --git a/src/config/Makefile.hp_ux11i.in b/src/config/Makefile.hp_ux11i.in new file mode 100644 index 000000000..719835a8f --- /dev/null +++ b/src/config/Makefile.hp_ux11i.in @@ -0,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 -DAUTH_DBM_LOG +z -Wl,+k -D_LARGEFILE64_SOURCE +XCFLAGS=${XCFLAGS0} +DA1.0 +XCFLAGS64=${XCFLAGS0} +DA2.0W +MT_CFLAGS=-D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV ${XCFLAGS} +XLIBS=@LIB_AFSDB@ +XLIBELFA=-lelf +TXLIBS=/usr/lib/libHcurses.a +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/libndbm.a +PAM_CFLAGS=+DA1.0 +z -Wl,+k +PAMLIBS=/usr/lib/libpam.1 +YACC=/opt/langtools/bin/yacc diff --git a/src/config/Makefile.ia64_hpux1122.in b/src/config/Makefile.ia64_hpux1122.in new file mode 100644 index 000000000..01a0eb443 --- /dev/null +++ b/src/config/Makefile.ia64_hpux1122.in @@ -0,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=/usr/lib/hpux32/libndbm.so +PAM_CFLAGS=-b +z -Wl,+k +PAMLIBS=/usr/lib/hpux32/libpam.so +YACC=/opt/langtools/bin/yacc diff --git a/src/config/afs_sysnames.h b/src/config/afs_sysnames.h index 9131d030b..f3e8928fb 100644 --- a/src/config/afs_sysnames.h +++ b/src/config/afs_sysnames.h @@ -43,6 +43,9 @@ #define SYS_NAME_ID_hp800_ux101 413 #define SYS_NAME_ID_hp_ux102 414 #define SYS_NAME_ID_hp_ux110 415 +#define SYS_NAME_ID_hp_ux11i 416 +#define SYS_NAME_ID_ia64_hpux1122 417 + #define SYS_NAME_ID_mac2_51 500 #define SYS_NAME_ID_mac_aux10 501 diff --git a/src/config/param.hp_ux11i.h b/src/config/param.hp_ux11i.h new file mode 100644 index 000000000..5d5ac68f6 --- /dev/null +++ b/src/config/param.hp_ux11i.h @@ -0,0 +1,96 @@ +/* + * 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_HPUX1111_ENV 1 + +#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */ +#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */ + +#include + +#define AFS_SYSCALL 48 /* slot reserved for AFS */ + +/* Machine / Operating system information */ +#define SYS_NAME "hp_ux11i" +#define SYS_NAME_ID SYS_NAME_ID_hp_ux11i +#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_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 + +#endif /* AFS_PARAM_H */ diff --git a/src/config/param.hp_ux11i_usr.h b/src/config/param.hp_ux11i_usr.h new file mode 100644 index 000000000..7f869a916 --- /dev/null +++ b/src/config/param.hp_ux11i_usr.h @@ -0,0 +1,64 @@ +/* + * 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 + */ + +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ +#define RXK_LISTENER_ENV 1 +#define AFS_USERSPACE_IP_ADDR 1 +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ + +#define UKERNEL 1 /* user space kernel */ +#define AFS_GREEDY43_ENV 1 /* Used only in rx/rx_user.c */ +#define AFS_ENV 1 +#define AFS_USR_HPUX_ENV 1 + +#include + +/*#define AFS_GLOBAL_SUNLOCK 1*/ /* For global locking */ + +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ + +#define AFS_SYSCALL 48 /* slot reserved for AFS */ + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS 1 + +/* Machine / Operating system information */ +#define SYS_NAME "hp_ux11i" +#define SYS_NAME_ID SYS_NAME_ID_hp_ux11i +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_STATVFS 0 /* System doesn't support statvfs */ + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_fmode uio_fmode +#define afsio_resid uio_resid +#define AFS_UIOSYS 1 +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES CLBYTES +#define AFS_MINCHANGE 2 +#define VATTR_NULL usr_vattr_null +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif + +#endif /* AFS_PARAM_H */ diff --git a/src/config/param.ia64_hpux1122.h b/src/config/param.ia64_hpux1122.h new file mode 100644 index 000000000..7a84604e0 --- /dev/null +++ b/src/config/param.ia64_hpux1122.h @@ -0,0 +1,102 @@ +/* + * 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_HPUX1111_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 + +#define AFS_SYSCALL 48 /* slot reserved for AFS */ + +/* Machine / Operating system information */ +#define SYS_NAME "ia64_hpux1122" +#define SYS_NAME_ID SYS_NAME_ID_ia64_hpux1122 +#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 */ diff --git a/src/config/param.ia64_hpux1122_usr.h b/src/config/param.ia64_hpux1122_usr.h new file mode 100644 index 000000000..dbd7292dd --- /dev/null +++ b/src/config/param.ia64_hpux1122_usr.h @@ -0,0 +1,65 @@ +/* + * 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 + */ + +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ +#define RXK_LISTENER_ENV 1 +#define AFS_USERSPACE_IP_ADDR 1 +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ + +#define UKERNEL 1 /* user space kernel */ +#define AFS_GREEDY43_ENV 1 /* Used only in rx/rx_user.c */ +#define AFS_ENV 1 +#define AFS_USR_HPUX_ENV 1 + +#include + +/*#define AFS_GLOBAL_SUNLOCK 1*/ /* For global locking */ + +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ + +#define AFS_SYSCALL 48 /* slot reserved for AFS */ + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS 1 + +/* Machine / Operating system information */ +#define SYS_NAME "ia64_hpux1122" +#define SYS_NAME_ID SYS_NAME_ID_ia64_hpux1122 +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_STATVFS 0 /* System doesn't support statvfs */ +#define AFS_USE_VOID_PTR 1 + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_fmode uio_fmode +#define afsio_resid uio_resid +#define AFS_UIOSYS 1 +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES CLBYTES +#define AFS_MINCHANGE 2 +#define VATTR_NULL usr_vattr_null +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif + +#endif /* AFS_PARAM_H */ diff --git a/src/dir/dir.c b/src/dir/dir.c index 401647d67..2d9cd85f7 100644 --- a/src/dir/dir.c +++ b/src/dir/dir.c @@ -76,7 +76,7 @@ RCSID("$Header$"); #ifndef AFS_LINUX20_ENV #include "../netinet/in.h" #endif -#if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_HPUX110_ENV) #include "../h/mbuf.h" #endif #else /* !defined(UKERNEL) */ diff --git a/src/libafs/MakefileProto.HPUX.in b/src/libafs/MakefileProto.HPUX.in index 29830be64..6370a1e91 100644 --- a/src/libafs/MakefileProto.HPUX.in +++ b/src/libafs/MakefileProto.HPUX.in @@ -66,6 +66,7 @@ AFS_OS_NONFSOBJS = \ # seems to hang). When the compiler sees the +ES1.Xindirect_calls # option, however, it issues a warning and turns off +Z. # + 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,10 +74,20 @@ KDEFS_32 = +DA1.0 +DS1.0 # 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 + + +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 + + + DEFINES= -DAFSDEBUG -DKERNEL -DAFS -DVICE -DNFS -DUFS -DINET -DQUOTA -DGETMOUNT -DHPONCPLUS OPTF=${OPT} OPTF2=${OPT2} -CFLAGS=-I. -I.. -I../h -I../nfs -I${TOP_SRCDIR}/config ${FSINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} +CFLAGS=-I. -I.. -I../h -I../nfs -I../conf -I${TOP_SRCDIR}/config ${FSINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} # Name of directory to hold object files and libraries. KOBJ=STATIC @@ -90,11 +101,20 @@ DESTDIRS = hpux_destdirs include Makefile.common + BITS = 64 32 + +BITS = 64 + setup: - -$(RM) -f h net dux machine netinet nfs rpc s200 ufs sys + -$(RM) -f h net dux machine netinet nfs rpc s200 ufs sys conf + ln -s /usr/include/sys h + + ln -s /etc/conf/h h + + ln -s /etc/conf conf ln -s /etc/conf/net net ln -s /etc/conf/dux dux ln -s /etc/conf/machine machine @@ -102,7 +122,11 @@ setup: ln -s /etc/conf/nfs nfs ln -s /usr/include/rpc rpc ln -s /etc/conf/machine s200 + ln -s /etc/conf/ufs ufs + + ln -s /etc/conf/sys ufs + ln -s /usr/include/sys sys for b in $(BITS); do \ for t in $(KOBJ); do \ diff --git a/src/libuafs/MakefileProto.HPUX.in b/src/libuafs/MakefileProto.HPUX.in index 0057b011a..1b7b218fb 100644 --- a/src/libuafs/MakefileProto.HPUX.in +++ b/src/libuafs/MakefileProto.HPUX.in @@ -30,12 +30,20 @@ include ../config/Makefile.${SYS_NAME} # System specific build commands and flags CC = /opt/ansic/bin/cc DEFINES= -D_REENTRANT -DAFSDEBUG -DKERNEL -DUKERNEL -DAFS -DVICE + KOPTS=-Wp,-H200000 -Wl,-a,archive +DA1.0 +z + +KOPTS=-Wp,-H200000 -Wl,-a,archive_shared + CFLAGS=-I. -I.. -I${TOP_SRCDIR}/config ${FSINCLUDES} $(DEFINES) $(KOPTS) ${DBUG} OPTF=-O WEBOPTS = -I../nsapi -DNETSCAPE_NSAPI -DNET_SSL -DXP_UNIX -DMCC_HTTPD + TEST_CFLAGS= -Wp,-H200000 +DA1.0 +z -D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV -Dhpux -DAFS_HPUX_ENV + +TEST_CFLAGS= -Wp,-H200000 -D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV -Dhpux -DAFS_HPUX_ENV + TEST_LDFLAGS= TEST_LIBS=-lnsl -lm -lpthread -ldld -lc diff --git a/src/lwp/Makefile.in b/src/lwp/Makefile.in index f1779c577..80f0dec17 100644 --- a/src/lwp/Makefile.in +++ b/src/lwp/Makefile.in @@ -73,7 +73,7 @@ process.o : process.s process.c /usr/bin/cpp -P process.fbsd.s > process.ss; \ ${AS} -o process.o process.ss; \ $(RM) process.ss ;; \ - hp* | *_linux* | sgi_64 | sgi_65 ) \ + hp* | *_linux* | sgi_64 | sgi_65 | ia64_hpux* ) \ ${CC} ${CFLAGS} -c process.c;; \ alpha_osf1 | alpha_osf20 | alpha_osf30 | alpha_osf32 | alpha_osf32c | alpha_dux?? ) \ ${AS} -v -P -DOSF -I${TOP_INCDIR} -DASSEMBLER process.s; \ diff --git a/src/lwp/lwp.h b/src/lwp/lwp.h index 4e9c202a9..0216e8350 100644 --- a/src/lwp/lwp.h +++ b/src/lwp/lwp.h @@ -293,11 +293,21 @@ extern * 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. */ #define LWP_SOQUIET 1 /* do nothing */ diff --git a/src/lwp/process.c b/src/lwp/process.c index f95fa61cd..917421014 100644 --- a/src/lwp/process.c +++ b/src/lwp/process.c @@ -37,6 +37,12 @@ char* newsp; { #if defined(AFS_IA64_LINUX20_ENV) register unsigned long sp __asm__("r12"); +#elif defined(AFS_HPUX1122_ENV) +/* don't need anything special, will use + * ucontext.uc_stack.ss_sp as it matches r12. + * This should also work for Linux, + * but dont have system to test DEE + */ #elif defined(AFS_AMD64_LINUX24_ENV) register unsigned long sp __asm__("sp"); #else @@ -47,7 +53,11 @@ char* newsp; savearea->state = 0; getcontext(&savearea->ucontext); +#if defined(AFS_HPUX1122_ENV) + savearea->topstack = savearea->ucontext.uc_stack.ss_sp; +#else savearea->topstack = sp; +#endif switch (savearea->state) { case 0: diff --git a/src/pam/Makefile.in b/src/pam/Makefile.in index 6f932735c..cc424c865 100644 --- a/src/pam/Makefile.in +++ b/src/pam/Makefile.in @@ -69,7 +69,7 @@ afs_util_krb.o: afs_util.c afs_util.h pam_afs.so.1: $(SHOBJS) afs_setcred.o afs_auth.o afs_util.o set -x; \ case "$(SYS_NAME)" in \ - hp_ux*) \ + hp_ux* | ia64_hpux*) \ $(LD) $(LDFLAGS) -c mapfile.hp -o $@ afs_setcred.o afs_auth.o afs_util.o\ $(SHOBJS) $(LIBS) ;; \ sun*_5*) \ @@ -86,7 +86,7 @@ pam_afs.so.1: $(SHOBJS) afs_setcred.o afs_auth.o afs_util.o pam_afs.krb.so.1: $(SHOBJS) afs_setcred_krb.o afs_auth_krb.o afs_util_krb.o set -x; \ case "$(SYS_NAME)" in \ - hp_ux*) \ + hp_ux* | ia64_hpux*) \ $(LD) $(LDFLAGS) -c mapfile.hp -o $@ \ afs_setcred_krb.o afs_auth_krb.o afs_util_krb.o $(SHOBJS) $(LDFLAGS) $(KLIBS) ;; \ sun*_5*) \ @@ -103,7 +103,7 @@ pam_afs.krb.so.1: $(SHOBJS) afs_setcred_krb.o afs_auth_krb.o afs_util_krb.o test_pam: test_pam.o set -x; \ case "$(SYS_NAME)" in \ - hp_ux*) \ + hp_ux* | ia64_hpux*) \ $(CC) $(CFLAGS) -o $@ test_pam.o ${PAMLIBS};; \ sun*_5*) \ $(CC) $(CFLAGS) -o $@ test_pam.o ${PAMLIBS};; \ diff --git a/src/pinstall/install.c b/src/pinstall/install.c index 665f0f5d1..43f9b60c8 100644 --- a/src/pinstall/install.c +++ b/src/pinstall/install.c @@ -162,7 +162,8 @@ atoo(astr) static int quickStrip (iname, oname, ignored, copy_only) char *iname, *oname; { - int pid, status; + int pid; + pid_t status; static char *strip[] = { "strip", 0, 0, }; @@ -186,7 +187,7 @@ char *iname, *oname; { exit(1); default: /* parent */ - if (waitpid(pid, &status, 0) != pid) { + if (waitpid(pid, &status, 0) != pid && errno != ECHILD) { perror("waitpid"); return -1; } @@ -232,7 +233,7 @@ char *iname, *oname; { exit(1); default: /* parent */ - if (waitpid(pid, &status, 0) != pid) { + if (waitpid(pid, &status, 0) != pid && errno != ECHILD) { perror("waitpid"); return -1; } diff --git a/src/rx/HPUX/rx_kmutex.h b/src/rx/HPUX/rx_kmutex.h index a1584c518..007a9ee89 100644 --- a/src/rx/HPUX/rx_kmutex.h +++ b/src/rx/HPUX/rx_kmutex.h @@ -112,11 +112,18 @@ extern void osirx_AssertMine(afs_kmutex_t *lockaddr, char *msg); #define MUTEX_TRYENTER(a) b_cpsema(a) +#ifdef AFS_HPUX1111_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) diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index 4105a72fc..9418d77e0 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -750,7 +750,9 @@ struct osi_socket *rxk_NewSocket(short aport) { register afs_int32 code; struct socket *newSocket; +#if !defined(AFS_HPUX110_ENV) register struct mbuf *nam; +#endif struct sockaddr_in myaddr; int wow; #ifdef AFS_HPUX110_ENV @@ -804,7 +806,9 @@ struct osi_socket *rxk_NewSocket(short aport) code = sobind(newSocket, bindnam, addrsize); if (code) { soclose(newSocket); +#if !defined(AFS_HPUX110_ENV) m_freem(nam); +#endif goto bad; } diff --git a/src/rx/rx_kcommon.h b/src/rx/rx_kcommon.h index 557ca6e4d..a4fc0894e 100644 --- a/src/rx/rx_kcommon.h +++ b/src/rx/rx_kcommon.h @@ -47,7 +47,9 @@ typedef unsigned short etap_event_t; #include "../h/dir.h" #endif #include "../h/buf.h" +#if !defined(AFS_HPUX110_ENV) #include "../h/mbuf.h" +#endif #else #if defined(AFS_XBSD_ENV) #include "../h/dirent.h" diff --git a/src/rx/rx_packet.c b/src/rx/rx_packet.c index 5485d954a..6f2034b3b 100644 --- a/src/rx/rx_packet.c +++ b/src/rx/rx_packet.c @@ -33,7 +33,7 @@ RCSID("$Header$"); #include "../afs/sysincludes.h" #endif #include "../h/socket.h" -#if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_HPUX110_ENV) #if !defined(AFS_OSF_ENV) && !defined(AFS_AIX41_ENV) #include "../sys/mount.h" /* it gets pulled in by something later anyway */ #endif @@ -959,7 +959,7 @@ int osi_NetSend(socket, addr, dvec, nvecs, length, istack) * message receipt is done in rxk_input or rx_put. */ -#ifdef AFS_SUN5_ENV +#if defined(AFS_SUN5_ENV) || defined(AFS_HPUX110_ENV) /* * Copy an mblock to the contiguous area pointed to by cp. * MTUXXX Supposed to skip bytes and copy bytes, @@ -1081,7 +1081,7 @@ return len; #if !defined(AFS_LINUX20_ENV) int rx_mb_to_packet(amb, free, hdr_len, data_len, phandle) -#ifdef AFS_SUN5_ENV +#if defined(AFS_SUN5_ENV) || defined(AFS_HPUX110_ENV) mblk_t *amb; #else struct mbuf *amb; diff --git a/src/venus/Makefile.in b/src/venus/Makefile.in index 60e1509d7..16bdb7007 100644 --- a/src/venus/Makefile.in +++ b/src/venus/Makefile.in @@ -114,6 +114,8 @@ ${DEST}/etc/kdump: kdump hp_ux11* ) \ ${INSTALLex} -f kdump.sh.hp_ux11 $@; \ ${INSTALL} -s -f $? ${DEST}/etc/kdump32;; \ + ia64_hpux11* ) \ + echo skipping kdump for ${SYS_NAME} ;; \ *) \ ${INSTALL} -s $? $@ ;; \ esac diff --git a/src/viced/viced.c b/src/viced/viced.c index 19e6349dc..962e463b8 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -229,11 +229,13 @@ static void ResetCheckSignal(void) #if defined(AFS_HPUX_ENV) signo = SIGPOLL; -#elif defined(AFS_NT40_ENV) +#else +#if defined(AFS_NT40_ENV) signo = SIGUSR2; #else signo = SIGXCPU; #endif +#endif #if defined(AFS_PTHREAD_ENV) && !defined(AFS_NT40_ENV) softsig_signal(signo, CheckSignal_Signal); -- 2.39.5