oops

[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,
                                                              unsigned short reg_addr, unsigned short *data)
{
    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 ) 
   {
        /* MDIO read from reg.0x1F to get the RDB register's value as <data> */
        *data = phy_read(phydev,PHY_BCM542XX_RDB_DATA_REG_OFFSET);
    }

    return (rv);
}

猜你喜欢

转载自blog.csdn.net/u014426028/article/details/109367104
今日推荐