• Nimrod Andy's avatar
    net: fec: avoid kernal crash by NULL pointer when no phy connection · 213a9922
    Nimrod Andy authored
    On i.MX6SX sabreauto board, when there have no phy daughter board connection,
    there have kernel crash by NULL pointer:
    
    fec 2188000.ethernet eth0: could not attach to PHY
    Unable to handle kernel NULL pointer dereference at virtual address 00000220
    pgd = 80004000
    [00000220] *pgd=00000000
    Internal error: Oops: 5 [#1] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.14.24-01042-g27eaeea-dirty #405
    task: d8078000 ti: d8076000 task.ti: d8076000
    PC is at mutex_lock+0x10/0x54
    LR is at phy_start+0x14/0x68
    pc : [<806ad4e4>]    lr : [<803b0f90>]    psr: 60000113
    sp : d8077d80  ip : 00000000  fp : d83cc000
    r10: 0000100c  r9 : d83cc800  r8 : 00000000
    r7 : d83bcd0c  r6 : 00000200  r5 : 00000220  r4 : 00000220
    r3 : 00000000  r2 : 00000000  r1 : d83bcd90  r0 : 00000220
    Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
    Control: 10c5387d  Table: 8000404a  DAC: 00000015
    Process swapper/0 (pid: 1, stack limit = 0xd8076240)
    Stack: (0xd8077d80 to 0xd8078000)
    7d80: 00000000 803b0f90 00000001 00000000 d83bc800 803be034 00000007 805c3fb4
    7da0: 00000003 80d4e0bc 805efcb8 fffffff1 fffffff0 00000000 00000000 d8077dfc
    7dc0: 0000000d 80d6ce80 80d126b0 800499c8 d83bc800 d83bc800 806f0f40 d83bc82c
    7de0: 00000000 00000000 80d6ce80 80d126b0 0000016b 80540250 d8076008 d83bc800
    7e00: 0000016b d83bc800 00001003 00000001 00001002 805404d4 d83bc800 00000120
    7e20: 00001002 00001002 00000000 805405d4 d83bc800 00000001 80d126c0 00001002
    7e40: 80dbc5dc 80d02024 00000000 806ae360 00000002 d6128420 d6127198 12400000
    7e60: 00000000 00000000 00000002 d61271e8 00000000 12400000 d801674c 800e49f0
    7e80: d6127198 d6124e58 00000000 80238848 d61271c4 00000000 00000001 d8016700
    7ea0: 80dd2e00 80d752c0 80d752c0 80cfdaec 0000010c 80239430 806c2e90 d800f080
    7ec0: d800f380 804e46b4 ffffffbc 80d15cb0 00000007 80d752c0 80d752c0 80d01e94
    7ee0: 0000010c d8076030 00000000 800088cc 80dbaba4 80bd411c d80a6f00 806b1e04
    7f00: 00000000 00000000 00000000 80125b84 00000000 80d2c56c 60000113 00000001
    7f20: ef7ff9df 806c80cc 0000010c 80043f5c 80c95eb8 00000007 ef7ffa1d 00000007
    7f40: 80d2c55c 80d15cb0 00000007 80d752c0 80d752c0 80ccc50c 0000010c 80d0a114
    7f60: 80d0a10c 80cccc04 00000007 00000007 80ccc50c 806ae410 00000000 8004cb84
    7f80: 80d17bc0 00000000 806a4bd4 00000000 00000000 00000000 00000000 00000000
    7fa0: 00000000 806a4bdc 00000000 8000e5f8 00000000 00000000 00000000 00000000
    7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    7fe0: 00000000 00000000 00000000 00000000 00000013 00000000 1e79a7bb e5337f77
    [<806ad4e4>] (mutex_lock) from [<803b0f90>] (phy_start+0x14/0x68)
    [<803b0f90>] (phy_start) from [<803be034>] (fec_enet_open+0x448/0x5dc)
    [<803be034>] (fec_enet_open) from [<80540250>] (__dev_open+0xa8/0x110)
    [<80540250>] (__dev_open) from [<805404d4>] (__dev_change_flags+0x88/0x170)
    [<805404d4>] (__dev_change_flags) from [<805405d4>] (dev_change_flags+0x18/0x48)
    [<805405d4>] (dev_change_flags) from [<80d02024>] (ip_auto_config+0x190/0xf94)
    [<80d02024>] (ip_auto_config) from [<800088cc>] (do_one_initcall+0xe8/0x144)
    [<800088cc>] (do_one_initcall) from [<80cccc04>] (kernel_init_freeable+0x104/0x1c8)
    [<80cccc04>] (kernel_init_freeable) from [<806a4bdc>] (kernel_init+0x8/0xec)
    [<806a4bdc>] (kernel_init) from [<8000e5f8>] (ret_from_fork+0x14/0x3c)
    Code: e92d4010 e3a03000 e1a04000 ee073fba (e1903f9f)
    
    Add phydev check to fix the issue.
    Signed-off-by: default avatarFugang Duan <B38611@freescale.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    213a9922
fec_main.c 84.5 KB