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