Skip to content
  • Anton Vorontsov's avatar
    phylib: Fix oops in suspend/resume paths · 6f051069
    Anton Vorontsov authored
    
    
    Suspend/resume routines check for phydrv != NULL, but that is
    wrong because "phydrv" comes from container_of(drv). If drv is NULL,
    then container_of(drv) will return non-NULL result, and the checks
    won't work.
    
    The Freescale TBI PHYs are driver-less, so "drv" is NULL, and that
    leads to the following oops:
    
    Unable to handle kernel paging request for data at address 0xffffffe4
    Faulting instruction address: 0xc0215554
    Oops: Kernel access of bad area, sig: 11 [#1]
    [...]
    NIP [c0215554] mdio_bus_suspend+0x34/0x70
    LR [c01cc508] suspend_device+0x258/0x2bc
    Call Trace:
    [cfad3da0] [cfad3db8] 0xcfad3db8 (unreliable)
    [cfad3db0] [c01cc508] suspend_device+0x258/0x2bc
    [cfad3dd0] [c01cc62c] dpm_suspend+0xc0/0x140
    [cfad3e20] [c01cc6f4] device_suspend+0x48/0x5c
    [cfad3e40] [c0068dd8] suspend_devices_and_enter+0x8c/0x148
    [cfad3e60] [c00690f8] enter_state+0x100/0x118
    [cfad3e80] [c00691c0] state_store+0xb0/0xe4
    [cfad3ea0] [c018c938] kobj_attr_store+0x24/0x3c
    [cfad3eb0] [c00ea9a8] flush_write_buffer+0x58/0x7c
    [cfad3ed0] [c00eadf0] sysfs_write_file+0x58/0xa0
    [cfad3ef0] [c009e810] vfs_write+0xb4/0x16c
    [cfad3f10] [c009ed40] sys_write+0x4c/0x90
    [cfad3f40] [c0014954] ret_from_syscall+0x0/0x38
    [...]
    
    This patch fixes the issue, plus removes unneeded parentheses
    and fixes indentation level in mdio_bus_suspend().
    
    Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6f051069