• Yonglong Liu's avatar
    net: hns: Fix WARNING when hns modules installed · c77804be
    Yonglong Liu authored
    Commit 308c6caf ("net: hns: All ports can not work when insmod hns ko
    after rmmod.") add phy_stop in hns_nic_init_phy(), In the branch of "net",
    this method is effective, but in the branch of "net-next", it will cause
    a WARNING when hns modules loaded, reference to commit 2b3e88ea ("net:
    phy: improve phy state checking"):
    [10.092168] ------------[ cut here ]------------
    [10.092171] called from state READY
    [10.092189] WARNING: CPU: 4 PID: 1 at ../drivers/net/phy/phy.c:854
    [10.092192] Modules linked in:
    [10.092197] CPU: 4 PID:1 Comm:swapper/0 Not tainted 4.20.0-rc7-next-20181220 #1
    [10.092200] Hardware name: Huawei TaiShan 2280 /D05, BIOS Hisilicon D05 UEFI
                    16.12 Release 05/15/2017
    [10.092202] pstate: 60000005 (nZCv daif -PAN -UAO)
    [10.092205] pc : phy_stop+0x90/0xb0
    [10.092208] lr : phy_stop+0x90/0xb0
    [10.092209] sp : ffff00001159ba90
    [10.092212] x29: ffff00001159ba90 x28: 0000000000000007
    [10.092215] x27: ffff000011180068 x26: ffff0000110a5620
    [10.092218] x25: ffff0000113b6000 x24: ffff842f96dac000
    [10.092221] x23: 0000000000000000 x22: 0000000000000000
    [10.092223] x21: ffff841fb8425e18 x20: ffff801fb3a56438
    [10.092226] x19: ffff801fb3a56000 x18: ffffffffffffffff
    [10.092228] x17: 0000000000000000 x16: 0000000000000000
    [10.092231] x15: ffff00001122d6c8 x14: ffff00009159b7b7
    [10.092234] x13: ffff00001159b7c5 x12: ffff000011245000
    [10.092236] x11: 0000000005f5e0ff x10: ffff00001159b750
    [10.092239] x9 : 00000000ffffffd0 x8 : 0000000000000465
    [10.092242] x7 : ffff0000112457f8 x6 : ffff0000113bd7ce
    [10.092245] x5 : 0000000000000000 x4 : 0000000000000000
    [10.092247] x3 : 00000000ffffffff x2 : ffff000011245828
    [10.092250] x1 : 4b5860bd05871300 x0 : 0000000000000000
    [10.092253] Call trace:
    [10.092255]  phy_stop+0x90/0xb0
    [10.092260]  hns_nic_init_phy+0xf8/0x110
    [10.092262]  hns_nic_try_get_ae+0x4c/0x3b0
    [10.092264]  hns_nic_dev_probe+0x1fc/0x480
    [10.092268]  platform_drv_probe+0x50/0xa0
    [10.092271]  really_probe+0x1f4/0x298
    [10.092273]  driver_probe_device+0x58/0x108
    [10.092275]  __driver_attach+0xdc/0xe0
    [10.092278]  bus_for_each_dev+0x74/0xc8
    [10.092280]  driver_attach+0x20/0x28
    [10.092283]  bus_add_driver+0x1b8/0x228
    [10.092285]  driver_register+0x60/0x110
    [10.092288]  __platform_driver_register+0x40/0x48
    [10.092292]  hns_nic_dev_driver_init+0x18/0x20
    [10.092296]  do_one_initcall+0x5c/0x180
    [10.092299]  kernel_init_freeable+0x198/0x240
    [10.092303]  kernel_init+0x10/0x108
    [10.092306]  ret_from_fork+0x10/0x18
    [10.092308] ---[ end trace 1396dd0278e397eb ]---
    This WARNING occurred because of calling phy_stop before phy_start.
    The root cause of the problem in commit '308c6caf' is:
    Reference to hns_nic_init_phy, the flag phydev->supported is changed after
    phy_connect_direct. The flag phydev->supported is 0x6ff when hns modules is
    loaded, so will not change Fiber Port power(Reference to marvell.c), which
    is power on at default.
    Then the flag phydev->supported is changed to 0x6f, so Fiber Port power is
    off when removing hns modules.
    When hns modules installed again, the flag phydev->supported is default
    value 0x6ff, so will not change Fiber Port power(now is off), causing mac
    link not up problem.
    So the solution is change phy flags before phy_connect_direct.
    Fixes: 308c6caf
     ("net: hns: All ports can not work when insmod hns ko after rmmod.")
    Signed-off-by: default avatarYonglong Liu <liuyonglong@huawei.com>
    Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>