Message ID | 20170713153431.ldrzjrghouh6nldz@xps13.dannf |
---|---|
State | New |
Headers | show |
On 13.07.2017 17:34, dann frazier wrote: > From: Lin Yun Sheng <linyunsheng@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1704146 > > When hns port type is not debug mode, netif_tx_disable is called > when there is a tx timeout, which requires system reboot to return > to normal state. This patch fix this problem by resetting the net > dev. > > Fixes: b5996f11ea54 ("net: add Hisilicon Network Subsystem basic ethernet support") > Signed-off-by: Lin Yun Sheng <linyunsheng@huawei.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 76b825ab870be3281edac4ae8a414da6e54b0d3a) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Acked-by: Stefan Bader <stefan.bader@canonical.com> > --- > drivers/net/ethernet/hisilicon/hns/hns_enet.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > index bdedea75ddab..34dd3c6f1976 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > @@ -1375,13 +1375,20 @@ void hns_nic_net_reset(struct net_device *ndev) > void hns_nic_net_reinit(struct net_device *netdev) > { > struct hns_nic_priv *priv = netdev_priv(netdev); > + enum hnae_port_type type = priv->ae_handle->port_type; > > netif_trans_update(priv->netdev); > while (test_and_set_bit(NIC_STATE_REINITING, &priv->state)) > usleep_range(1000, 2000); > > hns_nic_net_down(netdev); > - hns_nic_net_reset(netdev); > + > + /* Only do hns_nic_net_reset in debug mode > + * because of hardware limitation. > + */ > + if (type == HNAE_PORT_DEBUG) > + hns_nic_net_reset(netdev); > + > (void)hns_nic_net_up(netdev); > clear_bit(NIC_STATE_REINITING, &priv->state); > } > @@ -2002,13 +2009,8 @@ static void hns_nic_reset_subtask(struct hns_nic_priv *priv) > rtnl_lock(); > /* put off any impending NetWatchDogTimeout */ > netif_trans_update(priv->netdev); > + hns_nic_net_reinit(priv->netdev); > > - if (type == HNAE_PORT_DEBUG) { > - hns_nic_net_reinit(priv->netdev); > - } else { > - netif_carrier_off(priv->netdev); > - netif_tx_disable(priv->netdev); > - } > rtnl_unlock(); > } > >
On Thu, Jul 13, 2017 at 09:34:31AM -0600, dann frazier wrote: > From: Lin Yun Sheng <linyunsheng@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1704146 > > When hns port type is not debug mode, netif_tx_disable is called > when there is a tx timeout, which requires system reboot to return > to normal state. This patch fix this problem by resetting the net > dev. > > Fixes: b5996f11ea54 ("net: add Hisilicon Network Subsystem basic ethernet support") > Signed-off-by: Lin Yun Sheng <linyunsheng@huawei.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 76b825ab870be3281edac4ae8a414da6e54b0d3a) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Clean cherry pick, affects only a single, platform-specific driver. Acked-by: Seth Forshee <seth.forshee@canonical.com> Applied to artful/master-next and unstable/master, thanks.
Applied to zesty master-next branch. Thanks. Cascardo.
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c index bdedea75ddab..34dd3c6f1976 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c @@ -1375,13 +1375,20 @@ void hns_nic_net_reset(struct net_device *ndev) void hns_nic_net_reinit(struct net_device *netdev) { struct hns_nic_priv *priv = netdev_priv(netdev); + enum hnae_port_type type = priv->ae_handle->port_type; netif_trans_update(priv->netdev); while (test_and_set_bit(NIC_STATE_REINITING, &priv->state)) usleep_range(1000, 2000); hns_nic_net_down(netdev); - hns_nic_net_reset(netdev); + + /* Only do hns_nic_net_reset in debug mode + * because of hardware limitation. + */ + if (type == HNAE_PORT_DEBUG) + hns_nic_net_reset(netdev); + (void)hns_nic_net_up(netdev); clear_bit(NIC_STATE_REINITING, &priv->state); } @@ -2002,13 +2009,8 @@ static void hns_nic_reset_subtask(struct hns_nic_priv *priv) rtnl_lock(); /* put off any impending NetWatchDogTimeout */ netif_trans_update(priv->netdev); + hns_nic_net_reinit(priv->netdev); - if (type == HNAE_PORT_DEBUG) { - hns_nic_net_reinit(priv->netdev); - } else { - netif_carrier_off(priv->netdev); - netif_tx_disable(priv->netdev); - } rtnl_unlock(); }