Hi,
I tried to run XFS on IA64, but kernel panic occurs.
I got 11202000XFSdevel.patch.gz and compiled.
Then I run the kernel on IA64 machine which is provided by Intel. (2cpu, 1Gmem,
xfs on SCSI disk)
Mkfs works fine.
[root@luna aono]# mkfs -t xfs -b size=16384 -f /dev/sdc1
meta-data=/dev/sdc1 isize=256 agcount=8, agsize=8033 blks
data = bsize=16384 blocks=64258, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=0
naming =version 2 bsize=16384
log =internal log bsize=16384 blocks=1000
realtime =none extsz=65536 blocks=0, rtextents=0
However the kernel crashed at xlog_bread when I mounted the filesystem.
First, I trapped at xlog_bread and xfsbdstrat.
[root@luna aono]# mount -t xfs /dev/sdc1 /mnt/xfs
Instruction breakpoint #1 at 0xe0000000007db470
e0000000007db470 <xfsbdstrat>: [MII] alloc r37=ar.pfs,9,6,0
e0000000007db471 <xfsbdstrat+0x1>: addl r14=1055048,r1
e0000000007db472 <xfsbdstrat+0x2>: mov r36=b0
Entering kdb (0x31e88000) on processor 0 [0]kdb> go
Start mounting filesystem: sd(8,33)
Instruction breakpoint #0 at 0xe0000000007804a0
e0000000007804a0 <xlog_bread>: [MII] alloc r43=ar.pfs,16,12,0
e0000000007804a1 <xlog_bread+0x1>: addl r14=1055048,r1
e0000000007804a2 <xlog_bread+0x2>: mov r42=b0
Entering kdb (0x31e88000) on processor 0 [0]kdb> go
Instruction breakpoint #1 at 0xe0000000007db470
e0000000007db470 <xfsbdstrat>: [MII] alloc r37=ar.pfs,9,6,0
e0000000007db471 <xfsbdstrat+0x1>: addl r14=1055048,r1
e0000000007db472 <xfsbdstrat+0x2>: mov r36=b0
Entering kdb (0x31e88000) on processor 0 [0]kdb> go
Instruction breakpoint #0 at 0xe0000000007804a0
e0000000007804a0 <xlog_bread>: [MII] alloc r43=ar.pfs,16,12,0
e0000000007804a1 <xlog_bread+0x1>: addl r14=1055048,r1
e0000000007804a2 <xlog_bread+0x2>: mov r42=b0
Entering kdb (0x31e88000) on processor 0 [0]kdb> go
Unable to handle kernel paging request at virtual address 00000000000001d0
mount[300]: Oops 8813272891392
Entering kdb (0x31e88000) on processor 0 Panic: <NULL>
due to panic @ 0x7806d0
psr: 0x0000101008026030 ifs: 0x8000000000000610 ip: 0xe0000000007806d0
unat: 0x0000000000000000 pfs: 0x0000000000000590 rsc: 0x0000000000000003
rnat: 0x0000000000000590 bsps: 0x0000000000000003 pr: 0x000000000002e553
ldrs: 0x0000000000000000 ccv: 0x0000000000000000 fpsr: 0x0009804c8a70033f
b0: 0xe000000000782c30 b6: 0xe000000000502f70 b7: 0xe000000000521270
r1: 0xe000000000ce1e40 r2: 0xe000000031e8f970 r3: 0x000000000002e513
r8: 0x0000000000000000 r9: 0x0000000000000000 r10: 0x0000000000000000
r11: 0x600000000000c140 r12: 0xe000000031e8f9b0 r13: 0xe000000031e88000
r14: 0x00000000000001d0 r15: 0xe000000031d13840 r16: 0xe000000031d13810
r17: 0x0000000008000001 r18: 0xe000000031d13818 r19: 0x0000000000000200
r20: 0xe000000031e897b8 r21: 0x000000000002e593 r22: 0x000000003fe36dc0
r23: 0x80000000ffdf5f30 r24: 0x80000000ffdf5ee0 r25: 0x80000000ffdf5f40
r26: 0x000000003ff48010 r27: 0xe000000000de22d8 r28: 0xe000000000521270
r29: 0x0000000000000001 r30: 0xe000000000c94080 r31: 0x600000000000c110
®s = 0xe000000031e8f820
[0]kdb> bt
Ret Address (ip) Mem Stack (sp) Reg Stack (bsp) Name
0xe0000000007806d0: v+0x2000000000000000 v+0x3be60eb0 xlog_bread
bt command on IA64 seems not to work.
I disassembled the crashed point.
It seems the kernel crashed at before calling xfsbdstrat.
292: PCREL21B assfail
296: d0 02 3c 30 20 00 ld8 r45=[r15]
29c: 08 00 00 50 br.call.sptk.many b0=290
<xlog_bread+0x180>;;
2a0: 10 00 00 00 01 00 [MIB] nop.m 0x0
2a6: 00 00 00 02 00 00 nop.i 0x0
2ac: 20 00 00 40 br 2c0 <xlog_bread+0x1b0>
2b0: 00 00 00 00 01 00 [MII] nop.m 0x0
2b6: 40 22 d9 ac 29 00 dep.z r36=r36,9,23
2bc: 00 00 04 00 nop.i 0x0
2c0: 01 78 00 50 01 21 [MII] adds r15=128,r40
2c6: 70 42 95 00 42 00 adds r39=40,r37
2cc: 02 29 01 84 adds r16=16,r37;;
2d0: 04 70 00 1e 18 10 [MLX] ld8 r14=[r15]
2d6: 08 00 00 00 00 20 movl r17=0x8000001
2dc: 12 00 00 60
2e0: 02 00 00 00 01 00 [MII] nop.m 0x0
2e6: 30 01 90 2c 00 c0 sxt4 r19=r36;;
2ec: e1 48 01 80 add r14=r14,r41
2f0: 02 78 00 4b 00 21 [MII] adds r15=64,r37
2f6: 40 42 a3 00 42 00 adds r36=104,r40;;
2fc: 00 00 04 00 nop.i 0x0
300: 00 00 38 4e 98 11 [MII] st8 [r39]=r14
306: 20 c1 94 00 42 a0 adds r18=24,r37
30c: 05 28 01 84 mov r45=r37
310: 0b 70 00 20 10 10 [MMI] ld4 r14=[r16];;
316: e0 88 38 1c 40 00 or r14=r17,r14
31c: 00 00 04 00 nop.i 0x0;;
320: 08 00 38 20 90 11 [MMI] st4 [r16]=r14
326: 00 98 3c 30 23 00 st8 [r15]=r19
32c: 00 00 04 00 nop.i 0x0
330: 0b 70 00 48 18 10 [MMI] ld8 r14=[r36];;
336: e0 80 3a 06 42 00 adds r14=464,r14
33c: 00 00 04 00 nop.i 0x0;;
340: 0a 78 00 1c 18 10 [MMI] ld8 r15=[r14];; <- crashed
346: 00 78 48 30 23 00 st8 [r18]=r15
34c: 00 00 04 00 nop.i 0x0
350: 11 60 01 48 18 10 [MIB] ld8 r44=[r36]
352: PCREL21B xfsbdstrat
356: 00 00 00 02 00 00 nop.i 0x0
35c: 08 00 00 50 br.call.sptk.many b0=350
<xlog_bread+0x240>;;
360: 11 60 01 4a 00 21 [MIB] mov r44=r37
/*
* nbblks should be uint, but oh well. Just want to catch that 32-bit length.
*/
int
xlog_bread(xlog_t *log,
xfs_daddr_t blk_no,
int nbblks,
xfs_buf_t *bp)
{
int error;
ASSERT(log);
ASSERT(nbblks > 0);
ASSERT(BBTOB(nbblks) <= XFS_BUF_SIZE(bp));
ASSERT(bp);
XFS_BUF_SET_ADDR(bp, log->l_logBBstart + blk_no);
XFS_BUF_READ(bp);
XFS_BUF_BUSY(bp);
XFS_BUF_SET_COUNT(bp, BBTOB(nbblks));
XFS_BUF_SET_TARGET(bp, &log->l_mp->m_logdev_targ);
xfsbdstrat(log->l_mp, bp);
if (error = xfs_iowait(bp)) {
xfs_ioerror_alert("xlog_bread", log->l_mp,
XFS_BUF_TARGET(bp), XFS_BUF_ADDR(bp));
return (error);
}
return error;
} /* xlog_bread */
What is wrong? can you help me?
Hiroshi Aono, NEC Solutions
(h-aono@xxxxxxxxxxxxx)
|