[OpenAFS-devel] Panic with 1.2.4-rc1 on ia64

Michael Blandford mlblandf@sedona.ch.intel.com
Thu, 02 May 2002 12:44:40 -0700


This is a multi-part message in MIME format.
--------------010803030803030608030708
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

chas williams wrote:
>>I have been playing with rc1 and am getting a panic.  I was not having a 
>>panic with the 4/18 snapshot.
> 
> 
> i think i see the problem.  gcc says:
> 

:) Things are looking much better again.  I have to say Chas is saving 
the world ( mine at least )

Here is the current patch I am using.

Michael

-- 
  Intel, Corp.
  5000 W. Chandler Blvd.
  Chandler, AZ  85226

--------------010803030803030608030708
Content-Type: text/plain;
 name="afs.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="afs.patch"

diff -urN openafs-1.2.4rc1/src/afs/LINUX/osi_module.c openafs-1.2.4rc1.new/src/afs/LINUX/osi_module.c
--- openafs-1.2.4rc1/src/afs/LINUX/osi_module.c	Tue Apr 23 06:46:55 2002
+++ openafs-1.2.4rc1.new/src/afs/LINUX/osi_module.c	Thu May  2 09:57:30 2002
@@ -89,53 +89,74 @@
 #endif
 
 #ifdef AFS_IA64_LINUX20_ENV
-unsigned char ia64_syscall_stub[] =
-{
-  0x00, 0x50, 0x45, 0x16, 0x80, 0x05,   //  [MII]  alloc r42=ar.pfs,8,3,6,0
-  0x90, 0x02, 0x00, 0x62, 0x00, 0x60,   //         mov r41=b0
-  0x05, 0x00, 0x01, 0x84,               //         mov r43=r32
-  0x00, 0x60, 0x01, 0x42, 0x00, 0x21,   //  [MII]  mov r44=r33
-  0xd0, 0x02, 0x88, 0x00, 0x42, 0xc0,   //         mov r45=r34
-  0x05, 0x18, 0x01, 0x84,               //         mov r46=r35
-  0x0d, 0x78, 0x01, 0x48, 0x00, 0x21,   //  [MFI]  mov r47=r36
-  0x00, 0x00, 0x00, 0x02, 0x00, 0x00,   //         nop.f 0x0
-  0x06, 0x08, 0x00, 0x84,               //         mov r48=gp;;
-  0x05, 0x00, 0x00, 0x00, 0x01, 0x00,   //  [MLX]  nop.m 0x0
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,   //         movl r15=0x0;;
-  0x01, 0x00, 0x00, 0x60,               //
-  0x0a, 0x80, 0x20, 0x1e, 0x18, 0x14,   //  [MMI]  ld8 r16=[r15],8;;
-  0x10, 0x00, 0x3c, 0x30, 0x20, 0xc0,   //         ld8 gp=[r15]
-  0x00, 0x09, 0x00, 0x07,               //         mov b6=r16
-  0x1d, 0x00, 0x00, 0x00, 0x01, 0x00,   //  [MFB]  nop.m 0x0
-  0x00, 0x00, 0x00, 0x02, 0x00, 0x00,   //         nop.f 0x0
-  0x68, 0x00, 0x00, 0x10,               //         br.call.sptk.many b0=b6;;
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x00,   //  [MII]  nop.m 0x0
-  0x00, 0x50, 0x01, 0x55, 0x00, 0x00,   //         mov.i ar.pfs=r42
-  0x90, 0x0a, 0x00, 0x07,               //         mov b0=r41
-  0x1d, 0x08, 0x00, 0x60, 0x00, 0x21,   //  [MFB]  mov gp=r48
-  0x00, 0x00, 0x00, 0x02, 0x00, 0x80,   //         nop.f 0x0
-  0x08, 0x00, 0x84, 0x00                //         br.ret.sptk.many b0;;
-};
 
-void ia64_imm64_fixup(unsigned long v, void *code)
+asmlinkage long
+afs_syscall_stub(int r0, int r1, long r2, long r3, long r4, long gp)
 {
-        unsigned long *bundle = (unsigned long *) code;
-
-        unsigned long insn;
-        unsigned long slot1;
-
-        insn = ((v & 0x8000000000000000) >> 27) | ((v & 0x0000000000200000)) |
-           ((v & 0x00000000001f0000) <<  6) | ((v & 0x000000000000ff80) << 20) |
-           ((v & 0x000000000000007f) << 13);
-
-        slot1 = (v & 0x7fffffffffc00000) >> 22;
-
-        *bundle |= slot1 << 46;
-        *(bundle+1) |= insn << 23;
-        *(bundle+1) |= slot1 >> 18;
+__asm__ __volatile__ ("
+        alloc r42 = ar.pfs, 8, 3, 6, 0
+        mov r41 = b0    		/* save rp */
+        mov out0 = in0
+        mov out1 = in1
+        mov out2 = in2
+        mov out3 = in3
+        mov out4 = in4
+        mov out5 = gp			/* save gp */
+        ;;
+.L1:    mov r3 = ip
+        ;;
+        addl r15=.fptr_afs_syscall-.L1,r3
+        ;;
+        ld8 r15=[r15]
+        ;;
+        ld8 r16=[r15],8
+        ;;
+        ld8 gp=[r15]
+        mov b6=r16
+        br.call.sptk.many b0 = b6
+        ;;
+        mov ar.pfs = r42
+        mov b0 = r41
+        mov gp = r48			/* restore gp */
+        br.ret.sptk.many b0
+.fptr_afs_syscall:
+        data8 @fptr(afs_syscall)
+");
 }
 
-unsigned char *afs_syscall_stub, *afs_xsetgroups_stub;
+asmlinkage long
+afs_xsetgroups_stub(int r0, int r1, long r2, long r3, long r4, long gp)
+{
+__asm__ __volatile__ ("
+        alloc r42 = ar.pfs, 8, 3, 6, 0
+        mov r41 = b0    		/* save rp */
+        mov out0 = in0
+        mov out1 = in1
+        mov out2 = in2
+        mov out3 = in3
+        mov out4 = in4
+        mov out5 = gp			/* save gp */
+        ;;
+.L2:    mov r3 = ip
+        ;;
+        addl r15=.fptr_afs_xsetgroups - .L2,r3
+        ;;
+        ld8 r15=[r15]
+        ;;
+        ld8 r16=[r15],8
+        ;;
+        ld8 gp=[r15]
+        mov b6=r16
+        br.call.sptk.many b0 = b6
+        ;;
+        mov ar.pfs = r42
+        mov b0 = r41
+        mov gp = r48			/* restore gp */
+        br.ret.sptk.many b0
+.fptr_afs_xsetgroups:
+        data8 @fptr(afs_xsetgroups)
+");
+}
 
 struct fptr
 {
@@ -229,11 +250,7 @@
 
 #if defined(AFS_IA64_LINUX20_ENV)
     afs_ni_syscall = sys_call_table[__NR_afs_syscall - 1024];
-
-    afs_syscall_stub = (void *) kmalloc(sizeof(ia64_syscall_stub), GFP_KERNEL);
-    memcpy(afs_syscall_stub, ia64_syscall_stub, sizeof(ia64_syscall_stub));
-    ia64_imm64_fixup((unsigned long)afs_syscall, afs_syscall_stub+0x30);
-    sys_call_table[__NR_afs_syscall - 1024] = POINTER2SYSCALL afs_syscall_stub;
+    sys_call_table[__NR_afs_syscall - 1024] = POINTER2SYSCALL ((struct fptr *)afs_syscall_stub)->ip;
 #else /* AFS_IA64_LINUX20_ENV */
     afs_ni_syscall = sys_call_table[__NR_afs_syscall];
     sys_call_table[__NR_afs_syscall] = POINTER2SYSCALL afs_syscall;
@@ -250,15 +267,11 @@
 #if defined(AFS_IA64_LINUX20_ENV)
     sys_setgroupsp = (void *) &sys_setgroups;
 
-    afs_xsetgroups_stub = (void *) kmalloc(sizeof(ia64_syscall_stub), GFP_KERNEL);
-    memcpy(afs_xsetgroups_stub, ia64_syscall_stub, sizeof(ia64_syscall_stub));
-    ia64_imm64_fixup((unsigned long)afs_xsetgroups, afs_xsetgroups_stub+0x30);
-
     ((struct fptr *)sys_setgroupsp)->ip =
 		SYSCALL2POINTER sys_call_table[__NR_setgroups - 1024];
     ((struct fptr *)sys_setgroupsp)->gp = kernel_gp;
 
-    sys_call_table[__NR_setgroups - 1024] = POINTER2SYSCALL afs_xsetgroups_stub;
+    sys_call_table[__NR_setgroups - 1024] = POINTER2SYSCALL ((struct fptr *)afs_xsetgroups_stub)->ip;
 #else /* AFS_IA64_LINUX20_ENV */
     sys_setgroupsp = SYSCALL2POINTER sys_call_table[__NR_setgroups];
     sys_call_table[__NR_setgroups] = POINTER2SYSCALL afs_xsetgroups;
diff -urN openafs-1.2.4rc1/src/afs/LINUX/osi_vnodeops.c openafs-1.2.4rc1.new/src/afs/LINUX/osi_vnodeops.c
--- openafs-1.2.4rc1/src/afs/LINUX/osi_vnodeops.c	Tue Apr 23 18:49:38 2002
+++ openafs-1.2.4rc1.new/src/afs/LINUX/osi_vnodeops.c	Thu May  2 10:23:38 2002
@@ -33,6 +33,7 @@
 #if defined(AFS_LINUX24_ENV)
 #include "../h/smp_lock.h"
 #endif
+#include "../afs/afs_osidnlc.h"
 
 #ifdef pgoff2loff
 #define pageoff(pp) pgoff2loff((pp)->index)
diff -urN openafs-1.2.4rc1/Makefile.in openafs-1.2.4rc1.new/Makefile.in
--- openafs-1.2.4rc1/Makefile.in	Mon Apr 22 20:22:29 2002
+++ openafs-1.2.4rc1.new/Makefile.in	Mon Apr 29 17:27:18 2002
@@ -312,7 +312,7 @@
 		${COMPILE_PART1} sia ${COMPILE_PART2} ;; \
 	sun4x_55 ) \
 		${COMPILE_PART1} login ${COMPILE_PART2} ;; \
-	parisc_linux24|ia64_linux24) \
+	parisc_linux24) \
 		echo Skipping pam/login for parisc_linux24 ;; \
 	sun4x_* | hp_ux11* | *linux* | *fbsd* ) \
 		${COMPILE_PART1} pam ${COMPILE_PART2} ;; \
diff -urN openafs-1.2.4rc1/src/config/Makefile.ia64_linux24.in openafs-1.2.4rc1.new/src/config/Makefile.ia64_linux24.in
--- openafs-1.2.4rc1/src/config/Makefile.ia64_linux24.in	Mon Apr 22 20:22:34 2002
+++ openafs-1.2.4rc1.new/src/config/Makefile.ia64_linux24.in	Mon Apr 29 17:27:01 2002
@@ -14,7 +14,7 @@
 OPTMZ=-O2
 PAM_CFLAGS = -O2 -Dlinux -DLINUX_PAM -fPIC
 # Put -O2 here to _ensure_ all Makefiles pick it up.
-XCFLAGS= -O2
+XCFLAGS= -O2 -D_LARGEFILE64_SOURCE -G0
 MT_CFLAGS=-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}
 XLDFLAGS=
 SHARE_LDFLAGS = -shared -Xlinker -x

--------------010803030803030608030708--