@@ -1383,8 +1383,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev)
13831383 }
13841384
13851385 priv -> port_stats .tx_timeout ++ ;
1386- en_dbg (DRV , priv , "Scheduling watchdog\n" );
1387- queue_work (mdev -> workqueue , & priv -> watchdog_task );
1386+ if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , & priv -> state )) {
1387+ en_dbg (DRV , priv , "Scheduling port restart\n" );
1388+ queue_work (mdev -> workqueue , & priv -> restart_task );
1389+ }
13881390}
13891391
13901392
@@ -1738,6 +1740,7 @@ int mlx4_en_start_port(struct net_device *dev)
17381740 mlx4_en_deactivate_cq (priv , cq );
17391741 goto tx_err ;
17401742 }
1743+ clear_bit (MLX4_EN_TX_RING_STATE_RECOVERING , & tx_ring -> state );
17411744 if (t != TX_XDP ) {
17421745 tx_ring -> tx_queue = netdev_get_tx_queue (dev , i );
17431746 tx_ring -> recycle_ring = NULL ;
@@ -1834,6 +1837,7 @@ int mlx4_en_start_port(struct net_device *dev)
18341837 local_bh_enable ();
18351838 }
18361839
1840+ clear_bit (MLX4_EN_STATE_FLAG_RESTARTING , & priv -> state );
18371841 netif_tx_start_all_queues (dev );
18381842 netif_device_attach (dev );
18391843
@@ -2004,7 +2008,7 @@ void mlx4_en_stop_port(struct net_device *dev, int detach)
20042008static void mlx4_en_restart (struct work_struct * work )
20052009{
20062010 struct mlx4_en_priv * priv = container_of (work , struct mlx4_en_priv ,
2007- watchdog_task );
2011+ restart_task );
20082012 struct mlx4_en_dev * mdev = priv -> mdev ;
20092013 struct net_device * dev = priv -> dev ;
20102014
@@ -2386,7 +2390,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
23862390 if (netif_running (dev )) {
23872391 mutex_lock (& mdev -> state_lock );
23882392 if (!mdev -> device_up ) {
2389- /* NIC is probably restarting - let watchdog task reset
2393+ /* NIC is probably restarting - let restart task reset
23902394 * the port */
23912395 en_dbg (DRV , priv , "Change MTU called with card down!?\n" );
23922396 } else {
@@ -2395,7 +2399,9 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
23952399 if (err ) {
23962400 en_err (priv , "Failed restarting port:%d\n" ,
23972401 priv -> port );
2398- queue_work (mdev -> workqueue , & priv -> watchdog_task );
2402+ if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING ,
2403+ & priv -> state ))
2404+ queue_work (mdev -> workqueue , & priv -> restart_task );
23992405 }
24002406 }
24012407 mutex_unlock (& mdev -> state_lock );
@@ -2865,7 +2871,8 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)
28652871 if (err ) {
28662872 en_err (priv , "Failed starting port %d for XDP change\n" ,
28672873 priv -> port );
2868- queue_work (mdev -> workqueue , & priv -> watchdog_task );
2874+ if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , & priv -> state ))
2875+ queue_work (mdev -> workqueue , & priv -> restart_task );
28692876 }
28702877 }
28712878
@@ -3263,7 +3270,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
32633270 priv -> counter_index = MLX4_SINK_COUNTER_INDEX (mdev -> dev );
32643271 spin_lock_init (& priv -> stats_lock );
32653272 INIT_WORK (& priv -> rx_mode_task , mlx4_en_do_set_rx_mode );
3266- INIT_WORK (& priv -> watchdog_task , mlx4_en_restart );
3273+ INIT_WORK (& priv -> restart_task , mlx4_en_restart );
32673274 INIT_WORK (& priv -> linkstate_task , mlx4_en_linkstate );
32683275 INIT_DELAYED_WORK (& priv -> stats_task , mlx4_en_do_get_stats );
32693276 INIT_DELAYED_WORK (& priv -> service_task , mlx4_en_service_task );
0 commit comments