• Anton Vorontsov's avatar
    ucc_geth: Fix oops when using fixed-link support · 61fa9dcf
    Anton Vorontsov authored
    commit b1c4a9dd ("ucc_geth: Change
    uec phy id to the same format as gianfar's") introduced a regression
    in the ucc_geth driver that causes this oops when fixed-link is used:
    
    Unable to handle kernel paging request for data at address 0x00000000
    Faulting instruction address: 0xc0151270
    Oops: Kernel access of bad area, sig: 11 [#1]
    TMCUTU
    NIP: c0151270 LR: c0151270 CTR: c0017760
    REGS: cf81fa60 TRAP: 0300   Not tainted  (2.6.29-rc8)
    MSR: 00009032 <EE,ME,IR,DR>  CR: 24024042  XER: 20000000
    DAR: 00000000, DSISR: 20000000
    TASK = cf81cba0[1] 'swapper' THREAD: cf81e000
    GPR00: c0151270 cf81fb10 cf81cba0 00000000 c0272e20 c025f354 00001e80
    cf86b08c
    GPR08: d1068200 cffffb74 06000000 d106c200 42024042 10085148 0fffd000
    0ffc81a0
    GPR16: 00000001 00000001 00000000 007ffeb0 00000000 0000c000 cf83f36c
    cf83f000
    GPR24: 00000030 cf83f360 cf81fb20 00000000 d106c200 20000000 00001e80
    cf83f360
    NIP [c0151270] ucc_geth_open+0x330/0x1efc
    LR [c0151270] ucc_geth_open+0x330/0x1efc
    Call Trace:
    [cf81fb10] [c0151270] ucc_geth_open+0x330/0x1efc (unreliable)
    [cf81fba0] [c0187638] dev_open+0xbc/0x12c
    [cf81fbc0] [c0187e38] dev_change_flags+0x8c/0x1b0
    
    This patch fixes the issue by removing offending (and somewhat
    duplicate) code from init_phy() routine, and changes _probe()
    function to use uec_mdio_bus_name().
    
    Also, since we fully construct phy_bus_id in the _probe() routine,
    we no longer need ->phy_address and ->mdio_bus fields in
    ucc_geth_info structure.
    
    I wish the patch would be a bit shorter, but it seems like the only
    way to fix the issue in a sane way. Luckily, the patch has been
    tested with real PHYs and fixed-link, so no further regressions
    expected.
    Reported-by: default avatarJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
    Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
    Tested-by: default avatarJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    61fa9dcf
ucc_geth.h 44 KB