You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
80 lines
2.5 KiB
Date: Mon, 22 Jun 2020 01:25:29 -0400
|
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
|
To: rhkernel-list@redhat.com
|
|
Cc: darcari@redhat.com, nhorman@redhat.com, linville@redhat.com
|
|
Subject: [PATCH RHEL-8.3] ionic: tame the watchdog timer on reconfig
|
|
|
|
Even with moving netif_tx_disable() to an earlier point when
|
|
taking down the queues for a reconfiguration, we still end
|
|
up with the occasional netdev watchdog Tx Timeout complaint.
|
|
The old method of using netif_trans_update() works fine for
|
|
queue 0, but has no effect on the remaining queues. Using
|
|
netif_device_detach() allows us to signal to the watchdog to
|
|
ignore us for the moment.
|
|
|
|
Fixes: beead698b173 ("ionic: Add the basic NDO callbacks for netdev support")
|
|
Signed-off-by: Shannon Nelson <snelson@pensando.io>
|
|
Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
(cherry picked from commit b59eabd23ee53e8c3492602722e1697f9a2f63ad)
|
|
Bugzilla: 1846879
|
|
Bugzilla: 1846280
|
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=29551761
|
|
Tested: partner tested
|
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
---
|
|
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 15 ++++++++-------
|
|
1 file changed, 8 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
|
index 8f29ef133743..aaa00edd9d5b 100644
|
|
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
|
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
|
|
@@ -1694,15 +1694,15 @@ static void ionic_stop_queues(struct ionic_lif *lif)
|
|
if (!test_and_clear_bit(IONIC_LIF_F_UP, lif->state))
|
|
return;
|
|
|
|
- ionic_txrx_disable(lif);
|
|
netif_tx_disable(lif->netdev);
|
|
+ ionic_txrx_disable(lif);
|
|
}
|
|
|
|
int ionic_stop(struct net_device *netdev)
|
|
{
|
|
struct ionic_lif *lif = netdev_priv(netdev);
|
|
|
|
- if (!netif_device_present(netdev))
|
|
+ if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
|
|
return 0;
|
|
|
|
ionic_stop_queues(lif);
|
|
@@ -1985,18 +1985,19 @@ int ionic_reset_queues(struct ionic_lif *lif)
|
|
bool running;
|
|
int err = 0;
|
|
|
|
- /* Put off the next watchdog timeout */
|
|
- netif_trans_update(lif->netdev);
|
|
-
|
|
err = ionic_wait_for_bit(lif, IONIC_LIF_F_QUEUE_RESET);
|
|
if (err)
|
|
return err;
|
|
|
|
running = netif_running(lif->netdev);
|
|
- if (running)
|
|
+ if (running) {
|
|
+ netif_device_detach(lif->netdev);
|
|
err = ionic_stop(lif->netdev);
|
|
- if (!err && running)
|
|
+ }
|
|
+ if (!err && running) {
|
|
ionic_open(lif->netdev);
|
|
+ netif_device_attach(lif->netdev);
|
|
+ }
|
|
|
|
clear_bit(IONIC_LIF_F_QUEUE_RESET, lif->state);
|
|
|
|
--
|
|
2.16.4
|
|
|
|
|