aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 69e684fd2787..035d47d2179a 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -76,7 +76,7 @@ MODULE_DEVICE_TABLE(pci, ena_pci_tbl);
76 76
77static int ena_rss_init_default(struct ena_adapter *adapter); 77static int ena_rss_init_default(struct ena_adapter *adapter);
78static void check_for_admin_com_state(struct ena_adapter *adapter); 78static void check_for_admin_com_state(struct ena_adapter *adapter);
79static void ena_destroy_device(struct ena_adapter *adapter); 79static void ena_destroy_device(struct ena_adapter *adapter, bool graceful);
80static int ena_restore_device(struct ena_adapter *adapter); 80static int ena_restore_device(struct ena_adapter *adapter);
81 81
82static void ena_tx_timeout(struct net_device *dev) 82static void ena_tx_timeout(struct net_device *dev)
@@ -1900,7 +1900,7 @@ static int ena_close(struct net_device *netdev)
1900 "Destroy failure, restarting device\n"); 1900 "Destroy failure, restarting device\n");
1901 ena_dump_stats_to_dmesg(adapter); 1901 ena_dump_stats_to_dmesg(adapter);
1902 /* rtnl lock already obtained in dev_ioctl() layer */ 1902 /* rtnl lock already obtained in dev_ioctl() layer */
1903 ena_destroy_device(adapter); 1903 ena_destroy_device(adapter, false);
1904 ena_restore_device(adapter); 1904 ena_restore_device(adapter);
1905 } 1905 }
1906 1906
@@ -2550,7 +2550,7 @@ err_disable_msix:
2550 return rc; 2550 return rc;
2551} 2551}
2552 2552
2553static void ena_destroy_device(struct ena_adapter *adapter) 2553static void ena_destroy_device(struct ena_adapter *adapter, bool graceful)
2554{ 2554{
2555 struct net_device *netdev = adapter->netdev; 2555 struct net_device *netdev = adapter->netdev;
2556 struct ena_com_dev *ena_dev = adapter->ena_dev; 2556 struct ena_com_dev *ena_dev = adapter->ena_dev;
@@ -2563,7 +2563,8 @@ static void ena_destroy_device(struct ena_adapter *adapter)
2563 dev_up = test_bit(ENA_FLAG_DEV_UP, &adapter->flags); 2563 dev_up = test_bit(ENA_FLAG_DEV_UP, &adapter->flags);
2564 adapter->dev_up_before_reset = dev_up; 2564 adapter->dev_up_before_reset = dev_up;
2565 2565
2566 ena_com_set_admin_running_state(ena_dev, false); 2566 if (!graceful)
2567 ena_com_set_admin_running_state(ena_dev, false);
2567 2568
2568 if (test_bit(ENA_FLAG_DEV_UP, &adapter->flags)) 2569 if (test_bit(ENA_FLAG_DEV_UP, &adapter->flags))
2569 ena_down(adapter); 2570 ena_down(adapter);
@@ -2665,7 +2666,7 @@ static void ena_fw_reset_device(struct work_struct *work)
2665 return; 2666 return;
2666 } 2667 }
2667 rtnl_lock(); 2668 rtnl_lock();
2668 ena_destroy_device(adapter); 2669 ena_destroy_device(adapter, false);
2669 ena_restore_device(adapter); 2670 ena_restore_device(adapter);
2670 rtnl_unlock(); 2671 rtnl_unlock();
2671} 2672}
@@ -3467,7 +3468,7 @@ static int ena_suspend(struct pci_dev *pdev, pm_message_t state)
3467 "ignoring device reset request as the device is being suspended\n"); 3468 "ignoring device reset request as the device is being suspended\n");
3468 clear_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags); 3469 clear_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3469 } 3470 }
3470 ena_destroy_device(adapter); 3471 ena_destroy_device(adapter, true);
3471 rtnl_unlock(); 3472 rtnl_unlock();
3472 return 0; 3473 return 0;
3473} 3474}