[53942.285452] mdio_bus ffe4fc000: timeout waiting for operation to complete
[53942.292272] xgmac_wait_until_done: timeout.
[53942.296477] PID : 564
[53942.298761] Task state: 0
[53942.301379] Task name: kworker/4:1
[53942.304807] Start time:(null) 19140110
[53942.308572]
[53942.310064] CPU: 4 PID: 564 Comm: kworker/4:1 Tainted: P O 3.10.103-EMBSYS-CGEL-5.03.20.P4.B0 #2
[53942.319757] Workqueue: events .phy_state_machine
[53942.324397] Call Trace:
[53942.326866] [c0000001f29e77a0] [c000000000009c5c] .show_stack+0x8c/0x1f0 (unreliable)
[53942.334749] [c0000001f29e7870] [c00000000088a238] .dump_stack+0x28/0x3c
[53942.341399] [c0000001f29e78e0] [c0000000004f3360] .xgmac_wait_until_done+0x150/0x170
[53942.349181] [c0000001f29e7950] [c0000000004eeba0] .mdiobus_write+0x70/0xb0
[53942.356090] [c0000001f29e79f0] [c0000000004f0f04] .phy_bcm542xx_rdb_reg_read+0x34/0x80
[53942.364043] [c0000001f29e7a80] [c0000000004f1260] .bcm54240_read_status+0x90/0x3d0
[53942.371652] [c0000001f29e7b20] [c0000000004ec060] .phy_state_machine+0x180/0x990
[53942.379084] [c0000001f29e7bc0] [c000000000064508] .process_one_work+0x1a8/0x520
[53942.386434] [c0000001f29e7c60] [c000000000065200] .worker_thread+0x170/0x490
[53942.393521] [c0000001f29e7d30] [c00000000006f564] .kthread+0xd4/0xe0
[53942.399907] [c0000001f29e7e30] [c000000000000888] .ret_from_kernel_thread+0x5c/0xd4
[53942.407591] phy_error: state 9, link 1
[53943.411090] phy_state_machine: phy 5 get into PHY_RESUMING
[53944.414896] Unable to handle kernel paging request for data at address 0x00000000
[53944.422562] Faulting instruction address: 0xc0000000004f0f24
[53944.430630] Oops: Kernel access of bad area, sig: 11 [#1]
[53944.436065] SMP NR_CPUS=24 CoreNet Generic
[53944.440216] Modules linked in: linux_user_bde(PO) linux_kernel_bde(PO)
[53944.446873] CPU: 4 PID: 564 Comm: kworker/4:1 Tainted: P O 3.10.103-EMBSYS-CGEL-5.03.20.P4.B0 #2
[53944.456634] Workqueue: events .phy_state_machine
[53944.461304] task: c0000001f943e340 ti: c0000001f29e4000 task.ti: c0000001f29e4000
[53944.468821] NIP: c0000000004f0f24 LR: c0000000004f0f20 CTR: c0000000004f3520
[53944.475905] REGS: c0000001f29e77a0 TRAP: 0300 Tainted: P O (3.10.103-EMBSYS-CGEL-5.03.20.P4.B0)
[53944.485769] MSR: 0000000080029000 <CE,EE,ME> CR: 24ad2e24 XER: 00000000
[53944.492779] SOFTE: 1
[53944.495042] DEAR: 0000000000000000, ESR: 0000000000800000
[53944.500507]
[53944.500507] GPR00: c0000000004f0f20 c0000001f29e7a20 c00000000302bd00 000000000000243e
[53944.500507] GPR04: 80000800801a4000 000000000000001f 0000000000000000 80000800801a4038
[53944.500507] GPR08: c000000002f3bd00 0000000000000001 0000000000000000 c000000000011e10
[53944.500507] GPR12: 0000000024ad2e22 c00000000fff5e00 c00000000006f490 c0000001f91efa70
[53944.500507] GPR16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
[53944.500507] GPR20: 0000000000000000 0000000000000000 0000000000000001 c000000002f2faef
[53944.500507] GPR24: 0000000000000001 fffffffffffffef7 0000000000000000 c00000000a284d00
[53944.500507] GPR28: 0000000000000000 0000000000000000 0000000000000000 c0000001f2ef0800
[53944.557794] NIP [c0000000004f0f24] .phy_bcm542xx_rdb_reg_read+0x54/0x80
[53944.564516] LR [c0000000004f0f20] .phy_bcm542xx_rdb_reg_read+0x50/0x80
[53944.571084] Call Trace:
[53944.573606] [c0000001f29e7a20] [c0000000004f0f20] .phy_bcm542xx_rdb_reg_read+0x50/0x80 (unreliable)
[53944.582786] [c0000001f29e7ab0] [c0000000004f0f68] .bcm54240_ack_interrupt+0x18/0x30
[53944.590591] [c0000001f29e7b20] [c0000000004ec128] .phy_state_machine+0x248/0x990
[53944.598086] [c0000001f29e7bc0] [c000000000064508] .process_one_work+0x1a8/0x520
[53944.605509] [c0000001f29e7c60] [c000000000065200] .worker_thread+0x170/0x490
[53944.612680] [c0000001f29e7d30] [c00000000006f564] .kthread+0xd4/0xe0
[53944.619126] [c0000001f29e7e30] [c000000000000888] .ret_from_kernel_thread+0x5c/0xd4
[53944.626837] Instruction dump:
[53944.629864] 38a0001e e8630008 e89f01d2 4bffdc31 60000000 7c7e1b79 40e2001c e87f0008
[53944.637865] 38a0001f e89f01d2 4bffdb75 60000000 <b07d0000> 38210090 7fc3f378 e8010010
[53944.646064] ---[ end trace 43d5cfd1902210ed ]---
[53944.650713]
[53944.652667] Unable to handle kernel paging request for data at address 0xffffffffffffffd8
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0000000000000bf0 <.phy_bcm542xx_rdb_reg_read>:
bf0: 7c 08 02 a6 mflr r0
bf4: fb a1 ff e8 std r29,-24(r1)
bf8: fb c1 ff f0 std r30,-16(r1)
bfc: 7c 86 23 78 mr r6,r4
c00: fb e1 ff f8 std r31,-8(r1)
c04: 7c 7f 1b 78 mr r31,r3
c08: f8 01 00 10 std r0,16(r1)
c0c: 7c bd 2b 78 mr r29,r5
c10: f8 21 ff 71 stdu r1,-144(r1)
c14: 38 a0 00 1e li r5,30
c18: e8 63 00 08 ld r3,8(r3)
c1c: e8 9f 01 d2 lwa r4,464(r31)
c20: 48 00 00 01 bl c20 <.phy_bcm542xx_rdb_reg_read+0x30>
c24: 60 00 00 00 nop
c28: 7c 7e 1b 79 mr. r30,r3
c2c: 40 e2 00 1c bne+ c48 <.phy_bcm542xx_rdb_reg_read+0x58>
c30: e8 7f 00 08 ld r3,8(r31)
c34: 38 a0 00 1f li r5,31
c38: e8 9f 01 d2 lwa r4,464(r31)
c3c: 48 00 00 01 bl c3c <.phy_bcm542xx_rdb_reg_read+0x4c>
c40: 60 00 00 00 nop
c44: b0 7d 00 00 sth r3,0(r29)
c48: 38 21 00 90 addi r1,r1,144
c4c: 7f c3 f3 78 mr r3,r30
c50: e8 01 00 10 ld r0,16(r1)
c54: eb a1 ff e8 ld r29,-24(r1)
c58: eb c1 ff f0 ld r30,-16(r1)
c5c: eb e1 ff f8 ld r31,-8(r1)
c60: 7c 08 03 a6 mtlr r0
c64: 4e 80 00 20 blr
c68: 60 00 00 00 nop
c6c: 60 00 00 00 nop
0000000000000c70 <.bcm54240_ack_interrupt>:
c70: 7c 08 02 a6 mflr r0
c74: 38 80 00 0a li r4,10
c78: f8 01 00 10 std r0,16(r1)
c7c: 38 a0 00 00 li r5,0
c80: f8 21 ff 91 stdu r1,-112(r1)
c84: 48 00 00 01 bl c84 <.bcm54240_ack_interrupt+0x14>
c88: 38 21 00 70 addi r1,r1,112
c8c: e8 01 00 10 ld r0,16(r1)
c90: 38 60 00 00 li r3,0
c94: 7c 08 03 a6 mtlr r0
c98: 4e 80 00 20 blr
c9c: 60 00 00 00 nop
int phy_bcm542xx_rdb_reg_read(struct phy_device *phydev,
unsigned short reg_addr, unsigned short *data)
{
bf0: 7c 08 02 a6 mflr r0
bf4: fb a1 ff e8 std r29,-24(r1)
bf8: fb c1 ff f0 std r30,-16(r1)
bfc: 7c 86 23 78 mr r6,r4
c00: fb e1 ff f8 std r31,-8(r1)
c04: 7c 7f 1b 78 mr r31,r3
c08: f8 01 00 10 std r0,16(r1)
c0c: 7c bd 2b 78 mr r29,r5
c10: f8 21 ff 71 stdu r1,-144(r1)
c14: 38 a0 00 1e li r5,30
c18: e8 63 00 08 ld r3,8(r3)
c1c: e8 9f 01 d2 lwa r4,464(r31)
c20: 48 00 00 01 bl c20 <.phy_bcm542xx_rdb_reg_read+0x30>
c24: 60 00 00 00 nop
int rv = 0;
/* MDIO write the RDB reg. address to reg.0x1E = <reg_addr> */
rv = phy_write(phydev,PHY_BCM542XX_RDB_ADDR_REG_OFFSET,
PHY_BCM542XX_RDB_ADDR_REG_ADDR & reg_addr);
if ( 0 == rv )
c28: 7c 7e 1b 79 mr. r30,r3
c2c: 40 e2 00 1c bne+ c48 <.phy_bcm542xx_rdb_reg_read+0x58>
* because the bus read/write functions may wait for an interrupt
* to conclude the operation.
*/
static inline int phy_read(struct phy_device *phydev, u32 regnum)
{
return mdiobus_read(phydev->bus, phydev->addr, regnum);
c30: e8 7f 00 08 ld r3,8(r31)
c34: 38 a0 00 1f li r5,31
c38: e8 9f 01 d2 lwa r4,464(r31)
c3c: 48 00 00 01 bl c3c <.phy_bcm542xx_rdb_reg_read+0x4c>
c40: 60 00 00 00 nop
{
/* MDIO read from reg.0x1F to get the RDB register's value as <data> */
*data = phy_read(phydev,PHY_BCM542XX_RDB_DATA_REG_OFFSET);
c44: b0 7d 00 00 sth r3,0(r29) 这里r3为函数返回值
}
return (rv);
}
c48: 38 21 00 90 addi r1,r1,144
c4c: 7f c3 f3 78 mr r3,r30
c50: e8 01 00 10 ld r0,16(r1)
c54: eb a1 ff e8 ld r29,-24(r1)
c58: eb c1 ff f0 ld r30,-16(r1)
c5c: eb e1 ff f8 ld r31,-8(r1)
c60: 7c 08 03 a6 mtlr r0
c64: 4e 80 00 20 blr
c68: 60 00 00 00 nop
c6c: 60 00 00 00 nop
定位:
1.首先反汇编phy_bcm542xx_rdb_reg_read函数所在的.o文件。
ppc64_e6500-hardfloat-linux-gnu-objdump -D sem.o > sem.dis
ppc64_e6500-hardfloat-linux-gnu-objdump -S sem.o > sem.dis
-D只生成汇编文件,-S会生成结合C语言的汇编文件,两个文件可以结合看。
2.根据 phy_bcm542xx_rdb_reg_read+0x50/0x80 (unreliable) 确定程序出错的地方。
0x50:代表出错的语句在phy_bcm542xx_rdb_reg_read函数的偏移。(0xbf0+0x50=0xc40)
0x80:代表phy_bcm542xx_rdb_reg_read函数的总长度。(0x80=0xc70-0xbf0)
int phy_bcm542xx_rdb_reg_read(struct phy_device *phydev, /* MDIO write the RDB reg. address to reg.0x1E = <reg_addr> */ return (rv); |