[OpenAFS-devel] Re: Compiling openafs on arm64/aarch64 architecture

Micheal Waltz mwaltz@qualcomm.com
Thu, 4 Sep 2014 14:39:55 -0700


--------------010408000801010606060204
Content-Type: text/plain; charset="windows-1252"; format=flowed
Content-Transfer-Encoding: 7bit

On 09/03/14 15:11, Micheal Waltz wrote:
> I'll pull the openafs repo and start applying some of the changes I've 
> made to a branch. I've been strictly using the deb-src packages from 
> Debian since my immediate goal was to get arm64 packages built and I 
> thought maybe it was just a few modifications to get it working.

I pulled the git source, checked out the openafs-stable-1_6_9 tag, and 
added in the suggestions for the arm64_linux sysname params files as 
well as modified a few other files (patch attached). This should keep 
the new aarch64 architecture separate from the existing arm_linux 
architecture.

The userspace build for the most part was successful (src/lwp/rw was not 
built to test), but it fails on building the libafs Linux kernel module 
with:

/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:137:1: 
error: conflicting types for 'lockIdSet'

I looked into this issue, but got stuck and am not really sure how to 
proceed. I think it may have to do with some CCFLAGS/DEFINES in 
src/libafs/MakefileProto.LINUX.in for the arm64_linux26 sysname, but I 
don't know what flags may be needed. Other threads on the openafs-devel 
list from the past show it could be something with not copying required 
objects correctly.

Does anyone have any pointers here? Also, is there an easy way to just 
try and re-build just the module without having to start the entire 
compile over again? It takes 1-2 hours on an emulated VM to get to this 
stage and is very time consuming. Thank you.


Full compile error, only "./configure; make" was used to build, no 
additional flags:

/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:575:5: 
error: conflicting types for 'afs_lockctl'
  int afs_lockctl(struct vcache * avc, struct AFS_FLOCK * af, int acmd,
      ^
In file included from /home/mwaltz/git/openafs/src/afs/afsincludes.h:57:0,
                  from 
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:20:
/home/mwaltz/git/openafs/src/afs/afs_prototypes.h:1178:12: note: 
previous declaration of 'afs_lockctl' was here
  extern int afs_lockctl(struct vcache * avc, struct AFS_FLOCK * af, int 
acmd,
             ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c: 
In function 'afs_lockctl':
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:599:8: 
error: dereferencing pointer to incomplete type
   if (af->l_type == F_UNLCK) {
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:603:2: 
warning: passing argument 2 of 'HandleGetLock' from incompatible pointer 
type [enabled by default]
   code = HandleGetLock(avc, af, &treq, clid);
   ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:32:12: 
note: expected 'struct flock64 *' but argument is of type 'struct flock64 *'
  static int HandleGetLock(struct vcache *avc,
             ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:616:8: 
error: dereferencing pointer to incomplete type
   if (af->l_type == F_WRLCK) {
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:625:19: 
error: dereferencing pointer to incomplete type
      if ((sizeof(af->l_len) == 8) && (af->l_len == 0x7fffffffffffffffLL))
                    ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:625:40: 
error: dereferencing pointer to incomplete type
      if ((sizeof(af->l_len) == 8) && (af->l_len == 0x7fffffffffffffffLL))
                                         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:626:4: 
error: dereferencing pointer to incomplete type
   af->l_len = 0;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:629:11: 
error: dereferencing pointer to incomplete type
      if (af->l_whence != 0 || af->l_start != 0 || af->l_len != 0) {
            ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:629:32: 
error: dereferencing pointer to incomplete type
      if (af->l_whence != 0 || af->l_start != 0 || af->l_len != 0) {
                                 ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:629:52: 
error: dereferencing pointer to incomplete type
      if (af->l_whence != 0 || af->l_start != 0 || af->l_len != 0) {
                                                     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:635:11: 
error: dereferencing pointer to incomplete type
      if (af->l_type == F_RDLCK)
            ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:637:16: 
error: dereferencing pointer to incomplete type
      else if (af->l_type == F_WRLCK)
                 ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:639:16: 
error: dereferencing pointer to incomplete type
      else if (af->l_type == F_UNLCK)
                 ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c: 
At top level:
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:684:15: 
warning: 'struct flock64' declared inside parameter list [enabled by 
default]
         struct vrequest *areq, int clid)
                ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:683:1: 
error: conflicting types for 'HandleGetLock'
  HandleGetLock(struct vcache *avc, struct AFS_FLOCK *af,
  ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:32:12: 
note: previous declaration of 'HandleGetLock' was here
  static int HandleGetLock(struct vcache *avc,
             ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c: 
In function 'HandleGetLock':
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:687:22: 
error: storage size of 'flock' isn't known
      struct AFS_FLOCK flock;
                       ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:699:22: 
error: dereferencing pointer to incomplete type
   if (code == 0 || (af->l_type == F_RDLCK && code > 0)) {
                       ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:700:8: 
error: dereferencing pointer to incomplete type
       af->l_type = F_UNLCK;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:704:8: 
error: dereferencing pointer to incomplete type
       af->l_type = F_RDLCK;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:706:8: 
error: dereferencing pointer to incomplete type
       af->l_type = F_WRLCK;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:708:4: 
error: dereferencing pointer to incomplete type
   af->l_pid = 0;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:715:11: 
error: dereferencing pointer to incomplete type
      if (af->l_type == F_RDLCK) {
            ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:723:8: 
error: dereferencing pointer to incomplete type
       af->l_type = F_UNLCK;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:728:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_WRLCK; /* not us, so lock would block */
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:730:8: 
error: dereferencing pointer to incomplete type
       af->l_pid = avc->slocks->pid;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:735:8: 
error: dereferencing pointer to incomplete type
       af->l_pid = 0; /* XXX can't happen?? */
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:749:8: 
error: dereferencing pointer to incomplete type
       af->l_type = F_WRLCK;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:751:5: 
error: dereferencing pointer to incomplete type
    af->l_pid = avc->slocks->pid;
      ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:756:5: 
error: dereferencing pointer to incomplete type
    af->l_pid = 0; /* XXX can't happen?? */
      ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:764:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_UNLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:776:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_RDLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:777:4: 
error: dereferencing pointer to incomplete type
   af->l_pid = 0;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:784:5: 
error: dereferencing pointer to incomplete type
    af->l_pid = slp->pid;
      ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:800:8: 
error: dereferencing pointer to incomplete type
       af->l_type = F_WRLCK;
         ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:802:5: 
error: dereferencing pointer to incomplete type
    af->l_pid = avc->slocks->pid;
      ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:807:5: 
error: dereferencing pointer to incomplete type
    af->l_pid = 0; /* XXX can't happen?? */
      ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:815:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_UNLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:826:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_RDLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:827:4: 
error: dereferencing pointer to incomplete type
   af->l_pid = 0;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:834:5: 
error: dereferencing pointer to incomplete type
    af->l_pid = slp->pid;
      ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:851:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_UNLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:855:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_RDLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:857:4: 
error: dereferencing pointer to incomplete type
   af->l_type = F_WRLCK;
     ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:858:7: 
error: dereferencing pointer to incomplete type
      af->l_pid = 0;
        ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:864:7: 
error: dereferencing pointer to incomplete type
      af->l_whence = 0;
        ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:865:7: 
error: dereferencing pointer to incomplete type
      af->l_start = 0;
        ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:866:7: 
error: dereferencing pointer to incomplete type
      af->l_len = 0;  /* to end of file */
        ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:687:22: 
warning: unused variable 'flock' [-Wunused-variable]
      struct AFS_FLOCK flock;
                       ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c: 
At top level:
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:32:12: 
warning: 'HandleGetLock' used but never defined [enabled by default]
  static int HandleGetLock(struct vcache *avc,
             ^
/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.c:683:1: 
warning: 'HandleGetLock' defined but not used [-Wunused-function]
  HandleGetLock(struct vcache *avc, struct AFS_FLOCK *af,
  ^
make[6]: *** 
[/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP/afs_vnop_flock.o] 
Error 1
make[5]: *** 
[_module_/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP] 
Error 2
make[5]: Leaving directory `/usr/src/linux-headers-3.13.0-34-generic'
rm .makelog
cp libafs.ko libafs-3.13.0-34-generic.mp.ko
cp: cannot stat 'libafs.ko': No such file or directory
make[4]: *** [libafs-3.13.0-34-generic.mp.ko] Error 1
make[4]: Leaving directory 
`/home/mwaltz/git/openafs/src/libafs/MODLOAD-3.13.0-34-generic-MP'
make[3]: *** [linux_compdirs] Error 2
make[3]: Leaving directory `/home/mwaltz/git/openafs/src/libafs'
make[2]: *** [libafs] Error 2
make[2]: Leaving directory `/home/mwaltz/git/openafs'
make[1]: *** [build] Error 2
make[1]: Leaving directory `/home/mwaltz/git/openafs'
make: *** [all] Error 2

-- 
Micheal Waltz
Unix Configuration Management (go/ucm)
Qualcomm Inc.
Phone: 858-845-6083
Cell: 858-882-7079


--------------010408000801010606060204
Content-Type: text/x-patch; name="aarch64-openafs-stable-1_6_9.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="aarch64-openafs-stable-1_6_9.patch"

diff --git a/README b/README
index 9ea0509..4e09f54 100644
--- a/README
+++ b/README
@@ -36,7 +36,7 @@ A  Configuring
       amd64_fbsd_53 (client does not work)
       amd64_linux24, amd64_linux26
       amd64_nbsd20, amd64_nbsd30, amd64_nbsd40
-      arm_linux24, arm_linux26
+      arm_linux24, arm_linux26, arm64_linux26
       hp_ux11i, hp_ux110, hp_ux1123 (See notes below for information on
          getting missing header)
       hp_ux102 (Client port possible, but db servers and utilities work)
diff --git a/acinclude.m4 b/acinclude.m4
index 012d5a4..10e9b7f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -670,6 +670,9 @@ else
 		arm*-linux*)
 			AFS_SYSNAME="arm_linuxXX"
 			;;
+		aarch64-*-linux*)
+			AFS_SYSNAME="arm64_linuxXX"
+			;;
 		parisc-*-linux-gnu|hppa-*-linux-gnu)
 			AFS_SYSNAME="parisc_linuxXX"
 			enable_pam="no"
diff --git a/build-tools/config.guess b/build-tools/config.guess
index c2246a4..f833f40 100755
--- a/build-tools/config.guess
+++ b/build-tools/config.guess
@@ -159,7 +159,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
 	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
+	    arm*|aarch64*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
@@ -168,7 +168,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# The Operating System including object format, if it has switched
 	# to ELF recently, or will in the future.
 	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+	    arm*|aarch64*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
 			| grep -q __ELF__
@@ -872,7 +872,7 @@ EOF
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
 	exit ;;
-    arm*:Linux:*:*)
+    arm*:Linux:*:*|aarch64*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
diff --git a/build-tools/config.sub b/build-tools/config.sub
index c2d1257..4492372 100755
--- a/build-tools/config.sub
+++ b/build-tools/config.sub
@@ -249,7 +249,7 @@ case $basic_machine in
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| arc | aarch64 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
@@ -331,7 +331,7 @@ case $basic_machine in
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| aarch64-* | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
diff --git a/src/cf/osconf.m4 b/src/cf/osconf.m4
index 02d2725..2bdffa2 100644
--- a/src/cf/osconf.m4
+++ b/src/cf/osconf.m4
@@ -75,7 +75,7 @@ case $AFS_SYSNAME in
 		SHLIB_LINKER="${MT_CC} -shared"
 		;;
 
-	arm_linux24 | arm_linux26)
+	arm_linux24 | arm_linux26 | arm64_linux26)
 		CCOBJ="${CC} -fPIC"
 		KERN_OPTMZ=-O2
 		MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
diff --git a/src/config/afs_sysnames.h b/src/config/afs_sysnames.h
index 62b18f3..3894086 100644
--- a/src/config/afs_sysnames.h
+++ b/src/config/afs_sysnames.h
@@ -328,6 +328,8 @@
 #define SYS_NAME_ID_arm_linux24         3802
 #define SYS_NAME_ID_arm_linux26         3803
 
+#define SYS_NAME_ID_arm64_linux26       3804
+
 #define SYS_NAME_ID_i386_dfbsd_22        3900
 #define SYS_NAME_ID_i386_dfbsd_23        3901
 #define SYS_NAME_ID_i386_dfbsd_24        3902
diff --git a/src/config/param.arm64_linux26.h b/src/config/param.arm64_linux26.h
new file mode 100644
index 0000000..70197f7
--- /dev/null
+++ b/src/config/param.arm64_linux26.h
@@ -0,0 +1,34 @@
+/*
+ * 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
+
+#ifndef UKERNEL
+
+/* This section for kernel libafs compiles only */
+#define AFS_ARM64_LINUX26_ENV	1
+
+#else /* !defined(UKERNEL) */
+
+/* This section for user space compiles only */
+#define UKERNEL			1	/* user space kernel */
+
+#endif /* !defined(UKERNEL) */
+
+/* Machine / Operating system information */
+#define SYS_NAME		"arm64_linux26"
+#define SYS_NAME_ID		SYS_NAME_ID_arm64_linux26
+#define AFSLITTLE_ENDIAN	1
+#define AFS_SYSCALL 		137
+#ifndef __NR_afs_syscall
+#define __NR_afs_syscall 137
+#endif
+
+#endif /* AFS_PARAM_H */
diff --git a/src/packaging/Debian/control b/src/packaging/Debian/control
index 4019d85..9da3200 100644
--- a/src/packaging/Debian/control
+++ b/src/packaging/Debian/control
@@ -13,7 +13,7 @@ Vcs-Git: git://git.debian.org/git/pkg-k5-afs/openafs.git
 Vcs-Browser: http://git.debian.org/?p=pkg-k5-afs/openafs.git
 
 Package: openafs-client
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Recommends: lsof, openafs-modules-dkms (>= ${source:Version})
  | openafs-modules-source (>= ${source:Version})
@@ -32,7 +32,7 @@ Description: AFS distributed filesystem client support
 
 Package: openafs-fuse
 Priority: extra
-Architecture: alpha amd64 arm armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm64 arm arm64 armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends},
  openafs-client (= ${binary:Version})
 Description: AFS distributed file system experimental FUSE client
@@ -48,7 +48,7 @@ Description: AFS distributed file system experimental FUSE client
 
 Package: openafs-kpasswd
 Priority: extra
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends},
  openafs-client (= ${binary:Version})
 Conflicts: krb5-user, heimdal-clients, kerberos4kth-clients
@@ -63,7 +63,7 @@ Description: AFS distributed filesystem old password changing
  package for new cells or for cells using Kerberos v5.
 
 Package: openafs-fileserver
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends}, openafs-client, lsb-base
 Recommends: ntp | time-daemon
 Suggests: openafs-doc
@@ -76,7 +76,7 @@ Description: AFS distributed filesystem file server
  installed on any machine that will export files into AFS.
 
 Package: openafs-dbserver
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${perl:Depends}, ${misc:Depends},
  openafs-fileserver, openafs-client (= ${binary:Version})
 Suggests: openafs-doc
@@ -102,7 +102,7 @@ Description: AFS distributed filesystem documentation
  protocol documentation, and other OpenAFS documentation.
 
 Package: openafs-krb5
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Breaks: openafs-client (<< 1.4.7.dfsg1-1)
 Description: AFS distributed filesystem Kerberos 5 integration
@@ -117,7 +117,7 @@ Description: AFS distributed filesystem Kerberos 5 integration
 
 Package: libkopenafs1
 Section: libs
-Architecture: alpha amd64 arm armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: AFS distributed file system runtime library (PAGs)
  AFS is a distributed filesystem allowing cross-platform sharing of
@@ -130,7 +130,7 @@ Description: AFS distributed file system runtime library (PAGs)
 
 Package: libafsauthent1
 Section: libs
-Architecture: alpha amd64 arm armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: AFS distributed file system runtime library (authentication)
  AFS is a distributed filesystem allowing cross-platform sharing of
@@ -142,7 +142,7 @@ Description: AFS distributed file system runtime library (authentication)
 
 Package: libafsrpc1
 Section: libs
-Architecture: alpha amd64 arm armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 lpia powerpc ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: AFS distributed file system runtime library (RPC layer)
  AFS is a distributed filesystem allowing cross-platform sharing of
@@ -155,7 +155,7 @@ Description: AFS distributed file system runtime library (RPC layer)
 Package: libopenafs-dev
 Section: libdevel
 Priority: extra
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${shlibs:Depends}, ${misc:Depends},
  libafsauthent1 (= ${binary:Version}), libafsrpc1 (= ${binary:Version}),
  libkopenafs1 (= ${binary:Version}),
@@ -199,7 +199,7 @@ Description: AFS distributed filesystem kernel module DKMS source
  approriate configuration for DKMS to build new modules dynamically.
 
 Package: libpam-openafs-kaserver
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Section: admin
 Priority: extra
 Depends: ${shlibs:Depends}, ${misc:Depends},
@@ -217,7 +217,7 @@ Description: AFS distributed filesystem kaserver PAM module
 Package: openafs-dbg
 Section: debug
 Priority: extra
-Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
+Architecture: alpha amd64 arm arm64 armel i386 ia64 powerpc powerpcspe ppc64 s390 s390x sparc
 Depends: ${misc:Depends}, openafs-fileserver (= ${binary:Version})
  | openafs-dbserver (= ${binary:Version})
 Description: AFS distributed filesystem debugging information
diff --git a/src/packaging/Debian/module/sysname b/src/packaging/Debian/module/sysname
index 3762999..7a9a171 100755
--- a/src/packaging/Debian/module/sysname
+++ b/src/packaging/Debian/module/sysname
@@ -31,6 +31,13 @@ arm|armel|armv5tel)
         ;;
     esac
     ;;
+arm64)
+    case $KVERS in
+    2.6*)
+        echo arm64_linux26
+        ;;
+    esac
+    ;;
 i[3456]86)
     case $KVERS in
     2.2*)
diff --git a/src/packaging/Debian/sysname b/src/packaging/Debian/sysname
index 4827127..e7c9fe8 100755
--- a/src/packaging/Debian/sysname
+++ b/src/packaging/Debian/sysname
@@ -12,6 +12,9 @@ alpha)
 arm|armel|armv5tel)
     echo arm_linux26
     ;;
+arm64)
+    echo arm64_linux26
+    ;;
 amd64)
     echo amd64_linux26
     ;;

--------------010408000801010606060204--