lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 140/265] ionic: tame the watchdog timer on reconfig
    Date
    From: Shannon Nelson <snelson@pensando.io>

    [ Upstream commit b59eabd23ee53e8c3492602722e1697f9a2f63ad ]

    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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/pensando/ionic/ionic_lif.c | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
    index 2729b0bb12739..790d4854b8ef5 100644
    --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
    +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
    @@ -1682,8 +1682,8 @@ 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)
    @@ -1949,18 +1949,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.25.1
    \
     
     \ /
      Last update: 2020-06-29 23:53    [W:2.113 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site