|
|
@@ -1509,11 +1509,19 @@ static int hns_nic_net_stop(struct net_device *ndev)
|
|
|
}
|
|
|
|
|
|
static void hns_tx_timeout_reset(struct hns_nic_priv *priv);
|
|
|
+#define HNS_TX_TIMEO_LIMIT (40 * HZ)
|
|
|
static void hns_nic_net_timeout(struct net_device *ndev)
|
|
|
{
|
|
|
struct hns_nic_priv *priv = netdev_priv(ndev);
|
|
|
|
|
|
- hns_tx_timeout_reset(priv);
|
|
|
+ if (ndev->watchdog_timeo < HNS_TX_TIMEO_LIMIT) {
|
|
|
+ ndev->watchdog_timeo *= 2;
|
|
|
+ netdev_info(ndev, "watchdog_timo changed to %d.\n",
|
|
|
+ ndev->watchdog_timeo);
|
|
|
+ } else {
|
|
|
+ ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
|
|
|
+ hns_tx_timeout_reset(priv);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
|
|
|
@@ -2076,11 +2084,11 @@ static void hns_nic_service_task(struct work_struct *work)
|
|
|
= container_of(work, struct hns_nic_priv, service_task);
|
|
|
struct hnae_handle *h = priv->ae_handle;
|
|
|
|
|
|
+ hns_nic_reset_subtask(priv);
|
|
|
hns_nic_update_link_status(priv->netdev);
|
|
|
h->dev->ops->update_led_status(h);
|
|
|
hns_nic_update_stats(priv->netdev);
|
|
|
|
|
|
- hns_nic_reset_subtask(priv);
|
|
|
hns_nic_service_event_complete(priv);
|
|
|
}
|
|
|
|