ACK: [PATCH][SRU Cosmic][SRU Bionic] net: hns: Fix WARNING when hns modules installed

Khaled Elmously khalid.elmously at canonical.com
Thu Mar 28 06:25:40 UTC 2019


On 2019-03-08 12:19:29 , dann frazier wrote:
> From: Yonglong Liu <liuyonglong at huawei.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1818294
> 
> Commit 308c6cafde01 ("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 2b3e88ea6528 ("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
>                 phy_stop+0x90/0xb0
> [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 '308c6cafde01' 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: 308c6cafde01 ("net: hns: All ports can not work when insmod hns ko after rmmod.")
> Signed-off-by: Yonglong Liu <liuyonglong at huawei.com>
> Signed-off-by: Huazhong Tan <tanhuazhong at huawei.com>
> Signed-off-by: David S. Miller <davem at davemloft.net>
> (backported from commit c77804be53369dd4c15bfc376cf9b45948194cab)
> [dannf: Backport avoids use of linkmode helpers that weren't yet available]
> Signed-off-by: dann frazier <dann frazier at canonical.com>
> ---
>  drivers/net/ethernet/hisilicon/hns/hns_enet.c | 15 ++++++---------
>  1 file changed, 6 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
> index a80d8ea70ab88..d7a5e86670144 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
> @@ -1169,6 +1169,12 @@ int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
>  	if (!h->phy_dev)
>  		return 0;
>  
> +	phy_dev->supported &= h->if_support;
> +	phy_dev->advertising = phy_dev->supported;
> +
> +	if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
> +		phy_dev->autoneg = false;
> +
>  	if (h->phy_if != PHY_INTERFACE_MODE_XGMII) {
>  		phy_dev->dev_flags = 0;
>  
> @@ -1180,15 +1186,6 @@ int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
>  	if (unlikely(ret))
>  		return -ENODEV;
>  
> -	phy_dev->supported &= h->if_support;
> -	phy_dev->advertising = phy_dev->supported;
> -
> -	if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
> -		phy_dev->autoneg = false;
> -
> -	if (h->phy_if == PHY_INTERFACE_MODE_SGMII)
> -		phy_stop(phy_dev);
> -
>  	return 0;
>  }
>  
> -- 
> 2.20.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list